之前成功將MAC OS 10.6.8 升級到Mountain Lion 10.8,之前安裝的VMware fusion版本也不兼容10.8,重新下載了新的4.1.3的fusion版本,昨天在使用的時候發現一個問題,那就是不打開fusion時,在MAC OS本機能正常訪問我們的測試環境(172.20.10.x/255.255.255.0)。但是一打開fusion,就無法訪問測試環境。試了好幾次都出現同樣的問題。
今天中午閒來無事,就想找找到底是什麼原因導致,不會是因為升級到新版本的fusion或新版本的Mountain Lion就出現這個bug了吧,想想Apple應該不會這麼大意吧。根據現象第一反應應該是網絡的問題。
1、 在本機測試
~~~matoMacBook-Pro:~ $ ifconfig
部分省略
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>
ether c8:2a:14:16:0e:9d
inet6 fe80::ca2a:14ff:fe16:e9d%en0 prefixlen 64 scopeid 0x4
inet 172.20.1.251 netmask 0xfffffe00 broadcast 172.20.1.255
media: autoselect (1000baseT <full-duplex>)
status: active
此時能ping通172.20.10.155
2、啟動vmware fusion
~~~matoMacBook-Pro:~ $ ifconfig
部分省略
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>
ether c8:2a:14:16:0e:9d
inet6 fe80::ca2a:14ff:fe16:e9d%en0 prefixlen 64 scopeid 0x4
inet 172.20.1.251 netmask 0xfffffe00 broadcast 172.20.1.255
media: autoselect (1000baseT <full-duplex>)
status: active
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:01
inet 172.16.103.1 netmask 0xffffff00 broadcast 172.16.103.255
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:08
inet 172.20.0.211 netmask 0xffff0000 broadcast 172.20.255.255
此時能ping不通172.20.10.155
發現多了兩個vmnet1,vmnet8接口,玩過VMware的都知道這是虛擬網絡,vmnet1是host-only的方式,vmnet8是NAT的方式。我注意到vmnet8的掩碼是255.255.0.0,可是我記得咱們的辦公網絡好像是24位的,猜測應該是這個問題,果斷修改vmnet8啊,可是咱不會啊,沒辦法,有強大的google,啥都不怕,找出這麼一篇文章--
《Modifying the DHCP settings of vmnet1 and vmnet8 in Fusion 》 http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026510
要注意你的fusion是哪個版本的,我的是4.1.3,解決起來就簡單咯。
sudo vi /Library/Preferences/VMware\ Fusion/networking
VERSION=1,0
answer VNET_1_DHCP yes
answer VNET_1_DHCP_CFG_HASH *********************************
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
answer VNET_1_HOSTONLY_SUBNET 172.16.103.0
answer VNET_1_VIRTUAL_ADAPTER yes
answer VNET_1_VIRTUAL_ADAPTER_ADDR 172.16.103.1
answer VNET_8_DHCP yes
answer VNET_8_DHCP_CFG_HASH *********************************
answer VNET_8_HOSTONLY_NETMASK 255.255.0.0
answer VNET_8_HOSTONLY_SUBNET 172.20.0.0
answer VNET_8_NAT yes
answer VNET_8_VIRTUAL_ADAPTER yes
answer VNET_8_VIRTUAL_ADAPTER_ADDR 172.20.0.211
確實是16位的掩碼,改成24位的,保存退出,重新啟動fusion,再ping 測試環境,一切正常。
具體是什麼原因導致的,我也不清楚,之前用的MAC OS10.6.8+vmware fusion 3是正常的,不知道為什麼升級之後就不行了。
但是問題是為什麼虛擬機的網絡會影響到主機呢?這就像兒子怎麼反過來打老子了??請教了公司的一CCIE,他一講,我是豁然開朗啊。
如上拓撲圖所示,vmware fusion啟動之後其實就是創建了一個vm port。以下分三個階段說明
1、未啟動fusion之前,此時172.20.1.X要訪問172.20.10.X/24網段,會直接查找默認網關(172.20.1.1),此時能正常訪問。
2、啟動fusion之後,vm port由於此時是172.20.0.0/16位的,而目的地是24位掩碼,因此它會認為是直連路由,而直連路由要優先於默認網關的,因此從主機ping 172.20.10.x/24網段,它會從vm port走,而vm port是不知道如何到達172.20.10.x/24網段,因此主機也無法ping通。
3、將vmnet8的掩碼改成24位後,此時vm port也是172.20.0.X/24位,而目的地是172.20.10.x/24,是不同的網段,即不是直連路由,因此會走默認路由,所以修改後能ping通。
PS:直連路由就是它的接口所連接的網絡所能到達的網絡 。
至此,就能解釋以上的現象了!