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