VirtualBox 网络连接方式整理

VirtualBox 网络连接方式整理

VirtualBox 网络连接方式研究

全新升级版 vbox超级加强版 V2021
vbox硬件级虚拟机 去虚拟化 咨询ΩΩ: 1311190882

目录:


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为虚拟机提供8种虚拟PCI Ethernet 网卡。对于每一种网卡,都可以单独选择以下特性:

      1)连同硬件一起虚拟化;

      2)虚拟化模式的虚拟网卡将会运行在你的主机物理网络硬件上。(the virtualization mode that the virtual card will be operating in with respect to your physical networking hardware on the host.)


VirtualBox用户图形界面中可以配置四种模式的网卡,也可以在命令行通过VBoxManage modifyvm进行配置。VBoxManage modifyvm


1.1  虚拟网络硬件


对于每一种网卡,你都可以选择不同的硬件应用于虚拟机上。VirtualBox可以对以下六种网络硬件进行虚拟化。


  *  AMD PCNet PCI II (Am79C970A);

  *  AMD PCNet FAST III (Am79C973, the default);

  *  Intel PRO/1000 MT Desktop (82540EM);

  *  Intel PRO/1000 T Server (82543GC);

  *  Intel PRO/1000 MT Server (82545EM);

  *  Paravirtualized network adapter (virtio-net).


PCNet FAST III 是默认的,因为几乎所有的原始操作系统都支持这种网络硬件,GNU GRUB 启动管理器也是默认的。例外的是,被选作一些客户机操作系统的Intel PRO/1000系列适配器不再被PCNet网卡所支持,例如Windows Vista。

  

Intel PRO/1000 MT Desktop运行在Windows Vista及以后版本。没有安装附加驱动的Windows XP 客户机能够识别Intel PRO/1000 T Server网络硬件。而Intel PRO/1000 MT Server则引用自其他平台。


"Paravirtualized network adapter (virtio-net)" 网络硬件是特殊的,如果选择这一项,VirtualBox将不会虚拟一般网络硬件(即被一般客户机原始系统所支持)。然而VirtualBox提供了一个特殊的软件接口以实现客户机的虚拟化环境,从而避免了模仿网络硬件和提高网络性能的复杂性。从v3.1开始,VirtualBox提供了支持行业标准“为Virtio”的网络驱动,这个网络驱动是开源项目KVM的一部分。


“virtio”网络驱动可应用于以下客户机操作系统:

  *  Linux内核版本2.6.25及其以后版本可以配置提供virtio支持,一些分布式也会将virtio移植到旧的内核版本中。

  *  For Windows 2000,XP和Vista的virtio驱动可以在KVM项目的主页下载安装。

http://www.linux-kvm.org/page/WindowsGuestDrivers


假如您使用Intel虚拟化网卡和桥接网络的话,VirtualBox会有限支持所谓的巨型帧,即网络数据包超过1500字节的数据。换言之,AMD网络设备不支持巨型帧,在这样的情况下,巨型数据包将会在传输和接受方向上被丢弃。客户机操作系统试图通过这个特性来观察一个数据包的丢失,这将会导致客户机上的应用程序产生意外的行为。在其默认的配置情况下不会导致客户机操作系统出问题,只是巨型帧需要被明确的使用。


1.2   网络模式简介


八种网络适配器都可以分别配置以下的模式:


Not attached

     在这种模式下,VirtualBox会告诉客户机有一个网卡的存在,但没有连接——就好像没有以    太网线缆插入该网卡。这种方式就像把虚拟以太网线缆拔出并破坏连接,这可以有效地告知客户机操作系统没有网络连接可用并强制重新配置。


NetworkAddress Translation(NAT)

      如果你只是想要通过虚拟机浏览网页、下载文件和查阅邮件的话,那这个默认的模式应该可以满足你。但在使用Windows文件共享时会有一些限制,下文提及。


NAT Network

      这是在VirtualBox4.3时引入的一种新的NAT类型模式。下文1.4将会提及。


Bridged networking

       这是一种为了满足更高级的网络需求的模式,比如在客户机上进行网络模拟和运行服务器。启用之后,VirtualBox将会链接到你安装的网卡之一,并直接交换网络数据包,绕过你的物理机网络堆栈。


Internal networking

       可用于创建不同的虚拟机之间的访问机制,但是不能够访问物理主机和外部网路中的机器。


Host-only networking

       这是一种用于创建物理主机与虚拟机之间的访问机制的模式,不需要物理主机的网络接口。相反,在物理主机上创建了一个虚拟网络接口(类似于回环接口),提供物理主机与虚拟机之间的链接。


Generic networking

        很少使用的模式,共享相同的通用网络接口,通过允许用户选择能被VirtualBox包含或者分布在一个扩展包里的驱动。

        这种模式下有两种可用的子模式:

UDP Tunnel

          这可以用于直接相互连接在不同的物理主机上运行的虚拟机,容易而且透明,覆盖现有的网络基础设施。


VDE(虚拟分布式以太网)networking 

           此选项可用于在Linux或FreeBSD的主机上连接虚拟分布式以太网交换机。目前,这需要从源代码编译的VirtualBox,因为Oracle包不包含它。


下面对这些网络模式进行详细的描述。


 1.3  Network Address Translation(NAT)


NAT模式是虚拟机访问外网的最简单的方式。通常不需要对物理主机和虚拟机做任何配置。正因如此,NAT在VirtualBox中是默认的联网方式。


一台应用NAT模式的虚拟机就像一台通过路由器连入互联网的真机,在这里,VirtualBox的网络引擎充当路由器,在VirtualBox中,这台路由器放置在每一台虚拟机和物理主机之间。出于实现最大安全分离的考虑,默认情况下虚拟机之间不能够相互访问。


NAT模式的一个劣势是,像经过路由分配之后的私有网路一样,虚拟机不能访问外网,也不能被外网所访问。如此一来你便无法在虚拟机上运行一台服务器,除非你给虚拟机设置端口转发(下文1.3.1提及)。


虚拟机操作系统所发出的网络数据包将会被VirtualBox的NAT引擎以TCP/IP协议所接收,并通过主机操作系统再次发送出去。对于主机上的应用程序或是与主机处于同一网段的其他电脑来说,这就好像是主机上的VirtualBox应用程序通过主机的IP地址把数据包发了出去。VirtualBox将会监听对所发数据包的回复,然后重新打包并发送给私有网络上的虚拟机。


VirtualBox集成了DHCP服务器,虚拟机会接收在该服务器上的网络地址和私有网络配置。因此,分配到虚拟机上的IP地址通常和物理主机的网络完全不同。应用NAT模式是,虚拟机会配置多张网卡,第一张网卡用于与10.0.2.0私有网络连接,第二张网卡用于与10.0.3.0网络连接,诸如此类。如果你需要改变虚拟机分配的IP的排序,可以到这里:Section 9.11, “Fine-tuning the VirtualBox NAT engine”.


1.3.1   配置NAT端口转换


NAT模式下,虚拟机连接的是内部的私有网络,无法被物理主机访问,所以虚拟机的网络服务无法与物理主机或其他通过网段的外界主机相连。但VirtualBox可以像路由器一样通过端口转换来实现与外网相连。也就是说,VirtualBox会监听物理主机的端口并转发所有发送到虚拟机上的数据包,不论虚拟机的端口号相同与否。


对于网络上的物理主机或其他主机、虚拟机的应用程序,看似是被代理了服务,实际上是运行在物理主机上的。这也意味着你不能在同一个端口号同一台物理主机上运行相同的服务。但你仍然可以在虚拟机上运行该服务——例如,在物理主机或者其他虚拟机上不能得到许可的服务,能够在与物理主机不同的操作系统上运行。


你可以在VirtualBox用户界面的网络设置中进行端口转换的相关配置,也可以用命令行VBoxManage,详见:Section 8.8, “VBoxManage modifyvm”.


你需要知道虚拟机用的服务用的是哪些端口,以确定物理主机用哪些端口(通常情况下建议设置为同样的端口号)。你可以用任意在物理主机上没有被占用的端口。


例如,用以下命令设置传入NAT连接到虚拟机上的SSH服务:


C代码  收藏代码

VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,,2222,,22"  

 

以上例子中,所有发送到物理主机2222端口的TCP流量将被转发到虚拟机的22端口上。tcp是定义的用于转发的协议(也可以用udp)。guestssh纯粹是用于描述的,如果省略的话会自动赋值。-natpf后的数字用于指定网卡。

要移除转发规则,用以下命令:


C代码  收藏代码

VBoxManage modifyvm "虚拟机名称" --natpf1 delete "guestssh"  

 

如果虚拟机需要使用静态分配的IP地址而不使用内置的DHCP服务,那就需要在注册转发规则时指定虚拟机的IP:


C代码  收藏代码

VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"  

 

这个例子中的字段跟上个例子基本相同,差别在于,告知NAT引擎可以访问10.0.2.19的虚拟机。


需要把所有的传入流量从一个特定的主机接口转发到虚拟机,用以下命令指定主机接口IP:


C代码  收藏代码

VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"  

 

通过端口2222将所有到达本地接口(127.0.0.1)的TCP流量转发到虚拟机的22端口


VBoxManage还可以在虚拟机运行时配置传入NAT连接:Section 8.13, “VBoxManage controlvm”


1.3.2   NAT模式的局限性


NAT模式下有四点局限性

  * ICMP协议局限:

一些常用的网络调试工具(例如 ping 或tracerouting)应用的是ICMP协议收发消息,从VirtualBox2.1之后提供了ICMP协议的支持(可以ping),其他调试工具还不能支持。

  * 不能完全支持UDP广播的接收

虚拟机无法完全支持UDP广播的接收,出于节省资源的考虑,它只会监听从特定端口发出UDP数据包之后的一小段时间。因此,基于广播的NetBIOS名称解析并不总是起作用(但WINS始终起作用),一种解决方法是,你可以在\\server\share标记中使用所需服务器的数字IP。

  * 不支持类似于GRE的协议

NAT模式下不支持TCP和UDP以外的协议,意味着不能使用一些VPN工具(例如微软的PPTP)。只能使用应用TCP UDP协议的VPN。

  * 不能应用<1024物理主机转发端口

在基于Unix的物理主机上(例如Linux,Solaris,Mac OS X)无法绑定<1024的端口号,应用程序无法被root.运行。如果你配置了这样的端口转发虚拟机将拒绝启动。


这些限制通常不会影响标准网络的使用,但是NAT模式下有可能会影响协议的正常使用。NFS就是其中的例子,服务器通常配置为拒绝非特权端口的连接(<1024)。


1.4  Network Address Translation Service


NAT service的工作原理和家用的路由器相似,系统群组在网络中应用这种模式来防止外部网络的直接访问,但能让系统内部通过TCP和UDP协议实现互访或访问系统外部网络。


NAT service模式附带了一个内部网络,虚拟机利用它可以连接到内部网络,创建NAT网络时即可设置内部网络的名字。创建NAT网络命令:


C代码  收藏代码

VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable  

 

其中的“natnet1”是被使用的内网名字,“192.168.15.0/24”是NAT service接口的网络地址和掩码。默认情况下这个静态网关将被分配地址192.168.15.1(跟随接口地址),但这可以被改变。添加DHCP服务到内部网络,我们可以作如下修改:


C代码  收藏代码

VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable --dhcp on  

 

或者是在创建之后加入DHCP服务


C代码  收藏代码

VBoxManage natnetwork modify --netname natnet1 --dhcp on  

 

关闭该服务


C代码  收藏代码

VBoxManage natnetwork modify --netname natnet1 --dhcp off  

 

DHCP服务器提供注册域名服务器列表,,但它不会从128/7网络进行服务器匹配(映射)。


启动NAT Service:


C代码  收藏代码

VBoxManage natnetwork start --netname natnet1  

 

如果网络中附带了DCHP服务器,将会一并启动。


C代码  收藏代码

VBoxManage natnetwork stop --netname natnet1  

 

关闭NAT service时也会一并关闭。


移除NAT service:


C代码  收藏代码

VBoxManage natnetwork remove --netname natnet1  

 

如果DCHP服务器正在内部网络中使用的话,使用这个命令DCHP服务将不会被移除。


设置支持端口转换:(--port-forward-4 for IPv4 ;—port-forward-6 for IPv6)


C代码  收藏代码

VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "ssh:tcp:[]:1022:[192.168.15.5]:22"  

 

这条命令制定了端口转换规则,从物理主机的TCP1022端口到IP地址为192.168.15.5的虚拟机22端口。物理主机端口、虚拟机端口、虚拟机IP是必填参数。

删除该规则:


C代码  收藏代码

VBoxManage natnetwork modify --netname natnet1 --port-forward-4 delete ssh  

 

可以绑定NAT Service到特定的接口:


C代码  收藏代码

VBoxManage setextradata global "NAT/win-nat-test-0/SourceIp4" 192.168.1.185  

 

浏览注册的NAT 网络列表:


C代码  收藏代码

VBoxManage list natnetworks  



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)命令行:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nicintnet  

 

可以指定网络名字:


C代码  收藏代码

VBoxManage modifyvm "虚拟机名称" --intnet"network name”  

 

如果不指定网络名字,默认情况下网卡将会连接到intnet网络。


出于安全考虑,在默认情况下,Linux实现内部联网只允许在相同的用户ID运行的虚拟机建立一个内部网络。但是,可以建立一个共享的内部网络接口,通过用不同的UUID用户访问。


    1.7   仅主机模式(Host-only networking)


仅主机模式是2.2版本之后加入的新的连网模式。可以将它视为桥接模式和内网模式的混合体:像桥接网络模式那样够通过物理以太网交换机与物理主机、其他主机相连。类似地,像内网模式一样,不需要存在物理网络接口,又因为它们没有连接到物理网络接口,所以虚拟机不能够与物理主机之外的外网连接。


在应用仅主机网络模式时,VirtualBox会在物理主机上创建一个新的软件接口。换言之,桥接模式下

一个现存的物理接口会被用于连接虚拟机,而仅主机网络模式下在主机上会创建一个新的“回环”接口,在内部网络模式下,虚拟机之间的通信数据是不可见的,但主机”回环“接口上的数据能够被截获。


在多台虚拟机装配到一起进行合作的情景下,对于预先配置的虚拟设备来说,仅主机网络模式十分的有用。例如,一台虚拟机可以包含一个web服务器和一个第二数据库,并且,由于他们主要用于相互访问,设备可以指示VirtualBox可以为这两台虚拟机创建一个仅主机网络模式,然后第二个虚拟机(桥接)网络将在Web服务器连接到外界提供数据,但外界无法连接到数据库。


将虚拟机的网络接口更改成仅主机网络模式:

    *  VirtualBox图形用户界面进行网络设置修改

    *  命令行输入:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nichostonly  

     详见:Section 8.8, “VBoxManage modifyvm”


在能够添加仅主机网络模式到虚拟机之前,需要创建至少一个仅主机接口,用户界面:”File" → "Preferences" → "Network" → "Host-only network" → "(+)Add host-only network”。

命令行:


C代码  收藏代码

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通道网络模式命令如下:

       

C代码  收藏代码

VBoxManage modifyvm "VM 01 on host 1" --nicgeneric  

VBoxManage modifyvm "VM 01 on host 1" --nicgenericdrvUDPTunnel  

VBoxManage modifyvm "VM 01 on host 1" --nicpropertydest=10.0.0.2  

VBoxManage modifyvm "VM 01 on host 1" --nicpropertysport=10001  

VBoxManage modifyvm "VM 01 on host 1" --nicpropertydport=10002  

 

and

 

C代码  收藏代码

VBoxManage modifyvm "VM 02 on host 2" --nicgeneric  

VBoxManage modifyvm "VM 02 on host 2" --nicgenericdrvUDPTunnel  

VBoxManage modifyvm "VM 02 on host 2" --nicpropertydest=10.0.0.1  

VBoxManage modifyvm "VM 02 on host 2" --nicpropertysport=10002  

VBoxManage modifyvm "VM 02 on host 2" --nicpropertydport=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交换机


C代码  收藏代码

de_switch -s /tmp/switch1  

 

  2、 用命令行做一下配置:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nicgeneric  

VBoxManage modifyvm "VM name" --nicgenericdrvVDE  

 

连接到自动分配的交换机端口:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nicpropertynetwork=/tmp/switch1  

 

连接到指定的switch端口:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nicpropertynetwork=/tmp/switch1[]  

 

  3、VDE交换机端口和VLAN之间的映射(可选):(从交换机CLI)


C代码  收藏代码

vde$ vlan/create  

vde$ port/setvlan  


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 并将群组分配到虚拟机的第一第二个网络适配器中:


C代码  收藏代码

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 :


C代码  收藏代码

VBoxManage bandwidthctl "VM name" set Limit --limit 100k  

 

要完全禁用虚拟机的第一个适配器,用以下命令:


C代码  收藏代码

VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none  


也可以在虚拟机运行时禁用所有分配到带宽群组中的适配器,通过将群组限制设为0,下例对名为”Limit“的带宽群组进行适配器禁用:


C代码  收藏代码

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 删除所有限制——虚拟机的网络适配器能看到的所有通信流量。


相关推荐

[!--temp.pl--]