今天做KickStart自動化安裝實驗,無意中發現一個奇怪現象。
先描述下我的實驗環境:筆記本Win10,安裝了WMWare Workstation,在WMWare Workstation上面安裝了CentOS7,CentOS7被規划在VMNet 8網段,使用NAT方式連接網絡。
最小化安裝完畢CentOS7虛擬機后,查看DNS配置,意外發現DNS的IP竟然是:
[root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.80.2
我印象中的DNS應該是8.8.8.8 或者 114.114.114.114這種眾所周知的DNS。雖然從未想過虛擬機的DNS該填什么,但是192.168.80.2這個IP也着實讓我有了不小的震撼。后來發現一篇文章,茅塞頓開。記錄下來做個紀念。
https://www.vmware.com/support/ws3/doc/ws32_network21.html
CentOS7能夠上外網完全是VMware NAT Service的功勞,VMware NAT Service給我們虛擬出了一個NAT device設備,這個設備的IP就是192.168.80.2。NAT原本就是網絡地址轉換,用於私有網絡與共有網絡、非以太網與以太網之間的轉換。正常來說NAT功能也就這樣了,但實際上VMware NAT Service所做的工作並不僅僅是網絡地址轉換這么簡單,還有DNS、DHCP等功能。想想我們自己的PC機,那上邊配置的IPv4 DNS是啥?替換掉虛擬機CentOS7的DNS會有什么反應?
下面停用VMware NAT Service
此時ping百度,VMware NAT Service禁用前可以ping通,禁用后不可以。
[root@localhost ~]# ping www.baidu.com PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 64 bytes from 61.135.169.121: icmp_seq=1 ttl=128 time=71.7 ms 64 bytes from 61.135.169.121: icmp_seq=2 ttl=128 time=55.7 ms ^C --- www.a.shifen.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 3618ms rtt min/avg/max/mdev = 55.765/63.754/71.743/7.989 ms [root@localhost ~]# ping www.baidu.com ping: unknown host www.baidu.com
猜想:VMware NAT Service這個服務虛擬出的NAT device設備,這個設備的IP是192.168.80.2。禁用這個服務相當於把192.168.80.2這個設備短路了,所以ping 192.168.80.2當然不同。虛擬機使用NAT上網會在宿主機(此處位我的筆記本)上虛擬出VMware Network Adapter VMnet8網卡(使用host-only模式也有)。我禁用VMware NAT Service相當於關機192.168.80.2這個設備。但是對192.168.80.1應該沒有影響啊。ping 192.168.80.1,發現並沒有提示通不通,幾十分鍾都卡在ping的界面。這又是怎么回事呢?
[root@localhost ~]# ping 192.168.80.2 PING 192.168.80.2 (192.168.80.2) 56(84) bytes of data. From 192.168.80.132 icmp_seq=1 Destination Host Unreachable From 192.168.80.132 icmp_seq=2 Destination Host Unreachable From 192.168.80.132 icmp_seq=3 Destination Host Unreachable From 192.168.80.132 icmp_seq=4 Destination Host Unreachable ^C --- 192.168.80.2 ping statistics --- 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3000ms pipe 4 [root@localhost ~]# ping 192.168.80.1 PING 192.168.80.1 (192.168.80.1) 56(84) bytes of data.
關閉VMware NAT Service服務,192.168.80.2這個設備相當於短路,和一條電線沒區別。連接192.168.80.1這條鏈路應該可以通,此時不通的原因最后解釋。那我ping192.168.80.114這台機器呢?可以ping通,因為在一個網段,都連在交換機VMNet8上面,這個在預料之中。
再次猜想:192.168.80.132這台虛擬機上DNS默認是192.168.8.2。現在VMware NAT Service服務關閉了,我改成其他的DNS可以嗎?
改成8.8.8.8,發現不通。會不會是因為是谷歌的,國內訪問慢?? 我看卡筆記本上的DNS,發現是172.20.10.1,我改成這個DNS再試還是不行。哎呀,為了上外網我只想到了域名解析問題了,別忘了我這是虛擬機,使用的是192開頭的私有網絡,私有網絡到公有網絡,還要考慮到NAT轉換,但是我剛剛把NAT干掉,當然用什么DNS都不行了。
下面啟用VMware NAT Service服務,然后再ping 192.168.80.2和百度
[root@localhost ~]# ping 192.168.80.2 PING 192.168.80.2 (192.168.80.2) 56(84) bytes of data. 64 bytes from 192.168.80.2: icmp_seq=1 ttl=128 time=0.108 ms ^C --- 192.168.80.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.108/0.108/0.108/0.000 ms [root@localhost ~]# ping www.baidu.com PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data. 64 bytes from 61.135.169.125: icmp_seq=1 ttl=128 time=55.6 ms ^C --- www.a.shifen.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 55.606/55.606/55.606/0.000 ms [root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain #nameserver 192.168.80.2 nameserver 172.20.10.1
發現可以ping通。我比較擔心改過需要重啟才能生效,所以我重啟了計算機(感覺重啟網絡就行),發現還是通的。再次查看DNS配置文件,神奇的事發生了,他把我原來修改的DNS配置文件替換了
[root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.80.2
為啥會這樣,還是VMware NAT Service搞得鬼,他還內置個DHCP功能,這個功能可以給NAT網絡下邊所有虛擬機下發配置信息,告訴他們“嗨!哥們你們的DNS是192.168.80.2”,雖然192.168.80.2這個NAS device也是個傀儡,但還是打腫臉裝胖子說自己是DNS server。實際上他是向主機(此處位我的筆記本)上的DNS服務器求助來解決域名解析工作。
最后一個問題。前面折騰那么久,無論是VMware NAT Service禁用前后,我在ping 192.68.80.1時,既沒有報錯也沒有提示不通,就一直卡在ping界面,這是神馬鬼???
原來是主機(也就是筆記本)防火牆的原因,關閉防火牆,可以ping通。
虛擬機里面的應用程序想要訪問網絡資源,借助NAT可以輕松實現。宿主機的網絡到網絡資源之間的鏈路、網絡可以是任何類型。只要他們支持TCP/IP就行。對於如下情況,都應該考慮NAT:
1、IP 數量有限
2、虛擬機連接到非以太網適配器
NAT可以將虛擬機私有地址轉換成宿主機的IP。虛擬機NAT服務使用宿主機的網絡資源連接外部網絡,代替虛擬機請求外部資源。因此,只要宿主機以外的網絡支持TCP/IP,虛擬機就可以訪問到他們。
為了使網絡配置更簡單,在你安裝VMware Workstation的時候,DHCP server被自動安裝了。DHCP server在NAT網絡,以及host-only網絡下都有工作。在NAT網絡下,虛擬機發送DHCP request請求分配IP,DHCP server會把<net>.128 到 <net>.254的地址分配給虛擬機。而<net>.3 到 <net>.127往往設置成靜態IP地址。IP address <net>.1 is reserved for the host adapter; <net>.2 is reserved for the NAT device。在NAT網絡中,DHCP server除了告訴虛擬機IP地址,還會發送額外配置信息,包括網關,DNS server地址。DNS server告訴這些虛擬機,網關於DNS server都是NAT device的地址,即<net>.2。於是虛擬機所有對外網的通信都會找<net>.2。當然這里的DNS server是默認的配置,你也可以改成外網的某個DNS,最簡單的做法就是看你宿主機的DNS,改成和他一樣的。