VMware,鼎鼎大名的虚拟机软件,没有人不知道吧?当然,在Linux下使用虚拟机软件,并不一定需要使用VMWare,Xen也是非常不错的选择,有很多评测就认为XEN的表现优于VMware。可惜的是Xen不支持安装Windows之类的OS。
VMware里的客户操作系统(Guest operating system),其网络连接方式允许是:桥接方式(Bridged network)、地址转换方式(NAT network),单独主机方式(Host only),以及自定义方式。
其中,桥接方式相当于将虚拟机上的操作系统直接接入到你所在的局网的交换机,你可以为它的网卡绑定一个IP,也可以让它通过你网络里的DHCP获得。这种方式是我们使用最为普遍的方式。在这种方式下,从局域网上看来,虚拟机就是一台真实的机器。
地址转换方式下也允许客户操作系统访问到外部网络,与上述方式不同的是,在这种方式下,宿主机和虚拟机之间构成了一个单独的局网,虚拟机通过宿主机提供的NAT访问到宿主机接触到的实际网络。对于宿主机所在的网络来说,它们看不到虚拟机的存在。
关于网络连接方式,不是本文要介绍的内容。实际上本文只是要介绍一个简单的方法,当我们的虚拟机使用“桥接”方式,在宿主机上存在多块网卡的情况下,怎样将虚拟机“桥接”到外部网络。
在VMWare安装的时候,我们运行:
SuSE-Brooks:/ # vmware-config.pl
该命令将通过提问的方式依次配置好各个环节,其中包括宿主机将使用的网络类型。当我们选择 “桥接”方式时,它要求我们给出桥接所使用到的宿主机上的网卡。在我的这台本子上,存在了两块网卡:eth0和eth1,加上lo,就是3块。如果将 PPP拨通,就有了4块。其中,eth0是100M的局网网卡, eth1是802.11g无线网卡。在家的时候,我使用eth1;在公司的时候,我使用桌面上提供的网线连接eth0。如果我们在配置vmware的时候指定了其中一块网卡,比如eth0,那么当我回到家后使用eth1的时候,我怎样才能将我的vmware上的虚拟机bridge出去呢?让我们来看下 /etc/init.d/vmware都启动了一些什么,脚本就不看了,我们看看内存里有些什么吧。
SuSE-Brooks:/ # ps aux |grep vmnet
root 3548 0.0 0.0 1564 188 ? Ss Oct11 0:00 /usr/bin/vmnet-bridge -d /var/run/vmnet-bridge-0.pid /dev/vmnet0 eth0
root 5566 0.0 0.0 2864 736 pts/0 S+ 00:19 0:00 grep vmnet
显然,vmware通过/usr/bin/vmnet-bridge这个命令来指定我们桥接的时候使用的网卡。上面的结果,是使用的eth0。知道这个了就好办了,如果我们要使用eth1,那么:
SuSE-Brooks:/ # kill 3548
SuSE-Brooks:/ # /usr/bin/vmnet-bridge -d /var/run/vmnet-bridge-0.pid /dev/vmnet0 eth1
即可。试试看,是不是已经能够访问eth1所在的网络了?别忘记需要重新启动虚拟机的网络。