转载请注明出处:http://blog.csdn.net/lifajun90/article/details/23973703
在使用VMware Workstation时,虚拟机联网有三种模式可以选择:桥接模式(Bridged)、仅主机模式(Host-only)和NAT模式。三种联网模式分别适用于不同的应用场景,那么这三种联网模式究竟有什么区别,以及它们的工作原理分别是什么呢?接下来,我将对这些问题进行一个详细的解答。
在介绍VMware Workstation的联网模式之前,必须首先明确虚拟交换机的概念。虚拟交换机,有时也叫虚拟网桥,是一种通过软件实现的交换机,它的工作方式和物理交换机类似,用于做局域网中链路层帧的转发,但虚拟交换机主要用于虚拟化计算中,它连接的是虚拟设备上的虚拟网卡。
在VMware Workstation的安装过程中,它会在用户的主机上默认创建三个虚拟交换机:VMnet0(默认虚拟交换机)、VMnet1(Host-only模式使用)和VMnet8(NAT模式使用)。除此之外,用户还可以添加额外的虚拟交换机,如VMnet2、VMnet3等,根据所安装的VMware Workstation的版本,用户可以添加不同数量的虚拟交换机。
除了创建虚拟交换机之外,VMware Workstation在安装时,还会默认添加几个服务,如NAT服务用于做网络地址转换,DHCP服务用于做动态IP地址分配。
VMware Workstation桥接模式用到了虚拟交换机VMnet0,它的联网方式如图1所示。
图1 桥接模式
从上图可以看出,通过桥接模式联网,虚拟机和Host主机处于同等的地位,它们都直接连接在虚拟交换机VMnet0上,那么这时虚拟机的IP地址从何而来呢?答案是Host主机的IP地址从哪里来,它的IP地址就从哪里来。因此,通过这种联网方式,用户创建一台虚拟机就相当于在局域网里面添加了一台物理机,它可以和局域网里面的其他机器互ping。
对于图1所示的网络结构,有很多值得探讨的地方,其中一个最大的问题就是:从用户角度来看,明明是主机连接着局域网交换机,而在这里为什么变成VMnet0连接到局域网交换机了呢。
其实,这里涉及到了一个虚拟交换机连接物理网络的过程。下面我通过讲述OpenvSwitch(鼎鼎大名的Linux上的虚拟交换机软件,以下简称OVS)连接物理网络的方式来讲述这个过程,VMnet0的工作方式和OVS大同小异,只是OVS使用起来更直观。
使用OVS连接物理网络主要分为以下几步:
第一步,用户首先通过命令ovs-vsctl add-br br0在主机上创建一个虚拟交换机br0。在创建br0的同时,会自动在主机上创建一块虚拟网卡(名字和虚拟交换机一样也叫br0),这个网卡就像物理交换机的管理接口一样,用户可给该网卡配置IP地址,然后telnet到交换机上对该交换机进行管理。
第二步,通过命令ovs-vsctl add-port br0 eth0把主机的外网接口eth0添加到br0上作为br0的一个端口,并把eth0设置为混杂模式(Linux下的概念?其实就是设置为可以接收所有到达的数据包),这一步是br0连接物理网络的关键。借由这一步,br0就通过端口eth0实现了和局域网物理交换机的级联,从而局域网的数据帧能够到达br0。
好了,级联是成功了,但是更大的问题出现了!主机上不了外网了!这是为什么呢?因为在上面的第二步中,已经把主机的外网接口eth0作为虚拟交换机的一个端口了,很明显交换机的端口是不会有IP地址的(就算设了IP地址也没用!),所以主机没有IP了!那么现在怎么解决这个问题呢?这就需要接下来的第三步。
第三步,通过命令ip address add $HOST_IP dev br0把原本分配给eth0的IP地址分配给虚拟交换机br0的管理网卡br0(名字和虚拟交换机一样)。这样主机通过该虚拟网卡br0就可以连接外网了。
这三个步骤的结果可以通过图2所示的平面结构图表示。
图2 br0平面结构图
从上述分析可以得出,当在主机上安装了OVS/VMnet0之后,用户的主机其实已经变成了一台交换机,而主机操作系统其实就变成了升级版的交换机管理系统(除了管理交换机,还有很多其它的程序)。所以,从这个角度来看,就很容易理解为什么是VMnet0连接到局域网交换机了,桥接模式的原理也很好理解了。
VMWare Workstation联网的第二种模式为仅主机模式,它主要用到虚拟交换机VMnet1,它的联网方式如图3所示。
图3 Host-only模式
在Host-only模式下,主机同样通过VMnet0桥接上网,但是其它的虚拟机已经不再连接到VMnet0上面了,而是连接在虚拟交换机VMnet1上。从图3可以看出,VMnet1并没有与外部局域网连接,它通过自己的DHCP为虚拟机分配IP地址,因此在Host-only模式下,虚拟机是不能上外网的(除非你把主机作为虚拟机的网关,并做NAT转换),但是虚拟机、主机和VMnet1其实构成了一个小型局域网,因此它们互相之间可以ping通。
这里有一个有趣的问题,主机(Host)和VMnet1是怎么连接起来的呢?显然它不是通过主机的外网网卡(在VMnet0上呢),而是通过VMware Workstation安装过程中在主机上创建的两张网卡之一:VMware Network Adapter VMnet1(Win7系统在网络和共享中心可以看到它)。如果把这张网卡禁掉,虚拟机和主机之间就不能互ping了,而且上面所说的虚拟机ping通主机也只是ping通这张网卡的地址而已。
VMWare Workstation NAT模式主要用到VMnet8虚拟交换机,该模式可以用图4所示的结构来表示。
图4 NAT模式
从图4中可以看出,NAT模式比起Host-only模式在组件上有两处区别:1)多了一个叫vNAT的路由器;2)VMnet1虚拟交换机被VMnet8替换了,因此这次是通过VMnet8构建了一个小型局域网来实现虚拟机和主机之间的互ping。
vNAT,它其实是VMWare Workstation在安装时创建在主机上的NAT服务,它已被VMWare自动关联到VMnet0和VMnet8虚拟交换机之上(用户创建的虚拟机可以直接使用了)。正是因为有了NAT,所以VMnet8上桥接的虚拟机可以访问外网了(但这时外网还不能访问虚拟机,除非用户在主机上做了端口映射),所以如果哪天用户发现自己虚拟机的网络配置都正确,但就是上不了外网,首先就应该看NAT服务是否正常工作。
从图4中可以看出VMnet8上还连接了其它两个非虚拟机组件,第一个为vDHCP,它是用来为虚拟机分配IP地址用的,它其实是主机上的DHCP服务。在通过vDHCP为虚拟机分配IP时,有一个很重要的信息需要分配给虚拟机,那就是网关地址(在这里其实可以理解为vNAT的地址),如果没有该地址,那么虚拟机会找不到vNAT路由器,从而不能访问外网。所以,在手动为虚拟机配置静态IP时,一定要指定网关地址,否则会上不了外网。
VMnet8上连接的另一个非虚拟机组件为主机,这时主机连接VMnet8显然也不是通过外网网卡,而是通过VMware Workstation安装过程中在主机上创建的另一张网卡:VMware Network Adapter VMnet8,因此如果禁掉该网卡,相当于断掉主机与VMnet8的连接,主机将ping不通虚拟机了。但是这时虚拟机可以ping通主机的外网地址,因为虚拟机的数据包可以先通过vNAT,再通过VMnet0,最后到达主机。
根据VMwareWorkstation三种模式的联网原理,以及每种模式下虚拟机和物理主机的网络连通性,总结一下这三种联网模式的应用场景。
Bridged模式:由于在这种模式下,虚拟机就相当于局域网里面的一台物理主机,因此,如果用户的虚拟机能从局域网获取IP,并且用户想在自己的主机上架设很多台可被局域网内其它主机访问的虚拟主机(如虚拟服务器),可以考虑使用这种模式。
Host-only模式:由于在这种模式下,虚拟机只能和其它虚拟机以及物理主机通信,不能访问外部网络,外部网络也不能访问虚拟机,所以这种模式多用于需要一个隔离网络的实验场景。
NAT模式:这种模式应该是使用最多的一种模式了。如果用户想要快速搭建一些能够上网,但是又不想被外部主机访问的虚拟机,就可以采用这种模式(笔者还用这种模式做过虚拟桌面)。
参考文章:http://wangchunhai.blog.51cto.com/225186/61597
http://blog.163.com/s_zhchluo/blog/static/15014708201411234648954/