VMware NAT原理深度解析总结,可解决一切vmware网络配置问题

问题概述:VMware虚拟机中安装Centos6.6使用vmnet8网卡做NAT模式上网,dhcp正常使用,但是如果使用static IP就会出现无法上网的情况。


    先讲一讲NAT的原理:即内网用户通过网络地址转换,由出口设备(一般指路由器)使用网络地址转换,将源地址转换为出口IP地址,代理内网用户访问外网资源;出口设备自身维护一张对应表,当访问返回结果后,再根据对应表送给对应的内网用户,这个过程也称作源地址转换;如果是外网用户,需要访问内网的一台服务器或者主机,可以在出口设备开端口映射,将目的地址转换为内网服务器或者主机地址,代理访问,也称作目标地址转换。 Centos6.6这个虚拟机应该指定IP:172.16.100.128,网关:172.16.100.1,DNS:172.16.100.1,掩码:255.255.255.0 配置文件如下:

DEVICE=eth0                                                                     
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.100.128
NETMASK=255.255.255.0
GATEWAY=172.16.100.1
DNS1=172.16.100.1
USERCTL=no
PEERDNS=no

    重启网卡

[35 root@www network-scripts]# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 172.16.100.128 is already in use for device eth0...
                                                           [  OK  ]

    然后整个网络就死在那里了,连网关都ping不通,route也出不了网关路由,但是宿主机能ping通虚拟机,ssh能正常连接。 如果将DNS1去掉 能显示路由表,而且路由表正确

[7 root@www ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.100.0    *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         172.16.100.1    0.0.0.0         UG    0      0        0 eth0
#但是依旧是依旧ping不通网关,这要是在真实环境中肯定可以ping通,数据包访问直接丢给网关,但是到网关就淹没了,为什么呢?
[8 root@www ~]# ping 172.16.100.1
PING 172.16.100.1 (172.16.100.1) 56(84) bytes of data.
^C
--- 172.16.100.1 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7148ms
#最后一句话明显是陷入了黑洞,包只出,不进。

    现在我们修改vmnet8的nat网关为172.16.100.1,vmnet8和宿主机连接的地址为172.16.100.2尝试一下:

修改VMware虚拟网卡编辑器:

技术分享

修改windows vmnet8信息:

技术分享

    修改虚拟机Centos6.6网络配置文件:

DEVICE=eth0                                                                     
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.100.128
NETMASK=255.255.255.0
GATEWAY=172.16.100.1
DNS1=172.16.100.1

    重启网络服务,并测试

[6 root@www ~]# /etc/init.d/network restart                          
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 172.16.100.128 is already in use for device eth0...
                                                           [  OK  ]
[7 root@www ~]# ping www.baidu.com                            
PING www.a.shifen.com (119.75.218.70) 56(84) bytes of data.
64 bytes from 119.75.218.70: icmp_seq=1 ttl=128 time=8.79 ms
64 bytes from 119.75.218.70: icmp_seq=2 ttl=128 time=48.1 ms
64 bytes from 119.75.218.70: icmp_seq=3 ttl=128 time=7.44 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2302ms
rtt min/avg/max/mdev = 7.443/21.463/48.157/18.883 ms

    大功告成!


    以上操作归结于经验,感谢孙文俊大神的指点。 为了弄清原理,我尝试了各种情况,最终得出以下图:

技术分享


    虚拟机管理软件vmware的虚拟网络编辑器中网段是子网网段,NAT配置的网关是vmNAT的网关,这里设置为172.16.100.1;而在宿主机也就是win7下设置网络适配器vmnet8地址为172.16.100.2,跟虚拟机是一个网段;所以平时将nat网关填写为vmnet8的ip地址,同时虚拟机网关指向vmnet8,可以ping通vmnet8的ip,同时宿主机也可以ping通虚拟机,这有点类似主机模式,不经过NAT。但是由于没有路由,无法访问外网。正确的做法是虚拟机通过vmNAT网关做nat转换访问外网;然后宿主机通过vmnet8的ip访问虚拟机(同一子网),宿主机不可通过vmNAT访问,这是NAT的特性,除非做目的地址转换(端口映射)。既然如此,那么vmnet8的状态也就不会影响虚拟机访问外网,我们可以将vmnet8这个虚拟网卡宕掉,的确,虚拟机依旧可以访问外网地址,由于宿主机无法穿越NAT,所以不能访问虚拟机了。(由于比较匆忙,这里就暂时忽略操作了,这些都是已经操作过的,下次补上)。但是依旧有个问题,就是虚拟机无法ping通vmnet8的地址,理论上同网段应该直接ping通;还有就是宿主机无法ping通vmNAT的网关,同上也是同网段,有待考证。 

本文出自 “运维之巅” 博客,请务必保留此出处http://trnux.blog.51cto.com/6998102/1657310

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。