对于广大学习Linux的爱好者,特别是初学者来说,使用虚拟机的方式来安装学习Linux是很理想的方案。这样既可以在windows下使用网络来搜索资料,又可以立即在Linux系统平台下实践,但是困扰大家的往往就是虚拟机中网络的配置。
下面我就结合我自己的学习实践经验谈一点我对这个虚拟机的理解。在谈这个之前,首先要求vmware需要正确被安装,特别是VmwareTools,最好也要安装,并启动Vmware服务。具体设置vmwaretools的方法网上有很多大家可以自己搜索。
设置上的困难是源于对vmware虚拟机本质的不理解,所以大家往往设置起来就无所适从。vmware安装好以后,会自动添加两张网卡(可以在网络属性中找到),这么多网卡,到底怎么设置,想了半天,突然来了灵感,终于有了一点头绪。
我个人认为,Vmware虽然是一个windows下的软件,但是把其可以看成是单独的计算机好像更合理一些,这样安装好linux虚拟系统后,其实整个机器的结构就可以抽象成这样:
虚拟机系统《虚拟网卡vmnet0》―――(vmnet1 vmnet8)―――实际系统《网卡》。其实也就是 (虚拟计算机系统 、网络设备、实际计算机系统) 。
如果你在安装虚拟机选择使用网络的方式是桥接的话,那么vmware就模拟成一个网桥的功能,就只使用 vmnet1网卡,vmnet8就可能不用;
如果在安装虚拟机选择使用网络的方式是NAT方式的话,那么vmware就模拟成了一个 具有DHCP功能的 路由器或网关,这个时候vmnet8就要派上用场了;
对于一般学习操作系统使用者来说,这两种方式就差不多了,如果是做网络模拟的,就可以使用vmnet2~vmnet7这几个,其实本质上这些网卡功能都是vmware虚拟出来的,和vmnet0一样,使用方式都是一样的。
我想,只要理解了vmware的实质就是模拟成一台具有两张网卡的计算机,是虚拟机和实际机器的网络节点就可以,理解了本质,就可以有的放矢的去设置。
vmware安装好了以后,会自动设置自动生成的两张网卡vmnet1和vmnet8。这两个设置一般不要改动,我们只要直接进入虚拟机上的系统,并在该系统内设置系统虚礼的网卡就可以了。
(1)使用桥接方式:直接设置
例子: 我的虚拟linux系统选择的桥接方式,因为我实验室还有多余的IP地址,所以和windows系统一样的去配置vmnet0,就可以了,在虚拟系统上,可以方便的访问内部局域网和校园网,至于用拨号的方式上外网。
(2)Nat方式:
如果你的ip地址有限,那只有使用Nat方式去设置了,这个要麻烦一些,关键在于三点:
1.确定虚拟机上的虚礼网卡和vmnet1的网络号相同;
2.在虚拟系统里设置网络属性,把网关地址设为vmnet1的地址;
3.开启主系统的路由功能,使它成为一台路由器。
事实上,如果你只需要虚拟系统和主系统通信,而不需要和主系统所在的真实网络上的其他主机通信的话只要满足第一点就可以了。因为满足第一点,主系统和虚拟系统就在同一网络中了,不需要路由器便可通信。但是大多数情况下我们需要虚拟系统和主系统所在的真实网络通信,这就需要满足其他两点了,并且需要多余的一个在实际网络中的有效帐号给vmnet8使用。
在VMware安装的时候安装程序会自动给vmnet1分配一个IP地址,下面是笔者电脑上例子:
vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01
inet addr:192.168.239.1 Bcast:192.168.239.255 Mask:255.255.255.0
在第二行可以看到安装程序给vmnet1分配的IP地址为192.168.239.1(注意每次安装VMware IP地址是随机分配的,实际的情况与这里的例子会不同)。即虚拟网卡vmnet1属于网络192.168.239。因此,我们需要启动虚拟系统,设置网络属性,把虚拟系统的网卡的IP地址设置为192.168.239.x (x为除1以外2~254之间的任意数字笔者把它设置为2),把网关设置为vmnet1的地址:192.168.239.1(如果不和外界真实网络通信的话网关可以不设),windows 2000和XP 设置后立即生效,win98需要重新启动,linux需要使用命令#service network restart重新启动网络服务。
这时候可以在虚拟系统上使用ping命令测试 一下到localhost和网关通不通,基本上没有问题都会通的。
3.2.1 首先在你的电脑上需要有一块与真实网络相连真实的网卡
vmnet8就在与真实网络通讯的时候起作用了,vmnet8会和真实网卡对应起来,虚拟系统要发送数据包到真实网络中的时候,真实系统是一台路由器,首先数据发到虚拟网卡vmnet1,然后经过路由器(这里就是主系统linux)发到vmnet8,由于vmnet8和真实网卡是对应起来的,这一机制是有vmware完成的,所以发到vmnet8上的网卡就等于传送到了真实网卡上,然后数据包再通过真实网卡发送到真实网络。如果你的系统上有两块以上的真实网卡,在安装的时候安装程序会询问把虚拟网卡对应到哪个真实网卡上,可以根据实际情况选择。
把vmnet8的IP地址设置为和真实网卡在同一网络的地址,假设真实网络的网络号为192.168.0,真实网卡的IP地址为192.168.0.1则可设置vmnet8的IP地址为192.168.0.2。当然,vmnet8也要占用一个有效的IP地址。
进一步抽象上两步的本质就是:
(1)将虚拟机的网卡vmnet0和vmware的网卡vmnet1设置成一个网段;
(2)就是将vmware的网卡vmnet8和实际计算机的网卡放在同一网段;
3.2.2 那么下一步就是在实际的计算机中安装代理或路由的功能:
(1)如果你的实际系统是linux的话(估计这种情况不多见),只要开启了linux的路由功能虚拟系统就可以和外界通讯了。基本上用linux来做路由器甚至不需要额外的软件,linux的内核直接支持静态路由的功能。我们要做的只是把路由功能打开就可以了。
可以先看看路由表:
#route
确定所有网卡的IP地址或网络地址都在Destination一栏里,如下:
-------------------------------------------------------------------------------
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 vmnet8
192.168.221.0 * 255.255.255.0 U 0 0 0 vmnet1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default http://www.gucuiwen.co/ 0.0.0.0 UG 0 0 0 eth0
-------------------------------------------------------------------------------
默认情况下启动网络设备的时候系统会把该设备的IP地址添加到路由表中,如果没有的话可以重新启动一下网络服务:
#service network restart
再来开启路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
至此,linux的路由功能已经打开,你的linux系统已经成了一台路由器,连接着虚拟的网络和真实网络。虚拟网络和真实网络间就可以通信了。出于安全考虑,如果有必要的话还需要用iptables命令来设置一下路由规则。
(2)如果实际系统是Windows下的话,那开启路由功能要比linux下稍微麻烦一点。
在Windows下的虚拟机的网络设置大致和linux下的相同,只不过需要安装额外的路由软件,在Windows平台上有很多这样的软件可以用,比如 SysGate WinGate等,如果用的是Windows 2000 Server 或者是Windows NT Server 的话可以用系统自带的"路由和远程访问"软件。具体的设置大家可以去网络上搜索。
当然,vmware的功能不只有这些,如果你的电脑硬件足够的好,有1G以上的内存和2G以上的CPU的话,那你也可以同时运行几台虚拟机,把这几台虚拟机组成一个网络,这样在一台电脑上就可以有一个功能强大的网络实验平台了。