2013年4月4日 星期四

(MacOSX之)VirtualBox的Host only網卡如何設成可以連外網

因為在MacOSX(Host OS)上使用VirtualBox安裝了Windows Server(Guest OS)來做測試,才注意到VirtualBox的虛擬網路有些和我原本想的不一樣,所以筆記整理一下:

依照VirtualBox的手冊說明其可使用的網路卡及其功能如下:
1. NAT:VM可以連外網,但外網不能連VM
2. 橋接:VM可視為和Host連在同一交換器上
3. 內部:只有VM之間可互通
4. 僅限主機:只有Host和VM之間可互通
5. 專用:(尚未研究)

比較奇特的特性是:
1. NAT的模式下,Host和VM之間不能互通
2. 橋接模式下,橋接的網卡若為Wifi無線網卡,其行為會不太正常。若為有線網卡,則行為合符預期的可以和外連相連,也可以和Host互通。

所以有些人的做法是為VM設兩個虛擬網卡:
1. NAT,用來連外網,可以更新軟體。
2. 僅限主機,用來和Host相連。
這樣做,至少可以在VM裡正常的更新軟體,而且也可以由Host連到VM做一些測試。(只是不能由外網連到VM,所以不能用來架設伺服器在VM)

也看到有人只用一張「僅限主機」虛擬網卡,就完成剛才所提的功用,作法是在Host上利用分享網路的方式,讓「僅限主機」虛擬網卡可以分享Host上的無線網卡來連外網。不過他只提到Host為Windows的情形。

以下文章則提到Host為MacOSX的情況:
building-a-better-os-x-firewall-or-how-i-solved-the-nat-problem-for-virtualbox/
筆記要做的事情:
A 打開封包轉送功能,並啟用轉址程式

$sudo sysctl -w net.inet.ip.forwarding=1
$sudo natd -use_sockets -same_ports -dynamic -interface en1


B 設定防火牆規則,並啟用防火牆
$/sbin/ipfw -f flush
$/sbin/ipfw add divert natd all from any to any via en1
$/sbin/ipfw add pass all from any to any
$sysctl -w net.inet.ip.fw.enable=1

以上設好後,VM的GW要設為指向Host,而其DNS設為指向無線基地台。VM就可以正常的連外網了,而且也可以和Host相通。

ps. 我注意到防火牆原本就是啟用的,所以我們只是做了以下幾件事:
1. 打開封包轉送
2. 啟用轉址程式(natd)
3. 加了兩個防火牆規則

當我們要還原設定時,只要取消以上三件事就好。
張貼留言