在虚拟机的三种网络模式中(Host-Only、桥接、NAT),能够实现虚拟机访问互联网的只有桥接与NAT模式,而Host-only主能实现虚拟机与主机两者间的通信。下面以RedHat系虚拟机系统为例,讲述了桥接与NAT两种方式下虚拟机访问互联网的实现方法:
1. 桥接模式
首先设置虚拟机静态IP。其一,可以用RedHat内置的setup命令调出相关参数设置界面;其二,可以在网络配置文件中直接修改(setup的配置最终也是同步在该配置文件中)。需要注意的是,该静态IP应与主机IP在同一网段,掩码以及网关与主机保持一致。另外,需要区分主机的网络连接方式:有线or无线,以相应的选择桥接网卡类型及配置虚拟机的网络参数。(网络配置文件路径:/etc/sysconfig/network-scripts/ifcog-eth0)
网络参数配置正确后,重启网络服务(service network restart),查看网络参数(ifconfig)便可以看到参数已按照修改同步。接着,对主机与虚拟机进行互ping:主机通常可以正常ping通虚拟机,虚拟机若不能ping通主机则是由于主机的防火墙没有关闭,关闭之后一般便可以ping通了。
桥接模式下,虚拟机其实是独立于主机的,因此需要一个与主机IP同级的IP。由于我在实验中用的是校园网,每个用户是需要登录客户端来访问互联网的,根据用户MAC地址以DHCP方式分配给每一个用户一个IP地址。这种情况下我的虚拟机显然是不能上网的,事实上当我用虚拟机ping网关是也是ping不同的,其实就相当于我的虚拟机被连接外网的路由器*在了局域网内,只能与局域网的用户通信。
综上,使用校园网的情况下,桥接模式只能实现虚拟机与主机或局域网内的客户机通信而不能访问外网。
2. NAT模式
NAT模式下,只要主机能够访问互联网,虚拟机就可以。我的网络参数配置情况是,在虚拟机网络编辑器的NAT模式下,设置子网IP、掩码与主机子网IP、掩码一致(子网IP即为主机IP与掩码相与&的结果)。NAT设置项中,设置虚拟机网关为主机IP,在DHCP选项中可以根据子网IP设置主机分配的动态IP的范围。实验中我使用了DHCP的方式配置虚拟机IP。同样可以用setup工具或在配置文件(/etc/sysconfig/network-scripts/ifcog-eth0)中直接配置IP网络模式为DHCP。
我的 /etc/sysconfig/network-scripts/ifcog-eth0 网络配置文件内容如下:
DEVICE=eth0
BOOTPROTO=dhcp <- 该行用于配置IP方式,'='右边的参数必须小写,这里设置为dhcp方式,参数none表示手动设置的方式
HWADDR=00:0c:29:38:3b:ac
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID="a9654486-8d9b-409d-b35e-99a5d5b91667"
#Host With Wire Mode
#IPADDR=10.136.1.220
#NETMASK=255.255.240.0
#GATEWAY=10.136.0.1
#DNS1=172.16.7.10
IPV6INIT=no
USERCTL=no
网络参数配置完成,重启网络服务(service network restart),这样,主机与虚拟机便可以互相ping通。然而,主机ping虚拟机时可能会存在ping不通的情况,这可能是由于主机网络连接里面的虚拟适配器VMware Network Adapter VMnet8在捣鬼。前面我们已经设置了DHCP的模式配置虚拟机IP,因此,同样需要将VMnet8的IPv4配置为DHCP方式。
经过上述的相关配置后,虚拟机以NAT网络模式访问互联网便得以实现。
PS: 之后的使用过程中发现,如果手动设置NAT模式下的相关网络配置参数(如子网、掩码以及NAT和DHCP的设置),虽然能够实现访问外网,但是很不稳定,容易断开连接。具体原因并未发现,因此只能将网络配置恢复默认。这确实是一个万能的方式,只需要保持原始配置,虚拟机选择NAT模式。开机后用setup工具配置虚拟机为DHCP模式,然后编辑 /etc/sysconfig/network-scripts/ifcog-eth0配置文件,设置ONBOOT=yes以启动网卡eth0,退出,重启网络服务service network restart,虚拟机便可以稳定上网了。