2011年12月2日 星期五

透過Virtualbox下的Windows的網路印表機問題

資料來源:
http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=thread&topic_id=6768&forum=2&post_id=32030

底下的文章是引自上述的網頁
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

第41頁3.7.5節網路設定的章節裡有簡單的提及,VirtualBox對於每一個虛擬機器,可以提供最多四塊PCI Ethernet網路卡。而每一塊界面卡都可以分開指定底下四種不同的網路介接模式:
1.Not attached(未附掛)
2.Network Address Translation(NAT)
3.Host Interface Networking(主端界面)
4.Internal Networking(內部網路)
一般來說,虛擬網卡會被設定成NAT模式,這種模式適合在一般使用者上網的需要。(比如在客端執行程式來存取網路,在區域網路內提供服務等等),如果你只是想要在客端機器內,瀏覽網頁、下傳檔案、看看電子郵件,那預設的NAT網路模式就很適合你用了,你可以跳過這個章節。不過,請注意這個模式,一些網路功能無法跨越NAT工作,所以會無法使用網路共享功能,這是NAT的限制。
對於更進一步的網路需求,比如網路模擬、主端介面網路(HIN)都需要額外的設定,在主端運用以軟體為基礎的網路界面去完成這個連接。最後,VirtualBox內部網路可以被使用去建立虛擬機器之間的網路工作,但是無法應用在主端以及對外的網路工作上。有點困惑嗎?沒關係,底下的章節會詳細解說這四種不同的工作模式。為了說明起見,假設你的作業系統是ubuntu,VirtualBox是安裝在ubuntu裡,VirtualBox裡面安裝的是WinXP,在此情形下,ubuntu我們稱為主端(HOST)、WinXP為客端(GUEST)。
1.”Not attached”未附掛模式
當虛擬機器的網路被設定為未附掛模式時,VirtualBox通知這個客端,有一塊網路但是沒有任何網路連接到這塊卡上。這種方式就是把虛擬的網路從連接中拉開,當你的客端作業系統不需要網路連接或是要強迫客端系統重新定義網路時才有需要用到。
2.Network Address Translation(NAT)
NAT是客端虛擬機器存取外在的網路最簡單的方法。通常此種模式,主端與客端都不需要額外的規劃與設定,因此這是VirtualBox預設的網路工作模式。
客端虛擬機器以NAT的運作模式,就好比是一台真實的電腦,透過路由器與網際網路介接。在這個例子中,”路由器”就是VirtualBox的網路引擎,它會透通對應客端虛擬機器的網路進出IP。但是NAT的缺點,就是它類似以私有的網路介接在路由器之後,也因此這台虛擬機器無法被外部的網路看到及存取,所以你無法在這台客端機器上,執行伺服器的服務,除非設定轉送機制(port forwarding)
客端虛擬機器會從VirtualBox所提供的DHCP伺服器取得一個私有的內部網路IP位址,這個位址通常與主端的網路區段是明顯不同。當虛擬機器有更多的虛擬網卡要被設定去使用NAT時,第一塊卡可能是10.0.2.0區段,第二塊卡就是10.0.3.0區段。
在此網路架構下,客端所送出的TCP/IP資料,首先是被VirtualBox的NAT接收,並且利用主端的作業系統重送出去。對於主端的應用程式,它看起來就像是由VirtualBox這個應用程式所送出來的資料一樣,使用的是主端的IP位址,緊接著VirtualBox會聆聽封包的回應,並且重新打包再轉送到內部的客端機器內。
因為客端虛擬機器是以私有的內部網路透過VirtualBox與主端介接,所以客端所提供的網路服務,不管是主端或是在相同區段的其它電腦,不但看不見而且是不能使用的。但是VirtualBox可以透過port forwarding的port轉送機制,讓客端的網路服務也可以被外部所存取。在這情形下,VirtualBox會聆聽主機端的確定ports,當有資料送過來時,把資料打包再重新轉送到內部的客端系統裡去工作。對於主端的應用程式或是其它網路上的電腦而言,它看起來就像是主端系統所提供的網路服務一樣。(這也意味著,你不可以在主端及客端提供二個相同的服務,比如網頁伺服器服務)經由此種模式,你可以獲得在客端虛擬機器上提供網路服務的優點,比如當你的主端系統對於網路服務是較弱的,比如容易當機或是容易被入侵等,你就可以運用此種方式在主端系統上提供服務。
備註:
1.其實這種情況應該是常發生在當你的主端是WinXP時,比如你的作業系統是WinXP,你想要提供類似Web Server、Ftp Server、Mail Server、SSH Server等等伺服器服務時,又不想要使用windows平台所提供的伺服器服務,所以你另外安裝Virtualbox,並且在Virtualbox裡安裝ubuntu server 版,這時就派上用場了。如果你的作業系統就是ubuntu了,要提供web server就直接安裝apache server就可以了,不用再轉來轉去了吧。
2.如果你一開始安裝的是ubuntu desktop桌面版,如果CPU和記憶體夠大,也可以直接安裝伺服器的服務,安裝簡單到吐血。你只要在終端機底下打入 sudo tasksel,在出現的文字視窗中選擇你要的server之後按確定,馬上你的桌面系統就變成伺服器桌面系統了,夠簡單了吧。
你可以使用 VboxManage這個指令來完成這個任務。首先你必須知道,你的客端系統是使用哪一個port,同時你打算利用主端系統的哪一個port(一般來說,你可以客端與主端都使用相同的port),你可以使用主端系統任何一個沒有使用的port來使用這個服務。底下利用一個範例來介紹如何在客端系統裡使用ssh server的服務。
VBoxManage setextradata “客端機器名”
“VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol” TCP
VBoxManage setextradata “客端機器名”
“VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort” 22
VBoxManage setextradata “客端機器名”
“VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort” 2222
其中guestssh只是任意選擇的一個設定名稱。當設定完成,所有的主端port 2222的連接,都會被轉送到客端的port 22。通訊協定可以是TCP或是UDP(不分大小寫),如果要移除這個對應,可以使用這些相同的命令,只是把設定值拿掉即可(在這個例子中,就是 TCP、22、2222等資料)。另外要注意的是,當虛擬機器在執行中是無法進行NAT的設定的,所以先把虛擬機器『關機』吧。
使用NAP的模式有二個限制必須要注意。第一個就是無法使用網路芳鄰的瀏覽及共享。第二個就是ping這個工具程式指令,無法從主機或是其它私有虛擬網路之外的主機得到回應。要能夠瀏覽網路芳鄰的功能,需要客端能接受port 135,137,139的TCP及UDP的連接,雖然你可以使用上述的轉送方式,把連接轉送到客端系統裡,但是這會造成主端無法使用網路芳鄰的功能,因為都被你轉送到客端系統裡去了。另外因為ping是使用ICMP的網路封包,這必須由管理者認可的應用程式送出才行,但是VirtualBox如同一般的使用者應用程式,在NAT的模式下無法代理這些功能。

Host Interface Networking(HIF)簡介
在host interface networking模式,VirtualBox會在主端系統上,運用軟體的方式建立一個新的網路界面。這個新的軟體界面,會和你的實體界面同時並行存在。(比如,在linux主端vbox0會和eth0同時並行存在)當客端系統使用這個新的軟體界面時,就主端系統而言,它看起來就像是客端系統使用實體的網路線連接一樣。這個主端系統可以利用這個界面,從客端系統取得與送回資料。因此你可以運用這個界面,將客端與實際網路之間,設定路由或是橋接,讓資料可以互通。
你可以在主端系統上建立數個VirtualBox主端界面,但是同一時間,你只可以讓一個主端界面與一個客端虛擬網卡介接。換句話說,對於每一個虛擬網卡而言,可以想像它是使用主端界面網路,所以你需要在主端設定一個新的網路界面提供客端使用。
緊告:因為設定主端界面,它必須改變你的主端網路設定,所以會讓主端網路連線中斷。因此不要使用類似遠端控制的方式來工作,以免工作到一半時網路中斷。
網路橋接是使用主端界面最簡單的方法之一。橋接可以讓你把數個網路設備以軟體的方式連接在一起,資料送到其中一個設備上時也會同時送給其它設備。這也意指,客端虛擬機器可以透過主端的網卡,使用自己擁有的網路硬體位址,來取得和接收資料。這使得在你網路上的其它電腦,可以直接看到客端系統,就如同客端系統是直接實體連接到網路上一樣。所以不管是各種網路功能,諸如網路芳鄰、共用印表機等等,都可以利用這種方式完成。在主端系統你需要一塊有線網卡,不過目前大部份的無線網路設備尚無法支援橋接。
在一些網路環境(比如辦公網路),會監測網路通訊,避免一塊網卡使用數個網路MAC位址。它主要是避免網路攻擊,但是這也會造成你的橋接無法工作。
譯註:接下來有許多章節省略翻譯,只翻以ubuntu為主端的橋接設定章節。同時VirtualBox的版本是1.4.0以上。
自從Linux的核心開始內建支援虛擬網路裝置起(被稱作 TAP介面),在Linux上的VirtualBox使用這些現有的功能來取代自己的主端網路驅動程式。TAP界面的行為,就如同你主機上的實體網路界面,而且可以使用你主機系統上的任何網路工具。從主機的觀點來看,它就像是客端的網路卡,透過網路線連接到TAP界面。為了能在VirtualBox裡使用主端網路界面,你必須可以存取 /dev/net/tun。檢查這個裝置是屬於哪個群組,並且確定要使用主端網路界面的使用都,都屬於這個群組。在大部份的情形下,這個裝置是屬於vboxuser群組。
譯註:如果你列出/dev/net/tun的屬性,ls -l /dev/net/tun,你會發現是屬於root群組,因此你要下指令改變這個情況 sudo chown root.vboxuser /etc/net/tun
在linux主機上,你可以在VirtualBox上建立持續連接或是動態連接,動態指的是當客端執行時建立,當客端停止時移除。持續的連接界面,對於已知的且不常改變的客端而言,是比較合用的(比如一些伺服器上的設定),而且容易安裝設定。使用VirtualBox建立動態界面雖然可以提供更多彈性,但是當界面啟動建立以及移除時,會要求你輸入管理者密碼。
底下僅介紹如何建立持續性的橋接界面。
要在Linux主機下,建立持續性的橋接界面,一般來說需要三個步驟:
1.首先你要在主機上建立一座橋(bridge),然後把你主機上的某一塊實體網卡界面與它連接(通常是eth0)。接著你就可以連接那個界面(bridge)到虛擬機器的虛擬界面上。
要注意的是,橋接只是Ethernet概念,並非僅是TCP/IP的運作。在實際運作中,橋接通常是使用來連接二個不同的Ethernet網路,並且讓二個不同的Ethernet網路可以互相通訊,讓如同是一個網路一樣,但是卻又不需要把二個網路合併為一。
2.對於需要使用主端界面網路功能的客端網卡,你必須建立一個新的『虛擬』主端界面(通常叫做vbox0或是其它類似名稱),接著把這個界面接到橋接器上。
3.最後,在虛擬機器的網路卡設定界面上,把這個新的主端界面名字指定給它。
很不幸的,因為Linux的發行版本太多,每個發行版本的網路設定略有不同,因此無法全面介紹。這裡只完全針對ubuntu來翻譯。其它Debian,Fedora/RedHat和openSUSE就請自行參看原文手冊。
VirtualBox針對所有的發行版,提供了二個工具,VBoxAddIF和VBoxDeleteIF。這些工具可以讓你建立或刪除持續主端界面(當你重開機也不會消失),而且你可以選擇把它們加入到存在的橋接器上。VirtualBox也提供了一個叫做VBoxTunctl的工具,你可以運用它來建立一個暫時性的界面。這些工具的說明在原文手冊第六十八頁有介紹。
接下來我們來看ubuntu的實作部份。在ubuntu底下要設定一個持續性的主端界面,有底下幾個步驟:
1.首先安裝橋接工具(bridge-utils)套件。
sudo apt-get install bridge-utils
2.接著,你要在/etc/network/interfaces裡增加『橋』的設定。底下的範例建立了一個名為br0的橋,並且把主機ethernet界面eth0與它連接。br0沒有指定固定IP,它的IP取得是使用DHCP,剩下的就是讓主端存取這個網路。

auto br0
iface br0 inet dhcp
bridge_ports eth0
譯註:
1.如果在你的網路環境沒有可以提供自動給IP的DHCP伺服器,你就必須使用固定的IP位址了。
2.在實測中,如果你的網路是使用pppoe的連線方式上網(就是ADSL撥接的方式),如果你的br0的設定不是第一個,會造成撥接上網異常。不過這部份沒有太多時間詳測,底下提供的是我使用的固定IP且可上網的設定方式給大家參考。
auto lo

iface lo inet loopback



auto br0

iface br0 inet static

address 192.168.1.199

netmask 255.255.255.0

gateway 192.168.1.254

bridge_ports eth0



auto dsl-provider

iface dsl-provider inet ppp

pre-up /sbin/ifconfig br0 up # line maintained by pppoeconf

provider dsl-provider



auto eth0

iface eth0 inet static

address 192.168.0.11

netmask 255.255.255.0

gateway 192.168.0.254

3.重新啟動你的網路
sudo /etc/init.d/networking restart
譯註:啟動之後,如果你觀察網路介面 ifconfig -a,會發現『多了一塊br0的網卡』
4.現在,建立持續連接主機界面vbox0(所有利用這種方法建立的主端界面,都必須要叫做vbox,後面跟著一個數字,如vbox0、vbox1、vbox2......),然後把它加到之前我們建立的橋接器上。
sudo VboxAddIF vbox0 br0
記得實作時,把替換成實際要使用新界面的使用者。
最後,要告訴VirtualBox使用這個界面,執行VirtualBox應用程式,在主視窗上選擇你要使用的虛擬機器,接著點選 設定值-->網路-->附掛到......,下拉選擇主端界面,並且在介面名稱上,輸入vbox0

經過以上步驟,你就可以使用網路芳鄰、網路印表機等等功能嚕。

沒有留言:

張貼留言