2008年11月28日 星期五

Virtualbox 網路設定--bridge

本文不適用於VirtualBox 2.1.0以上的版本。2.1.0以上的版本已經可以直接使用bridge的方式連線;本文僅為作者自己的歷史筆記>

在VMware以及VirtualBox的比較上,觀點上其實跟使用者的需求跟角度有很大的關係;如果真的要比較的話,我認為從安裝程式大小、記憶體佔用量、執行速率、使用者便利性四點來比較。 比較完之後,我會解釋在VirtualBox下進行host/guest的bridge連線需要哪些設定。

1.安裝程式的大小:
最新版的VMware 2.0.0-122956,其rpm安裝檔有538M,tar.gz檔有540M;即使是1.0.6-91891的版本,也要103M。我實在是不明白為什麼虛擬機器會變成如此巨大的野獸,我只知道下載VMware本身就是一件漫長的等待!
VMware2.0以降就變成了Web介面,支援firefox/opera/IE等主流的瀏覽器;由於瀏覽器都可以支援全螢幕,我想VMware應該是看清未來都是web的天下,因此有這樣的轉變吧?不過姑且不論這樣的轉變友善與否;540M,近0.5G的安裝程式究竟含有多少強大的功能呢?這點我就留給各位看官去測試了,因為我已經徹底拋棄VMware server來當作學習工具了。 反觀最新版的VirtualBox,2.0.6,安裝程式多大呢?deb安裝程式29M!而且在debian下可以選擇社群版本或是Sun維護的版本,用aptitude就可以安裝了。至少,我寧願一個小巧一點的虛擬機器。想要用aptitude安裝的話,只需要多加一條到/etc/apt/sources.list:

deb http://download.virtualbox.org/virtualbox/debian lenny non-free
不過安裝完後的版本是2.0.4,想要最新的2.0.6需要手動安裝下載。
2.記憶體的佔用量:
假設我今天都把虛擬機器的guset記憶體設定固定大小,啟動一個全新安裝的ubuntu只需要多90M;這個大小跟我剛打開我的無特效的Debian一樣,約99M;那麼開啟VMware2.0呢?需要在多出343M的記憶體用量。
我承認我是不懂得VMware的優異功能,至少在記憶體用量這關,我還是選擇Virtual Box。
3.執行速率:
拜半虛擬化之賜,VirtualBox有絕對的先天上優勢會比VMware快出非常多倍。所謂的半虛擬化,是指硬體最底層的部份仍由guest OS跟hardware溝通,因此無須透過虛擬機器模擬,執行上效率極佳;全虛擬化的虛擬機器如VMware,100%全部模擬(cpu除外),因此只要是跟硬體作溝通的部份都很慢,原因就是無論任何動作都要透過虛擬機器。各位如果有在虛擬機器上編譯程式的經驗,就會知道那是一個痛苦的等待過程,而且要中斷他也不是...有時候一中斷了,就會出現其他問題。 我的cpu:AMD Athlon 64x2 5000+,4g記憶體。
我在VirtualBox開全新安裝的ubuntu 8.10,耗時45秒;在VMware 1.0.6跑同樣的東西,1分22秒。至於2.0的VMware,我完全相信時間絕對是超過一分半鐘的。有時候我覺得納悶,因為我的經驗裡,在VirtualBox開全新的WindowsXP是比開實體的XP來得快的。至於為什麼,我也不清楚....
4.使用者便利性:
我用VMware很多年了,當時也有很多選擇,如VirtualBox, qemu, xen等等。由於我的功力沒有太大的進步,我還是覺得要佈署考試的練習環境,用VMware server是比較適合的,因為安裝完甚麼設備幾乎都有了。主要是快速的建立一個同網段的環境;我記得在今年出,VMware server2.0還沒出的時候,使用VirtualBox的人要建立上述的網路環境非常困難,因此我當時還是選擇了VMware server。 情況現在改變了。目前VirtualBox要新增/讀取usb裝置已經非常方便,不用另外設定;解析度、音效、檔案分享等的便利性都做得毫不遜色,甚至覺得跟VMware一樣簡單。至於網路,如果只是要可以連得上網際網路的話,那麼這點VMware跟VirtualBox同分;然而通常我們會希望虛擬機器也能更提供服務,不是只有躲在後面的測試而已,這個部份VirtualBox就做得沒有VMware便利--要實現bridge的功能,還是要由實體的host去建立一個設備,再由guest去使用這個介面;這樣的便利性,確實是VMware佔上風。

不過就這四點結論,我還是會選擇快速俐落的VirtualBox來當成我的虛擬機器

而且重點是他可以吃VMware server做出來的.vmdk檔,我從VMware轉移到VirtualBox完全是無痛的。不過由於我們建立虛擬機器都是希望可以跟原來的host可以溝通, 溝通的方式可以利用虛擬機器提供的資料夾分享,也可以開啟服務來提供給guest;前者比較簡單,不過會耗虛擬機器本身的資源,靈活性也不大;在host或是guest開啟服務來提供資源分享是一個比較合理的方法, 也比較接近真實;不過VirtualBox有一個致命的地方,就是利用NAT功能所配置的網路,可以想像成guest躲在router(就是你的VBox)後方,或是說家裏的pc躲在ATU-R(小烏龜)後方;你雖然可以上網,不過別人卻連不進你的guest。 雖然你可以用port forwarding,利用port對應的方式,把封包從host傳給guest,但是host/guest的服務不能重複,至少port不能重複,使用起來也是挺礙手礙腳的。因此假設只是要測試,那麼勉為其難可以接受這個設定。 不過與host不同網段(VirtualBox預設是class A的10.0.1.x網段),資料要互連還是必須透過軟體本身的分享;ping的功能也被限制(10.0.1.1~15,根據官方的說明手冊,由於安全性緣故,其他的IP位置會被virtualbox擋下來)。

那麼如何讓VirtualBox做到讓guest跟host是同網段,可以像是多一台電腦這樣的提供服務呢?在Debian下,首先請安裝bridge-utils:

dpkg -L bridge-utils || aptitude install bridge-utils
接著我們要自己手動建立一個bridge。bridge是Layer2(Data-Link Layer)的東西,與TCP/IP無關,就是區域網路內的ethernet連線罷了,因此不會有甚麼gateway/netmask這類Layer 3的東西。請在interfaces建立如下的設定:
auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0
請重新啟動網路服務。
invoke-rc.d networking restart
此時我多了一個bridge,這個bridge介面負責溝通我跟虛擬機器的網路介面。因此我需要替虛擬機器建立一個介面:(在host下輸入)
VBoxAddIF veth0 maxsolar br0
意思是建立一個名為veth0的虛擬介面,使用者maxsolar有權存取,存取host的br0當成veth0。
接著在開啟虛擬機器時,請在「設定值」->「網路」->「主機介面設定值」裡的介面名稱(interface name)裡面填入veth0。
下次開機後,你就可以利用這個虛擬介面上網,而且跟我們的host是同一網段。不過限制是,這個虛擬介面一次只能給一個guest使用,如果要多個guest一起開的話,那麼就多設幾個veth給他們用吧!

P.S.在OpenSuSE下的bridge設定,請參考這篇

以下的遊戲秀圖都是我在Debian下特效全開的情況下跑的,除了Compiz fusion之外,下面的工作列就是最近很紅的avant window manager,另外我也裝了screenlets這個套件,他可以讓你跑很多精緻的小工具,甚至很多可以在gnome-look裡下載唷!

姊夫最愛玩的:世紀帝國II

兒時經典遊戲:星海爭霸

也不錯玩的遊戲:Frontline(前線)
也就是說,目前DirectX與DirectDraw的技術,VirtualBox跟VMware算是平分秋色了,再也沒有VMware一黨獨大的局面,不過還是有一些遊戲是沒辦法在虛擬機器上跑的,我想這就只好認命囉。
附帶一提:我用wine模擬世紀帝國II,執行效率真的很差,反而用VirtualBox跑起來順多了呢!

參考資料:user manual

Share

沒有留言: