VirtualBox 網絡連接方式研究(二)
本文由本人(六六Coding的地方)翻譯自VirtualBox官方文檔,尊重知識產權轉載請註明出處。謝謝!
官方:https://www.virtualbox.org/manual/ch06.html
目錄:
1.1 虛擬化網絡硬件
1.2 網絡模式介紹
1.3 Network Address Translation(NAT)
1.3.1 配置NAT端口轉換
1.3.2 NAT模式的局限性
1.4 Network Address Translation Service
1.5 橋接網絡(Bridged Networking)
1.6 內部網絡(Internal networking)
1.7 僅主機模式(Host-only networking)
1.8 UDP通道網絡(UDP Tunnel networking)
1.9 VDE networking
1.10 限制I/O網絡的帶寬
1.11 提高網絡性能
接上篇:VirtualBox 網絡連接方式研究(一)
1.5 橋接網絡(Bridged Networking)
在橋接網絡模式下,VirtualBox在你的物理主機上啟用了一個設備驅動,用以過濾從物理網絡適配器中過來的數據。因此這個驅動被稱為“網絡過濾”設備。它允許VirtualBox攔截物理網絡數據和註入數據有效地在軟件中創建一個新的網絡接口。當虛擬機在應用這個新的軟件接口時,看起來就好像是虛擬機物理地連接到了網線上:物理主機可以通過這個接口與虛擬機進行數據的收發。這意味著你可以在虛擬機和網絡之間設置路由和“橋梁”。
Note
橋接無線接口和橋接有線接口是完全不同的,因為大多數無線適配器不支持混合模式。所有通信必須使用主機的無線適配器的MAC地址,因此VirtualBox需要將傳出包的以太網報頭取代??源MAC地址,以確保回復將發送到主機接口。當VirtualBox收到一個帶有目標IP的傳入包時,比對IP從屬於虛擬機適配器,VirtualBox將會把以太網報頭的目標MAC地址替換到虛擬機適配器的MAC地址中,並接收數據包。為了獲取虛擬機的IP地址,VirtualBox會檢查ARP和DHCP數據包。
橋接網絡的局限性取決於你的物理主機操作系統:
* Macintosh 主機。使用AirPort(Mac的無線網絡)時功能受限。目前的VirtualBox只支持IPv4和IPv6的AirPort。如果要使用其他協議(比如IPX),你必須選擇有線接口。
* linux主機。應用無線接口是功能受限,目前的VirtualBox只支持IPv4和IPv6的無線。如果要使用其他協議(比如IPX),你必須選擇有線接口。
此外,Marvell Yukon II EC Ultra Ethernet NIC上的sky2提供的有線接口中把MTU設置為小於1500字節,將會導致丟包現象。
Linux 內核2.6.27版本不允許通過VLAN適配器實現虛擬機與外部網絡之間的中繼,Linux以外的操作系統亦然。
* Solaris主機。不支持使用無線接口。因為Solaris子系統的技術限制,不能完全支持用IPFilter進行虛擬機通信過濾。這些問題將在未來的Solaris 11版本中得到解決。
從VirtualBox4.1開始,在Solaris11的物理主機上(build159及以上版本),無需任何配置就可以通過Solaris的Crossbow Virtual Network interfaces (VNICs) 直接與VirtualBox相連,但VNIC需單獨地與虛擬機網絡接口對應。
從VirtualBox2.0.4開始到VirtualBox 4.0,VNIC可被使用,但具有以下註意事項:
1)將VNIC無法在多個虛擬機網絡接口間共享,即每個虛擬機網絡接口都必須有自己獨有的VNIC
2) 使用VNIC虛擬網卡和虛擬機VNIC網絡接口必須有相同的MAC地址。
使用VLAN接口與VirtualBox時,他們必須根據PPA-hack命名方案(如“e1000g513001”)來命名,否則虛擬機可能會以錯誤的格式接收數據包。
1.6 內部網絡(Internal networking)
內部網絡模式類似於橋接網絡模式那樣可以直接與“外部網絡”通信。這裏的“外部網絡”是指連接在內網中的同一臺物理主機上的其他虛擬機。
從技術層面上說,內部網絡實現網絡連接需求,橋接網絡模式也可以實現。但是應用內部網絡模式能夠提高安全性。在橋接網絡模式中,所有的數據通信都需要通過主機系統的物理接口。因此可以添加一個數據嗅探器(類似Wireshark)到主機接口和所有通過的數據的日誌中。如果你想實現一臺機器上的多臺虛擬機之間的私下通信,並向物理主機和用戶隱藏虛擬機的數據的話,橋接網絡就不適合了。
在有需要的情況下,內部網絡模式將會自動創建而不需要其他配置。每一個內部網路簡單地一名稱來區分。一旦多於一個有相同內網ID的網卡活動,VirtualBox的支持驅動會自動連接這些網卡並從當網絡交換機的角色。VirtualBox支持驅動實現了一個完整的以太網交換機,並支持支持廣播/多播幀和混雜模式。
為了把多臺虛擬機的網卡連接成內網,將網絡設置成內網模式,有以下兩種方式:
1)通過圖形界面進行設置,在網絡設置對話框裏選擇一個存在的內網並輸入新的名字。
2)命令行:
VBoxManage modifyvm "VM name" --nic<x> intnet
可以指定網絡名字:
VBoxManage modifyvm "虛擬機名稱" --intnet<x> "network name”
如果不指定網絡名字,默認情況下網卡將會連接到intnet網絡。
出於安全考慮,在默認情況下,Linux實現內部聯網只允許在相同的用戶ID運行的虛擬機建立一個內部網絡。但是,可以建立一個共享的內部網絡接口,通過用不同的UUID用戶訪問。
1.7 僅主機模式(Host-only networking)
僅主機模式是2.2版本之後加入的新的連網模式。可以將它視為橋接模式和內網模式的混合體:像橋接網絡模式那樣夠通過物理以太網交換機與物理主機、其他主機相連。類似地,像內網模式一樣,不需要存在物理網絡接口,又因為它們沒有連接到物理網絡接口,所以虛擬機不能夠與物理主機之外的外網連接。
在應用僅主機網絡模式時,VirtualBox會在物理主機上創建一個新的軟件接口。換言之,橋接模式下
一個現存的物理接口會被用於連接虛擬機,而僅主機網絡模式下在主機上會創建一個新的“回環”接口,在內部網絡模式下,虛擬機之間的通信數據是不可見的,但主機”回環“接口上的數據能夠被截獲。
在多臺虛擬機裝配到一起進行合作的情景下,對於預先配置的虛擬設備來說,僅主機網絡模式十分的有用。例如,一臺虛擬機可以包含一個web服務器和一個第二數據庫,並且,由於他們主要用於相互訪問,設備可以指示VirtualBox可以為這兩臺虛擬機創建一個僅主機網絡模式,然後第二個虛擬機(橋接)網絡將在Web服務器連接到外界提供數據,但外界無法連接到數據庫。
將虛擬機的網絡接口更改成僅主機網絡模式:
* VirtualBox圖形用戶界面進行網絡設置修改
* 命令行輸入:
VBoxManage modifyvm "VM name" --nic<x> hostonly
詳見:Section 8.8, “VBoxManage modifyvm”
在能夠添加僅主機網絡模式到虛擬機之前,需要創建至少一個僅主機接口,用戶界面:”File" → "Preferences" → "Network" → "Host-only network" → "(+)Add host-only network”。
命令行:
VBoxManage hostonlyif create
詳見:Section 8.34, “VBoxManage hostonlyif”
僅主機網絡模式像內部網絡模式一樣,你會發現VirtualBox內置的DCHP服務器非常的有用。它可以在僅主機網絡模式下管理IP地址,否則你需要配置所有的靜態IP。
* 在用戶圖形界面可以在網絡設置中的僅主機選項中設置DCHP服務;
* 或者你也可以用命令行操作,詳見:Section 8.35, “VBoxManage dhcpserver”
Note:在Linux和Mac OS X主機上,僅主機網絡接口限制在128個。在Windows和Solaris主機上沒有這樣的限制。
1.8 UDP通道網絡(UDP Tunnel networking)
這種組網方式允許在不同主機運行的虛擬機之間實現互聯。
從技術實現上講,這是把虛擬機網卡收發的以太網幀封裝成UDP/IP的數據包,再通過可用網絡將它發送給主機。
UDP 通道網絡模式有以下三個字段屬性:
* Source UDP port
主機監聽的端口。主機從該端口收到源地址來的數據包後,將會轉發給接收端的虛擬機網卡
* Destination address
傳送數據的目標主機的IP地址
* Destination UDP port
傳輸數據所用的端口號
當不同主機上的兩臺虛擬機互聯時,必須交換他們的IP地址。在單一主機上,源UDP端口必須與目標UDP端口交換。
下例:主機1用10.0.0.1端口,主機2用10.0.0.2端口,配置UDP通道網絡模式命令如下:
VBoxManage modifyvm "VM 01 on host 1" --nic<x> generic VBoxManage modifyvm "VM 01 on host 1" --nicgenericdrv<x> UDPTunnel VBoxManage modifyvm "VM 01 on host 1" --nicproperty<x> dest=10.0.0.2 VBoxManage modifyvm "VM 01 on host 1" --nicproperty<x> sport=10001 VBoxManage modifyvm "VM 01 on host 1" --nicproperty<x> dport=10002
and
VBoxManage modifyvm "VM 02 on host 2" --nic<y> generic VBoxManage modifyvm "VM 02 on host 2" --nicgenericdrv<y> UDPTunnel VBoxManage modifyvm "VM 02 on host 2" --nicproperty<y> dest=10.0.0.1 VBoxManage modifyvm "VM 02 on host 2" --nicproperty<y> sport=10002 VBoxManage modifyvm "VM 02 on host 2" --nicproperty<y> dport=10001
當然,你也可以設置成一臺主機上的虛擬機互聯,只要把目標地址(Destination port)都設置成127.0.0.1就好了。設置成一臺主機時,這就類似於”內部網絡“了,區別在於對於主機來說,虛擬機之間的數據通信是可見的,而一般的內部網絡模式是不可見的。
NOTE:基於Unix的主機(例如Linux,Solaris,Mac OS X),不能綁定端口號<1024的應用程序,因為它無法被root.所運行。如果配置了這樣的源UDP端口,虛擬機將不會啟動。
1.9 VDE networking
分布式虛擬以太網(VDE)是靈活的,虛擬網絡的基礎設施系統以一種安全的方式跨越多臺主機。
它允許L2 / L3交換,包括生成樹協議,VLANs和WAN仿真。這是VirtualBox的可選部分,只包含在源代碼中。
VirtualBox VDE只有一個參數.
* VDE network
虛擬機將要連接的VDE交換機名稱。
以下簡單的例子演示如何把虛擬機連接到VDE交換機:
1、創建一個VDE交換機
de_switch -s /tmp/switch1
2、 用命令行做一下配置:
VBoxManage modifyvm "VM name" --nic<x> generic VBoxManage modifyvm "VM name" --nicgenericdrv<x> VDE
連接到自動分配的交換機端口:
VBoxManage modifyvm "VM name" --nicproperty<x> network=/tmp/switch1
連接到指定的switch<n>端口:
VBoxManage modifyvm "VM name" --nicproperty<x> network=/tmp/switch1[<n>]
3、VDE交換機端口和VLAN之間的映射(可選):(從交換機CLI)
vde$ vlan/create <VLAN> vde$ port/setvlan <port> <VLAN>
VDE只能在Linux和FreeBSD主機上應用。只能在從VirtualSquare項目上安裝了VDE軟件和VDE插件類庫的主機系統上運行。了解更多關於VDE網絡模式,官方文檔傳送門:
http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking
1.10 限制I/O網絡的帶寬
從4.2開始,VirtualBox允許對網絡傳輸的最大帶寬進行限制。一臺虛擬機的多個網絡適配器可以共享帶寬群組限制,這樣的限制可能會超過一個以上。
NOTE:VirtualBox只會對發送端的虛擬機數據進行延遲發送,不會對虛擬機接受的數據進行限制。
通過VBoxManage可以進行限制器的配置,以下示例創建了一個名為”Limit“的帶寬群組,設置限制為20 Mbit/s 並將群組分配到虛擬機的第一第二個網絡適配器中:
VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit
所有的群組中的適配器都會共享帶寬限制,意味著以上例子中的兩個適配器的帶寬都不會超過 20 Mbit/s 。但是,如果其中一個適配器不需要帶寬,那另一個將會占用它所在群組的剩余帶寬。
在虛擬機運行時,都可以動態改變帶寬群組的限制,即時生效。下例是將上例創建的帶寬群組限制更改為 100 Kbit/s :
VBoxManage bandwidthctl "VM name" set Limit --limit 100k
要完全禁用虛擬機的第一個適配器,用以下命令:
VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none
也可以在虛擬機運行時禁用所有分配到帶寬群組中的適配器,通過將群組限制設為0,下例對名為”Limit“的帶寬群組進行適配器禁用:
VBoxManage bandwidthctl "VM name" set Limit --limit 0
1.11 提高網絡性能
VirtualBox中提供多種可以”附著“在主機網絡上的虛擬網絡適配器,可以通過多種方法進行配置。對於不同類型的適配器和所用的不同”附件“,網絡性能也會不同。性能方面,Virtio網絡適配器要優於Intel PRO / 1000仿真適配器,也優於PCNet系列適配器。Virtio和 Intel PRO/1000 適配器都得益於分段(segmentation)和卸載(offloading)校驗。分段卸載是高性能的基礎,因為它允許較少的內容交換,顯著增加了虛擬機與主機之間傳輸的數據包大小限制。
NOTE:Virtio和Intel PRO/1000 for Windows XP驅動都不支持分段卸載,因此Windows XP系統上的虛擬永遠無法達到與其他類型的虛擬同樣的傳輸速率。請參考Microsoft知識庫中其他信息,相應文章842264。
三種網絡模式:內部網絡、橋接網路和僅主機網絡幾乎具備相同的網絡性能。因為內網模式下的數據包不經過主機網絡堆棧,所以運行要更快更節省CPU的占用。NAT模式下,因為NAT提供網絡地址解析,所以是最慢(也最安全)的模式。通用驅動附件是特殊的,不能替代其他類型的附件。
分配到虛擬機上的CPU數不能提高虛擬機的網絡性能,在某些情況下還會有害於虛擬機,因為這增加了虛擬機的並發。
對於提高虛擬機的網絡性能,有以下幾點需要註意:
1、盡可能使用Virtio網絡適配器,至少使用Intel/1000 適配器;
2、盡量使用橋接網絡模式而不是NAT模式;
3、確定分段卸載在虛擬機操作系統上是否可用。一般默認情況下是可用的,你可以在Linux虛擬機上用ethtool命令行檢查確認offloading設置;
4、要像第三方工具Wireshark那樣在虛擬機網絡適配器上對網絡流量進行全面而細致的分析,需要在虛擬機的網絡適配器上使用一個混合模式的規則(policy),並且只能在NAT網絡、橋接網絡適配器、內部網絡和僅主機模式的適配器下使用。
設置混合模式規則( promiscuous mode policy)可以在用戶界面的網絡設置中配置,也可以用命令行工具VBoxManage配置,詳見:Section 8.8, “VBoxManage modifyvm”
混雜模式規則是:
a)deny(默認設置),它可以隱藏不適合該虛擬機的網絡適配器的流量。
b)allow-vms,它可以隱藏在這個虛擬機的網絡適配器中的所有主機的流量,但允許它對來自其它虛擬機或發送到其他虛擬機的流量可見。
c)allow-all 刪除所有限制——虛擬機的網絡適配器能看到的所有通信流量。
Tags:
文章來源: