在说到VMware 的网络模型之前,先说一下VMware 的几个虚拟设备:
■ VMnet0:这是VMware 用于虚拟桥接网络下的虚拟交换机;
■ VMnet1:这是VMware 用于虚拟Host-Only 网络下的虚拟交换机;
■ VMnet8:这是VMware 用于虚拟NAT 网络下的虚拟交换机;
■ VMware Network Adapter VMnet1:这是Host 用于与Host-Only 虚拟网络进行通信的虚拟网卡;
■ VMware Network Adapter VMnet8:这是Host 用于与NAT 虚拟网络进行通信的虚拟网卡;
Host 的物理网卡和Guest 的网卡在VMnet0 交换机上通过虚拟网桥进行桥接,这也就是说,我的物理网卡和Guest 的虚拟网卡(注:这个虚拟网卡不等于VMware Network Adapter VMnet1 或者VMware Network Adapter VMnet8)处于同等地位,此时的Guest 就好像我的Host 所在的一个网段上的另外一台机器。我的Host 的物理网卡配置如下:IP 地址为手工指定方式,网关为192.168.0.1,那么我的Guest 就应该和我的Host 处于同一个网段,它的配置可为:
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Broadcom NetXtreme 57xx Gigabit Controller
Physical Address. . . . . . . . . : 00-1A-A0-A9-DC-1B
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . . : 192.168.0.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
IP 地址为手工指定方式,网关为192.168.0.1,那么我的Guest 就应该和我的Host 处于同一个网段,它的配置为:
Ethernet adapter Bridged:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Broadcom NetXtreme 57xx Gigabit Controller
Physical Address. . . . . . . . . : 00-1A-A0-A9-DC-1B
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . . : 192.168.0.10
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
同样,IP 地址也为手工指定方式,网关也为192.168.0.1,这样的话,IP 地址为192.168.0.2 的Host 和IP 地址为
192.168.0.10的Guest 就可以互通了:
Ethernet adapter Bridged:
Connection-specific DNS Suffix . :
Description … … … . . : Broadcom NetXtreme 57xx Gigabit Controller
Physical Address… … … : 00-1A-A0-A9-DC-1B
Dhcp Enabled… … … . . : No
IP Address… … … … . : 192.168.0.10
Subnet Mask … … … . . : 255.255.255.0
Default Gateway … … … : 192.168.0.1
Pinging 192.168.100.10 with 32 bytes of data:
Reply from 192.168.100.10: bytes=32 time<1ms TTL=64
Reply from 192.168.100.10: bytes=32 time<1ms TTL=64
Reply from 192.168.100.10: bytes=32 time<1ms TTL=64
Reply from 192.168.100.10: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.100.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
当然,Guest 所配置的IP 地址一定要在192.168.0 网段没有被占用,而且我的网络管理员允许我来使用这个IP 地址。如果在192.168.0 网段,存在DHCP 服务器,那么Host 和Guest 都可以把IP 地址获取方式设置为DHCP 方式。
在NAT 网络中,会使用到VMnet8 虚拟交换机,Host 上的VMware Network Adapter VMnet8 虚拟网卡被连接到VMnet8交换机上,来与Guest 进行通信,但是VMware Network Adapter VMnet8 虚拟网卡仅仅是用于和VMnet8 网段通信用的,它并不为VMnet8 网段提供路由功能,处于虚拟NAT 网络下的Guest 是使用虚拟的NAT 服务器来连接到Internet 的。VMware 功能非常强大,在NAT 网络下,我们甚至可使用Port Forwarding 功能,来把Host 的某一个TCP 或者UDP 端口映射到Guest 上!我的VMware Network Adapter VMnet8 虚拟网卡的IP 地址配置如下:Ethernet adapter 本地连接:
Ethernet adapter VMware Network Adapter VMnet8:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
Physical Address. . . . . . . . . : 00-50-56-C0-00-08
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.153.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
IP地址是手工填写的,但却不是由我来指定的,而是VMware 在安装的时候自动随机指定的一个IP 地址(注意,不要修改VMware Network Adapter VMnet8 虚拟网卡所在的网络ID,这样的话会造成Host 和Guest 无法通信)。那么,我的NAT 网络的虚拟机的IP 地址也为192.168.153.0 这个网段,其IP 地址配置为:
Windows IP Configuration
Host Name … … … … : Lineage
Primary Dns Suffix … … . :
Node Type … … … … : Unknown
IP Routing Enabled… … . . : no
WINS Proxy Enabled… … . . : No
Ethernet adapter NAT:
Connection-specific DNS Suffix . :
Description … … … … … : VMware PCI Ethernet Adapter
Physical Address… … … … . : 00-50-56-C0-00-08
Dhcp Enabled… … .… . … . : Yes
Autoconfigureration Enanble… . :Yes
IP Address… … . .… . … . : 192.168.153.10
Subnet Mask … … .… . … . : 255.255.255.0
Default Gateway … .… . … . . :192.168.153.2
DHCP Server… … .… . … . . :192.168.153.254…………………
可以看到,它的IP 地址分是由DHCP 服务器分配的的,DHCP 服务器的地址为192.168.85.254,那为什么会有DHCP 服务器存在呢?
这是因为VMware 安装之后,会有一台虚拟的DHCP 服务器为虚拟机来分配IP 地址,这个DHCP 服务器,你可以ping 通它,但是无法进行访问,因为实际上它就是一个系统服务而已,在开始——>运行中输入services.msc,就会看到这个服务
此时可以看到,Guest 的网卡和Host 上的VMware Network Adapter VMnet8 虚拟网卡拥有相同的网络ID,这样的话,在Guest 中,ping 通Host 就没有问题了:
Pinging 192.168.153.1 with 32 bytes of data:
Reply from 192.168.153.1: bytes=32 time<1ms TTL=64
Reply from 192.168.153.1: bytes=32 time<1ms TTL=64
Reply from 192.168.153.1: bytes=32 time<1ms TTL=64
Reply from 192.168.153.1: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.153.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
有一点需要说明的是,在NAT 方式的网络中,Guest 的Gateway 都指向了192.168.X.2,在本例中,X=153,也就是那个虚拟的NAT 服务器的地址,这个服务器是一台虚拟的NAT 服务器,可以ping 通它,但是却无法访问到这台虚拟机,因为这同样也是一个系统服务:这时候,我的Guest 和Host 就可以实现互访了,并且如果我的Host 此时已经连接到了Internet,那么我的Guest 也就可以连上Internet 了。那么Host 上的VMware Network Adapter VMnet8 虚拟网卡在这里扮演了一个什么角色呢?它仅仅是为Host 和NAT 虚拟网络提供了一个通信接口,所以,即便在Host 中Disable 掉这块虚拟网卡,Guest 仍然是可以上网的,只是Host 无法再访问VMnet8 网段,也即是无法访问Guest 而已。
在Host-Only 网络中,Host-Only 网络被用来设计成一个与外界隔绝的(isolated)网络,其实Host-Only 网络和NAT 网络非常相似,唯一不同的地方就是在Host-Only 网络中,没有用到NAT 服务,没有服务器为VMnet1 网络做路由,它当然就没有办法访问Internet 啦,可是如果此时我的Host 要和Guest 通信怎么办呢?当然就要用到VMware Network Adapter VMnet1 这块虚拟网卡了。
如下图,这是我的Host 上的VMware Network Adapter VMnet1 虚拟网卡的配置,同样,VMware 也为我自动随机分配好了它的IP:
Ethernet adapter VMware Network Adapter VMnet1:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
Physical Address. . . . . . . . . : 00-50-56-C0-00-01
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.201.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
那么如果我把Guest 的网络设置成了Host-Only 的话,把它的IP 获取方式设置为DHCP,它会到虚拟的DHCP 服务器上拿到IP,这个DHCP 服务器仍然是一个虚拟的DHCP 服务器(仅仅是一个系统服务而已),而且在下图中,可以看到,这个DHCP 服务器的IP 地址仍然是192.168.X.254,这里X=201,因为要和我的VMnet1 的网络ID 相同。所以,Guest 所获得的IP和我的Host 的VMware Network Adapter VMnet1 虚拟网卡的IP 使用同一个网络ID:
Windows IP Configuration
Host Name … … … … : Lineage
Primary Dns Suffix … … . :
Node Type … … … … : Unknown
IP Routing Enabled… … . . : no
WINS Proxy Enabled… … . . : No
Ethernet adapter Host-Only:
Connection-specific DNS Suffix . :
Description … … … … … : VMware PCI Ethernet Adapter
Physical Address… … … … . : 00-50-58-C0-50-0d
Dhcp Enabled… … .… . … . : Yes
Autoconfigureration Enanble… . :Yes
IP Address… … . .… . … . : 192.168.201.10
Subnet Mask … … .… . … . : 255.255.255.0
Default Gateway … .… . … . . :
DHCP Server… … .… . … . . :192.168.153.254…………………
可以看到,在Host-Only 网络下,Guest 的Default Gateway 被设置为NULL,这是由于没有默认路由器为它到外部网络提供路由的缘故,也即是上边说到的Host-Only 网络没有NAT 服务器!如果使用route add 命令加上某个地址做为它的路由器,它仍然不能访问Internet(实际上也没有地址可加)。这样,我的Guest 虽然没有办法访问Internet,但是仍然可以和我的Host进行通信,这正是因为我的Host 上的VMware Network Adapter VMnet1 虚拟网卡起到了作用,它负责和VMnet1 网络相连,为我访问Host-Only 网络下的Guest 提供了通信接口。下图显示了在Host-Only 网络中的Guest 与我的Host 的通信情况:
Pinging 192.168.201.1 with 32 bytes of data:
Reply from 192.168.201.1: bytes=32 time<1ms TTL=64
Reply from 192.168.201.1: bytes=32 time<1ms TTL=64
Reply from 192.168.201.1: bytes=32 time<1ms TTL=64
Reply from 192.168.201.1: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.201.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
至于为何要把Host-Only 网络设置为没有Default Gateway 的方式,这是VMware 的设计使然,它就是让我们建立一个与外界隔离(isolated)的网络时而使用的。事实上,如果我足够BT,也可以在Host 上来为VMware Network Adapter VMnet1 虚拟网卡来做路由。比如,我可以用Windows 2000 的RRAS 来做,这样的话,处于Host-Only 网络下的Guest 就又可以上网了,它们只需要使用route add 命令把自己的Default Gateway 指向Host 上的VMware Network Adapter VMnet1 虚拟网卡即可,不过这样做不推荐,也没有必要.
至此,VMware 的3 种网络,就应该可以理解可以看到,如果想要Guest 上网,在3 种网络模型中,
最为简单的方式就是NAT,因为它不需要任何的网卡设置,IP 地址也可以从虚拟的DHCP 服务器来获得,要做的仅仅就是把它的网络设置为NAT 方式即可。
至于Bridged 模式,则需要额外的IP 地址,这有可能会实现不了,因为并不是每个ISP 都那么大方。
如果是Host-Only,则又需要设置RRAS,没有几个人会愿意为了让虚拟机上网而换OS 的,所以就用NAT 最好了。
在这里要强调的一点是,如果设置了Host-Only 网络,非要为VMnet1 做路由,一定要用RRAS,而不要用Windows XP 或者2000 的ICS,因为它会自动把内网的接口地址改为192.168.0.1。你在安装虚拟机的时候,VMware 不会正好给你的VMware Network AdapterVMnet1 虚拟网卡分配为192.168.0.1 的地址吧?这样的话会造成VMware Network Adapter VMnet1 虚拟网卡和VMnet1 网段的网络ID 不一致,自然,你的Guest 就没有办法和Host 通信了!
实际上经常还会遇到这样的情况:比如VMware 为我分配的网络ID 在将来会被我用到,或者嫌VMware 为你分配的网络不好(比如它给你分了个192.168.148.0 的网络ID),那么可以到这里来修改:
单击VMware 的“Host”菜单,选择“Virtual Network Settings …”
选择“Host Virtual Network Mapping”中,VMnet1 所在的虚拟网络,单击后边的按钮,选择“Subnet”菜单,即可以调整你的网络ID。
记住,在调整之后你的VMware Network Adapter VMnet1 和VMware Network Adapter VMnet8 也需要调整到相应的网络ID,不然Host 和Guest 如何通信呢?
初学者在使用VMware 的时候,总是喜欢直接修改VMware Network Adapter VMnet1 和VMware Network Adapter VMnet8 这两块虚拟网卡的IP 地址,以为把它们设置为与Host 在一个网段就可以实现通信和上网,实际上在看过这篇文章之后,应该明白,修改这两块虚拟网卡,对于实现网络通信,是多么的没有帮助!
1、Bridge模式
这种方式设置很简单,只要虚拟系统和跟本地主机在同一个网段就可以。
例如:
本机的本地连接设置
IP地址: 192.168.1.10
子网掩码: 255.255.255.0
默认网关: 192.168.1.1 (根据自己的网络情况填写)
首选DNS:8.8.8.8
虚拟系统本地连接设置
IP地址: 192.168.1.11
子网掩码: 255.255.255.0
默认网关: 192.168.1.1 (根据自己的网络情况填写)
首选DNS:8.8.8.8
这样虚拟系统就相当于网络中的一台真实机器可以上网了。
2、NAT模式(推荐使用这种方式)
这种方式设置比较复杂一点,不占用网络中的IP地址,只要本地主机能上网,那么虚拟系统就能上网。
看一下详细的设置方法:
安装完vmware之后,要保证VMware NAT Service这个服务是启动的
虚拟系统本地连接设置
IP地址: 192.168.10.11
子网掩码: 255.255.255.0
默认网关: 192.168.10.2
首选DNS:8.8.8.8
这样虚拟系统就可以和本地主机一样上网了。
3、hostonly模式
这种方式设置方法和Bridge模式基本一样,只要本地主机的VMnet 1中设置和虚拟系统中本地连接在同一个网段就可以。
例如:
本机的本地连接设置
IP地址: 192.168.2.10
子网掩码: 255.255.255.0
默认网关: (为空)
首选DNS: (为空)
虚拟系统本地连接设置
IP地址: 192.168.2.11
子网掩码: 255.255.255.0
默认网关: (为空)
首选DNS: (为空)
这种方式不能上网,要想上网需要共享一下本地主机的本地连接。
草仔儿的博客连接