配置Linux虚拟机在多个网络中快速切换

2017-12-20|Categories: Magedu-training|

背景

我经常需要在多个网络之间切换:

  • 教室局域网
  • 宿舍WiFi
  • 手机热点
  • 无法连接互联网

如何保证多台虚拟机在切换到新的网络时能够自动获取IP地址,同时还要能够保留固定的IP地址,以便macOS主机与虚拟机、虚拟机与虚拟机之间能够正常通信?例如,可以从主机ssh连接到多台虚拟机。

每次手动设置网卡IP地址当然可以,但太过繁琐,属于毫无价值的重复工作,我需要的是一种简单灵活的方式。

思路

  • 类Unix系统(macOS、Linux)都支持网卡别名,可以给一个网卡设置多个IP地址,然后就可以和多个网段通信。
  • 安装VMware虚拟机软件之后,会在操作系统生成三块虚拟网卡,其中的vmnet1网卡工作在host-only仅主机模式,即使没有互联网连接,也可以非常方便的和局域网内的虚拟机通信。

配置网卡

macOS主机

  • 主机的实体网卡不需要特别设置,保持默认的「使用DHCP」自动获取IP即可,不管切换到哪个网络,都能自动获取IP。
  • 只要启动VMware Fusion,vmnet1虚拟网卡就会出现(ifconfig vmnet1可以查看),保持默认的IP地址172.16.125.1/24即可。

CentOS虚拟机

  • 必须有一块网卡配置为DHCP。
  • 只有主网卡支持DHCP,网卡别名不支持DHCP。
  • 虚拟机可以任意添加网卡,我常用两块网卡:一块设置为桥接模式,可以访问互联网;另一块设置为仅主机模式,只和局域网内的机器通信。
  • 为了保证网卡配置信息在系统重启后仍然有效,需要把所有配置写入网卡配置文件。

假设我需要给CentOS 6虚拟机配置多个IP,可以这样做:

配置第一块网卡

第一块网卡是桥接模式,需要自动从DHCP获取IP地址:

cd /etc/sysconfig/network-scripts

$ vim ifcfg-eth1
    DEVICE=eth1
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=dhcp
    NAME=eth1
    DNS1=223.5.5.5
    DNS2=119.29.29.29

配置第一块网卡的别名

第一个网卡别名是ifcfg-eth1:1,静态IP地址172.18.19.61/16,用于教室局域网:

$ vim ifcfg-eth1:1
    DEVICE=eth1:1
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=none
    IPADDR=172.18.19.61
    PREFIX=16
    NAME=eth1:1
    DNS1=223.5.5.5
    DNS2=119.29.29.29

第二个网卡别名是ifcfg-eth1:2,静态IP地址192.168.43.61/24,用于手机分享的4G网络热点:

$ vim ifcfg-eth1:2
    DEVICE=eth1:2
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=none
    IPADDR=192.168.43.61
    PREFIX=24
    NAME=eth1:2
    DNS1=223.5.5.5
    DNS2=119.29.29.29

其它别名可以根据需要设置,只要DEVICE字段遵循ifcfg-eth1:NUM这种命名规则即可。

配置第二块网卡

第二块网卡是仅主机模式,为了便于局域网通信,配置静态IP地址172.16.125.61/24,用于连接vmnet1虚拟网卡:

$ vim ifcfg-eth2
    DEVICE=eth2
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=none
    IPADDR=172.16.125.61
    PREFIX=24
    NAME=eth2
    DNS1=223.5.5.5
    DNS2=119.29.29.29

重启网络服务

service network restart

如果某块网卡没有获取到正确的地址,可以ifdown <iface_name>停用网卡,然后ifup <iface_name>手动重启,把<iface_name>替换成实际的网卡名称即可,例如eth1

配置SSH

为了避免每次切换网络ssh都要输入不同的IP地址重新连接,可以在~/.ssh/config文件设置好主机名:

# my 1st vm with CentOS 6
# m = Magedu ethernet network
host 61m
    HostName 172.18.19.61
    Port 22
    User root
# h = Hot-spot 4G network
host 61h
    HostName 192.168.43.61
    Port 22
    User root
# vh = Vmware Host-only, do NOT need internet connection
host 61vh
    HostName 172.16.125.61
    Port 22
    User root

host字段后面的61m61h61vh都是主机名,用户根据自己的需求可以完全自定义,然后通过ssh 61m这样的方式直接连接,非常方便。

Leave A Comment