【問題】為啥WMWare Workstation里面虛擬機的網關默認是NAT網關


今天做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,改成和他一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM