写在前面
本文主要分析下vmware三种网络模式的实现,然后说明eveng如何借助vmware虚拟网卡实现内部设备与外网的联通,最后分析下eveng lab中虚拟网络设备之间的连通性。
VMware的三种网络模式
vmware有桥接、NAT、host-only三种网络模式。其中NAT和host-only会默认在host上各创建一张虚拟网卡。其中VMnet1是host-only,VMnet8是NAT。我们在虚拟的配置hardware时,可以添加网络设备。
如果选择NAT、host-only、桥接则使用默认网卡。选择custome时,可以指定我们自己创建的其它网卡。注意,只能存在一个bridge和NAT的网络,即我们可以额外添加的虚拟网络类型只能是host-only。下面对三种网络模式做一个简单说明。
桥接模式
三种模式下只有桥接模式没有创建虚拟网卡,这种模式下虚拟机和主机相当于连接在同一个网桥上,网桥的出口是主机的物理出口网卡,虚拟机的ip和主机的ip由上游DHCP同一分配,两者在同一网段,虚拟机可以自由的访问同子网的主机(当然包括主机),这种情况下虚拟没有和外部网络隔离,会消耗主机网络环境的ip。可以同时满足主机与虚拟机之间的网络连通,以及虚拟机与外部网络之间的网络连通。
简言之,桥接模式就是虚拟机和主机连接在同一个网桥上,网桥上连是出口,下连是虚拟机和主机。桥接模式和主机物理网卡是强相关的,在创建bridge虚拟网络时,选择auto选项,vmware会自动从主机多网卡中选择合适的进行桥接。
NAT模式
NAT模式默认创建VMnet8虚拟网卡。虚拟机网卡与vmnet8相连,vmnet8在主机上是一块物理网卡,是直连网段,所以主机与虚拟机之间可以直接通过Vmnet8通信。vmnet8上开启dhcp服务,负责给虚拟机分配ip,在vmware设置中可以设置所需的网段。当虚拟机需要和主机外部通信时,vmnet8通过NAT服务将虚拟机ip映射主机某个物理网卡ip,从而实现和外网的连通性。模型如下图所示:
这种场景下,虚拟机与主机通过vmnet8同网段通信,复用主机ip通过NAT与外网通信。在NAT模式的配置下并没有看到NAT转换的具体配置,关键是没看到转换后的ip, 这其实与主机的实际出口网卡相关,这难道和桥接模式一样,也是自动选择的?
host-only模式
host-only模式默认创建VMnet1虚拟网卡。虚拟机网卡与vmnet1相连。该模式本质就是NAT模式阉割掉NAT功能,使得虚拟机只能与主机网络可达,而不能访问外部网络。这样可以有效的实现虚拟机与外部网络环境的隔离。
一些小结思考
真实的拓扑模型可能和上述的不一样,上述只是自己实验加理解的结果。在上面理解中,VMnet我其实是理解成三层交换机而不是网卡,因为它可以被多个虚拟机连接,但是网卡的一个端口在系统上会映射成一个网络设备,多个接口会映射成多个网络设备,所以在windows的视角中,vmnet就是一个单接口的网卡。
有些博客中提到:vmware会创建虚拟交换机和虚拟网卡,虚拟交换机互联虚拟机网卡,主机虚拟网卡。
这种拓扑是比较合理的,windows的视角下有一块网卡VMnet8,而虚拟机连接的是同名为VMnet8的网桥,所以多个虚拟机可以连接到VMnet8,这三者组成vmware虚拟网络环境,虚拟机和主机通过vmnet8同网段进行通信,vmnet8与物理NIC之间通过NAT与外网通信。给虚拟机设置网卡的配置界面如下:
在虚拟机的视角下,每添加一个network adapter就是在虚拟机上创建一个物理网卡,network connection选项则是虚拟机网卡连接vmware虚拟网络环境的模式,通过连接到指定的虚拟网桥来实现的,而不同的虚拟网桥连接着不同的windows虚拟网卡(bridge没有虚拟网卡)。
eveng中镜像的连接实现
一个简单的eveng镜像连接如下所示:
这里有三个对象,switch、vpc以及他们的连接线,switch和vpc由各自的镜像提供运算仿真逻辑,当我们需要仿真某种设备时,只需要将其镜像导入eveng,而镜像的运行则依赖于eveng的三大虚拟仿真组件:iol、qemu、dynamips。那么镜像之间的连接线是如何实现的呢?通过bridge来实现。在上图拓扑基础上我们进入eveng的CLI界面:
将lab中的image启动后查看bridge状态:
1 | root@eve-ng5:~# brctl show |
vnet0_1仿真的就是S和vpc的连接线,bridge上有两个接口分别连接在S和vpc上。我们增加拓扑结构:
再次查看bridge状态:
1 | root@eve-ng5:~# brctl show |
图中有3条连接线,所以这里有三个vnet_name命名模式的网桥,一个网桥模拟一个连接线,每个网桥上都有vun0_1_name命名模式的接口,可见这是S的接口,所以他们这件的真实的连接拓扑如图:
当删除网元设备或关闭lab的时候,模拟他们连接线的网桥并不会自动删除,自由彻底关闭eveng虚拟机才会清除,但这对我们的使用并不会有什么影响。
eveng虚拟机的网卡
eveng本身就是一台运行在linux中的虚拟机,在创建虚拟机的时候会指定网卡以及连接方式。在一些小结思考
图示中我们给eveng添加了两块网卡。每块网卡以名为ethnum的模式命名:
1 | root@eve-ng5:~# ifconfig |
eth0对应的是Network Adapter,eth1对应的是Network Adapter2,其中eth0作为管理网卡,也就是我们通过web访问eveng的ip。注意eveng会为每块网卡创建一个bridge, 然后将网卡attach到brige上。
1 | root@eve-ng5:~# brctl show |
网卡ethnum与网桥pnetnum一一对应,eveng最大支持10块网卡。eth0作为管理网口,一般选择host-only, 这样可以配置dhcp地址池,使其每次启动获得固定ip,并且和外网隔离。如果使用bridge模式eveng的管理ip则会随主机网络环境变换而发生变化。管理网口ip就是网桥pnet0的ip:
1 | root@eve-ng5:~# ifconfig pnet0 |
为什么要将网卡attach到bridge上呢?这是为了让lab中的镜像可以访问到主机网络和外部网络。bridge在lab的表现形式是cloudNum。
pnet0对应的是cloud0, pnet1对应的是cloud1,依次类推。lab中网元访问外部网络如图示:
vpc可以向VMnet1请求dhcp, 获得和管理网口同网段的ip:
1 | VPCS> ip dhcp |
其完整的网络连接拓扑如下图:
当vpc请求dhcp时,我们在windows上对VMnet1抓包可以看到dhcp交互报文。
lab中的网元连接到不同的cloud,就可以根据cloud所属网桥的网卡的连接方式(bridge, nat, host-only)获得对应的网络能力,实现lab与主机和外部网络的连通性。
总结一下,配置eveng时的network adapter对应eveng中的eth网卡,eth网卡attch到pnet网桥上,pnet网桥对应lab中的cloud,lab中的网元连接到对应cloud即可获得相应网络能力。
完整的eveng与vmware虚拟网络连接示意图
vmware是可以创建多张虚拟网卡的,默认有三种网络类型,bridge没有虚拟网卡,VMnet1对应host-only,VMnet8对应NAT。虽然允许创建额外的VMnet,但是类型只能是host-only
,所以看起好像没什么创建的必要,默认的就已经够用了。我们需要做的也就是配置一下dhcp地址池(使用默认的也行)。
对于eveng的虚拟网络,由外网、windows、vmware、eveng、lab这些对象组成,完整的网络拓扑如下:
下图是在vmware下创建虚拟网卡的界面,可以看到vmnet0虽然没有在windows上创建网卡,但是在vmware中还是有设备的,此时vmnet0就是一个网桥。
所以在vmware中创建一张网卡后:
- 在windows网络中添加了一张网卡
- 在vmware环境中添加了一个同名网桥
- 当将这张网卡配置给虚拟机时,虚拟机中创建一张网卡,然后连接到vmware的网桥,获得对应网络能力