轉:主機訪問VirtualBox虛擬機服務

本文提供了一個簡單而實用的技巧: 怎樣在Ubuntu環境中(主機)訪問VirtualBox安裝的windows系統(虛擬機)中的服務。

正文

使用虛擬機常常是爲了調試服務器,因爲在桌面系統安裝服務程序,一來容易有安全問題,更重要是容易拖慢系統。

VirtualBox作爲一款輕快的開源虛擬機軟件,自從被Sun公司收購後,更新相當頻繁,功能也逐漸完善,比起VMware動輒幾百M的安裝文件,VirtualBox幾十M的身材而功能絲毫不在VMware之下,而且性能遠遠高出VMware。

如果把虛擬機作爲服務器調試工具,VM默認是使用橋接方式連接虛擬機和主機,安裝完後虛擬機直接對主機可見,調試很方便,但是VBox則默認是NAT方式,主機完全訪問不了虛擬機。

除了設置VBox爲橋接方式外(有點麻煩),另一更加簡捷的方式是給虛擬機開端口。這和使用家用路由器映射端口原理是一樣的,經過路由器後,局域網內的機器對公網外是不可見的,但是通過添加端口映射,公網就可以訪問到內網的機器。

VirtualBox 的User Manual(2.1.4版)在6.4.1介紹了這個方法:使用VBox自帶的VBoxManage工具設置端口映射。下面是介紹一個例子:

主機:Ubuntu 8.10
虛擬機:Win XP + phpStudy 套件(Apache、MySQL….),Apache在81端口提供服務。

配置後通過主機的8080訪問虛擬機:localhost:8080。

在虛擬機關機情況下,在主機終端執行:

VBoxManage setextradata “xp” “VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/Protocol” TCP

VBoxManage setextradata “xp” “VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/GuestPort” 81

VBoxManage setextradata “xp” “VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/HostPort” 8080


VBoxManage是VirtualBox的配置工具,setextradata只是其中一個方法。”xp”是虛擬機的名稱,而”VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/…”是該虛擬機的一個屬性,其中/web/是可以任意設置的名稱。如果虛擬機用的虛擬網卡不是默認的PCNet,而是用了Intel PRO/1000,則需把路徑中的“pcnet”替換爲“e1000”,同樣地,如果你爲虛擬機配置了n個網卡,則要把/0/換成相應的序列。

重新運行虛擬機,在Host的瀏覽器裏敲入http://localhost:8080/phpinfo.php,虛擬機裏面的php環境顯示出來了。注意此時對主機網絡內的其他機器,也可以通過本機的8080端口訪問到虛擬機的web服務(當然,前提是主機的防火牆沒有攔截該端口)。不過無法爲主機小於1024端口進行映射(設了之後虛擬機啓動報錯),這涉及到Unix/Linux的保護措施,可能在root賬戶下可用。有興趣的在Windows 平臺試試,可能沒此限制。

注意在虛擬機運行的時候這樣配置是無效的,必須重新啓動一次,休眠(save state)了再開也可以。

如果想刪除這些映射,同樣執行以上的命令,而把最後的命令值留空即可,如:

VBoxManage setextradata “xp” “VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/Protocol”


VBoxManage工具是VirtualBox自帶的配置工具,不論是Linux、Mac還是Windows平臺下,都有這個工具,使用方法都是一樣的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章