虚拟网络

网络设置中所述,Oracle VirtualBox为每台虚拟机提供多达八个虚拟PCI以太网卡。对于每个此类网卡,您可以单独选择以下内容

其中四张网卡可以在VirtualBox管理器设置窗口的网络部分进行配置。您可以使用命令行工具VBoxManage modifyvm配置所有八张网卡。参见VBoxManage modifyvm

本章将更详细地解释各种网络设置。

虚拟网络硬件

对于每张网卡,您可以单独选择将哪种硬件呈现给虚拟机。Oracle VirtualBox可以虚拟化以下类型的网络硬件

  • AMD PCNet PCI II (Am79C970A) 不适用于Arm访客机。

  • AMD PCNet FAST III (Am79C973),x86访客机上的默认设置。不适用于Arm访客机。

  • Intel PRO/1000 MT Desktop (82540EM)

  • Intel PRO/1000 T Server (82543GC)

  • Intel PRO/1000 MT Server (82545EM)

  • 半虚拟化网络适配器 (virtio-net)

PCNet FAST III是默认设置,因为它受到几乎所有操作系统以及GNU GRUB启动管理器的支持。例外情况是,对于某些不再随PCNet网卡驱动程序提供的访客操作系统类型(例如Windows Vista),会选择Intel PRO/1000系列适配器。

Intel PRO/1000 MT Desktop 类型适用于Windows Vista及更高版本。Intel PRO/1000网卡的T Server变体无需额外安装驱动即可被Windows XP访客机识别。MT Server变体有助于从其他平台导入OVF。

半虚拟化网络适配器 (virtio-net) 是特殊的。如果您选择此适配器,则Oracle VirtualBox不会虚拟化常见访客操作系统支持的通用网络硬件。相反,Oracle VirtualBox期望访客机提供一个针对虚拟化环境的特殊软件接口,从而避免了模拟网络硬件的复杂性并提高了网络性能。Oracle VirtualBox支持行业标准的virtio网络驱动程序,这些驱动程序是开源KVM项目的一部分。

virtio网络驱动程序适用于以下访客操作系统

  • Linux内核版本2.6.25或更高版本可以配置为提供virtio支持。一些发行版也将virtio回溯移植到较旧的内核。

  • 对于Windows 2000、XP和Vista,可以从KVM项目网页下载并安装virtio驱动程序

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

Oracle VirtualBox也有限度地支持巨型帧(jumbo frames)。这些是数据量超过1500字节的网络数据包,前提是您使用Intel网卡虚拟化和桥接网络。AMD网络设备不支持巨型帧。在这些情况下,巨型数据包将在发送和接收方向上被静默丢弃。尝试使用此功能的访客操作系统将观察到数据包丢失,这可能导致访客机中出现意外的应用程序行为。这不会对默认配置的访客操作系统造成问题,因为巨型帧需要显式启用。

网络模式简介

每个网络适配器都可以单独配置为以下模式之一运行

  • 未连接。在此模式下,Oracle VirtualBox向访客机报告存在网卡,但没有连接。这就像以太网线没有插入网卡一样。使用此模式,可以拔下虚拟以太网线并中断连接,这对于通知访客操作系统没有可用的网络连接并强制重新配置很有用。

  • 网络地址转换 (NAT)。如果您只想在访客机中浏览网页、下载文件和查看电子邮件,那么这种默认模式应该足以满足您的需求,您可以跳过本节的其余部分。请注意,使用Windows文件共享时存在某些限制。参见NAT限制

  • NAT网络。NAT网络是一种允许出站连接的内部网络类型。参见网络地址转换服务

  • 桥接网络。这适用于更高级的网络需求,例如网络模拟和在访客机中运行服务器。启用后,Oracle VirtualBox连接到您已安装的一张网卡并直接交换网络数据包,绕过主机的操作系统网络堆栈。

  • 内部网络。这可用于创建一种不同类型的基于软件的网络,该网络对选定的虚拟机可见,但对主机上运行的应用程序或外部世界不可见。

  • 仅主机网络。这可用于创建包含主机和一组虚拟机的网络,而无需主机的物理网络接口。相反,主机上会创建一个类似于回环接口的虚拟网络接口,提供虚拟机与主机之间的连接。

  • 云网络。这可用于将本地虚拟机连接到远程云服务上的子网。

  • 通用网络。不常用的模式,通过允许用户选择可与Oracle VirtualBox一起包含或在扩展包中分发的驱动程序,共享相同的通用网络接口。

    以下子模式可用

    • UDP隧道:用于通过现有网络基础设施,直接、轻松、透明地互连在不同主机上运行的虚拟机。

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

下表概述了最重要的网络模式。

表1. 网络模式概述。网络模式概述
模式

虚拟机→主机

虚拟机←主机

虚拟机1↔虚拟机2

虚拟机→网络/局域网

虚拟机←网络/局域网

仅主机

+

+

+

内部

+

桥接

+

+

+

+

+

NAT

+

端口转发

+

端口转发

NAT服务

+

端口转发

+

+

端口转发

以下部分将更详细地描述可用的网络模式。

网络地址转换 (NAT)

网络地址转换 (NAT) 是从虚拟机访问外部网络最简单的方法。通常,它不需要在主机网络和访客系统上进行任何配置。因此,它是Oracle VirtualBox中的默认网络模式。

启用NAT的虚拟机就像一台通过路由器连接到互联网的真实计算机。在这种情况下,路由器是Oracle VirtualBox网络引擎,它透明地映射虚拟机进出的流量。在Oracle VirtualBox中,此路由器位于每台虚拟机和主机之间。这种分离最大限度地提高了安全性,因为默认情况下虚拟机无法相互通信。

NAT模式的缺点是,很像路由器后面的私有网络,虚拟机对于外部互联网是不可见且不可访问的。您无法以这种方式运行服务器,除非您设置了端口转发。参见使用NAT配置端口转发

访客操作系统发出的网络帧由Oracle VirtualBox的NAT引擎接收,该引擎提取TCP/IP数据并使用主机操作系统重新发送。对于主机上的应用程序或与主机位于同一网络上的另一台计算机而言,数据看起来是由主机上的Oracle VirtualBox应用程序使用属于主机的IP地址发送的。Oracle VirtualBox监听对发送数据包的回复,并将其重新打包并重新发送到访客机在其私有网络上。

虚拟机通过集成到Oracle VirtualBox中的DHCP服务器在其私有网络上接收网络地址和配置。因此分配给虚拟机的IP地址通常与主机位于完全不同的网络上。由于虚拟机的多张网卡可以设置为使用NAT,因此第一张网卡连接到私有网络10.0.2.0,第二张网卡连接到网络10.0.3.0,依此类推。如果您需要更改访客机分配的IP范围,请参见精细调整Oracle VirtualBox NAT引擎

使用NAT配置端口转发

由于虚拟机连接到Oracle VirtualBox内部的私有网络,并且对主机不可见,因此访客机上的网络服务无法被主机或同一网络上的其他计算机访问。然而,像物理路由器一样,Oracle VirtualBox可以通过端口转发将选定的服务提供给访客机外部的世界。这意味着Oracle VirtualBox会监听主机上的特定端口,并将所有到达那里的数据包重新发送到访客机,可以是相同端口也可以是不同端口。

对于主机上的应用程序或网络上的其他物理或虚拟机而言,被代理的服务看起来似乎实际运行在主机上。这也意味着您无法在主机上相同的端口运行相同的服务。然而,您仍然获得了在虚拟机中运行服务的优势。例如,主机或其他虚拟机上的服务不会因服务中的漏洞或错误而受到威胁或崩溃,并且该服务可以在与主机系统不同的操作系统中运行。

要配置端口转发,您可以使用图形化端口转发编辑器,该编辑器位于配置为使用NAT的网络适配器的网络设置对话框中。在此,您可以将主机端口映射到访客端口,以允许网络流量路由到访客机中的特定端口。

或者,可以使用命令行工具VBoxManage。参见VBoxManage modifyvm

您需要知道服务在访客机上使用哪些端口,并决定在主机上使用哪些端口。您可能希望在访客机和主机上使用相同的端口。您可以使用主机上任何尚未被服务占用的端口。例如,要在访客机中为ssh服务器设置传入的NAT连接,请使用以下命令

VBoxManage modifyvm "VM name" --nat-pf1 "guestssh,tcp,,2222,,22"

在上述示例中,到达任何主机接口2222端口的所有TCP流量都将被转发到访客机中的22端口。协议名称tcp是定义转发应使用哪个协议的强制属性,也可以使用udp。名称guestssh纯粹是描述性的,如果省略则会自动生成。--nat-pf后面的数字表示网卡,与其他VBoxManage命令一样。

要删除此转发规则,请使用以下命令

VBoxManage modifyvm "VM name" --natpf1 delete "guestssh"

如果由于某种原因,访客机使用的是非内置DHCP服务器租用的静态分配IP地址,则在注册转发规则时需要指定访客IP,如下所示

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"

此示例与上一个示例相同,只是NAT引擎被告知访客机可以在10.0.2.19地址找到。

要将来自特定主机接口的所有传入流量转发到访客机,请按如下方式指定该主机接口的IP

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"

此示例将到达本地主机接口127.0.0.1端口2222的所有TCP流量转发到访客机中的端口22。

在虚拟机运行时配置传入的NAT连接是可能的,参见VBoxManage controlvm

使用NAT进行PXE启动

NAT模式现在支持PXE启动。如果用户VirtualBox.xml文件所在的目录中存在TFTP目录,NAT DHCP服务器将提供形式为虚拟机名称.pxe的启动文件名。用户有责任提供虚拟机名称.pxe

NAT限制

NAT模式存在一些用户应注意的限制,如下所示

  • ICMP协议限制。一些常用的网络调试工具,例如pingtraceroute,依赖于ICMP协议发送和接收消息。Oracle VirtualBox的ICMP支持存在一些限制,这意味着ping应该可以工作,但其他一些工具可能无法可靠工作。

  • 接收UDP广播。访客机无法可靠地接收UDP广播。为了节省资源,它只在访客机向特定端口发送UDP数据后的一段时间内进行监听。因此,基于广播的NetBios名称解析并不总是有效,但WINS始终有效。作为一种解决方法,您可以使用\\服务器\共享表示法中的所需服务器的数字IP。

  • 不支持某些协议。除TCP和UDP之外的协议不受支持。不支持GRE。这意味着某些VPN产品,例如Microsoft的PPTP,无法使用。还有其他VPN产品仅使用TCP和UDP。

  • 转发低于1024的主机端口。在基于UNIX的主机(例如Linux、Oracle Solaris和macOS)上,非root用户运行的应用程序无法绑定到1024以下的端口。因此,如果您尝试配置此类端口转发,虚拟机将拒绝启动。

这些限制通常不影响标准网络使用。但是NAT的存在也带来了一些微妙的影响,可能会干扰正常工作的协议。一个例子是NFS,其中服务器通常配置为拒绝来自非特权端口(即1024以上的端口)的连接。

网络地址转换服务

网络地址转换 (NAT) 服务的工作方式类似于家用路由器,将使用它的系统分组到一个网络中,并阻止该网络外部的系统直接访问内部系统,但允许内部系统之间以及与外部系统使用IPv4和IPv6通过TCP和UDP进行通信。

NAT服务连接到一个内部网络。需要使用它的虚拟机应该连接到该内部网络。内部网络的名称在创建NAT服务时选择,如果内部网络不存在则会创建。以下是创建NAT网络的示例命令

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

这里,natnet1是要使用的内部网络的名称,192.168.15.0/24是NAT服务接口的网络地址和掩码。默认情况下,在此静态配置中,网关将被分配地址192.168.15.1,即接口地址之后的地址,尽管这可能会更改。要将DHCP服务器附加到内部网络,请按如下方式修改示例命令

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

要将DHCP服务器添加到现有网络,请使用以下命令

VBoxManage natnetwork modify --netname natnet1 --dhcp on

要禁用DHCP服务器,请使用以下命令

VBoxManage natnetwork modify --netname natnet1 --dhcp off

DHCP服务器提供已注册的名称服务器列表,但不映射来自127/8网络的服务器。

要启动NAT服务,请使用以下命令

VBoxManage natnetwork start --netname natnet1

如果网络附加了DHCP服务器,那么它将与NAT网络服务一起启动。

要停止NAT网络服务以及任何DHCP服务器

VBoxManage natnetwork stop --netname natnet1

要删除NAT网络服务

VBoxManage natnetwork remove --netname natnet1

如果内部网络上启用了DHCP服务器,此命令不会将其删除。

支持端口转发,IPv4使用--port-forward-4开关,IPv6使用--port-forward-6开关。例如

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

这会添加一条端口转发规则,将主机的TCP 1022端口转发到IP地址为192.168.15.5的访客机上的22端口。主机端口、访客端口和访客IP是强制性的。要删除该规则,请使用以下命令

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

可以将NAT服务绑定到指定的接口。例如

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

要查看已注册的NAT网络列表,请使用以下命令

VBoxManage list natnetworks

NAT网络也可以使用VirtualBox管理器中的“网络管理器”工具进行创建、删除和配置。点击文件工具网络管理器。参见网络管理器

注意

尽管NAT服务将虚拟机与主机分离,但虚拟机可以访问主机的回环接口及其上运行的网络服务。主机的回环接口可以通过IP地址10.0.2.2访问(假设是默认配置,在其他配置中,它是配置的IPv4或IPv6网络范围内的相应地址)。这种对主机回环接口的访问在某些情况下非常有用,例如在虚拟机中运行开发中的Web应用程序而数据库服务器在主机回环接口上时。要启用流量通过到主机的回环接口,请参见VBoxManage,NAT网络设置。

桥接网络

使用桥接网络,Oracle VirtualBox在您的主机系统上使用一个设备驱动程序来过滤来自物理网络适配器的数据。因此,此驱动程序称为网络过滤器驱动程序。这使得Oracle VirtualBox能够拦截物理网络中的数据并将其注入其中,从而在软件中有效地创建了一个新的网络接口。当访客机使用这种新的软件接口时,在主机系统看来,访客机似乎通过网线物理连接到该接口。主机可以通过该接口向访客机发送数据并从访客机接收数据。这意味着您可以在访客机和网络的其余部分之间设置路由或桥接。

注意

尽管Linux上不再需要TAP接口来实现桥接网络,但您仍然可以将TAP接口用于某些高级设置,因为您可以将虚拟机连接到任何主机接口。

要启用桥接网络,请打开虚拟机的设置对话框,转到网络页面,并在连接方式字段的下拉列表中选择桥接网络。从页面底部的列表中选择一个主机接口,该列表包含您系统的物理网络接口。例如,在典型的MacBook上,这将允许您在en1: AirPort(无线接口)和en0: Ethernet(代表有线网络接口)之间进行选择。

注意

桥接到无线接口与桥接到有线接口的方式不同,因为大多数无线适配器不支持混杂模式。所有流量都必须使用主机的无线适配器的MAC地址,因此Oracle VirtualBox需要替换传出数据包以太网头中的源MAC地址,以确保回复将发送到主机接口。Oracle VirtualBox在看到目标IP地址属于其中一个虚拟机适配器的传入数据包时,会将以太网头中的目标MAC地址替换为虚拟机适配器的MAC地址并将其转发。 Oracle VirtualBox检查ARP和DHCP数据包以了解虚拟机的IP地址。

根据您的主机操作系统,存在以下限制

  • macOS主机。当使用Mac的无线网络系统AirPort进行桥接网络时,功能受到限制。目前,Oracle VirtualBox仅支持通过AirPort进行IPv4和IPv6。对于其他协议,例如IPX,您必须选择有线接口。

  • Linux主机。当使用无线接口进行桥接网络时,功能受到限制。目前,Oracle VirtualBox仅支持通过无线进行IPv4和IPv6。对于其他协议,例如IPX,您必须选择有线接口。

    此外,在Marvell Yukon II EC Ultra Ethernet NIC上由sky2驱动程序提供的有线接口上将MTU设置为小于1500字节,在某些条件下已知会导致数据包丢失。

    某些适配器会在硬件中剥离VLAN标签。这不允许您在Linux内核2.6.27之前或非Linux主机操作系统上使用虚拟机和外部网络之间的VLAN中继。

  • Oracle Solaris主机。不支持使用无线接口。由于Oracle Solaris网络子系统的技术限制,使用IPFilter过滤访客流量也未完全支持。这些问题可能会在Oracle Solaris 11的后续版本中得到解决。

    在Oracle Solaris 11主机构建版本159及更高版本上,可以直接将Oracle Solaris Crossbow虚拟网络接口 (VNIC) 与Oracle VirtualBox一起使用,除了每个VNIC必须是每个访客网络接口独占的之外,无需任何额外配置。

    当在Oracle VirtualBox中使用VLAN接口时,它们必须按照PPA-hack命名方案命名,例如e1000g513001。否则,访客机可能会收到意外格式的数据包。

内部网络

内部网络类似于桥接网络,因为虚拟机可以直接与外部世界通信。然而,外部世界仅限于同一主机上连接到相同内部网络的其他虚拟机。

尽管从技术上讲,所有通过内部网络可以完成的事情也可以通过桥接网络完成,但内部网络具有安全优势。在桥接网络模式下,所有流量都通过主机系统的物理接口。因此,可以将Wireshark等数据包嗅探器连接到主机接口并记录所有经过它的流量。如果出于任何原因,您希望同一机器上的两个或更多虚拟机私下通信,将它们的数据对主机系统和用户隐藏,那么桥接网络就不是一个选择。

内部网络按需自动创建。没有中心配置。每个内部网络仅通过其名称标识。一旦有多个具有相同内部网络ID的活动虚拟网卡,Oracle VirtualBox支持驱动程序将自动连接这些网卡并充当网络交换机。Oracle VirtualBox支持驱动程序实现了完整的以太网交换机,并支持广播/多播帧和混杂模式。

为了将虚拟机的网卡连接到内部网络,请将其网络模式设置为内部网络。有两种方法可以实现此目的

  • VirtualBox管理器中使用虚拟机的设置窗口。在“设置”窗口的网络类别中,从网络模式下拉列表中选择内部网络。从下面的下拉列表中选择现有内部网络的名称,或者在名称字段中输入新名称。

  • 使用命令行,例如

    VBoxManage modifyvm "VM name" --nic<x> intnet

    (可选)您可以使用以下命令指定网络名称

    VBoxManage modifyvm "VM name" --intnet<x> "network name"

    如果您未指定网络名称,则网卡将默认连接到网络intnet

除非您配置参与内部网络的访客操作系统中的虚拟网卡使用静态IP地址,否则您可能希望使用内置于Oracle VirtualBox中的DHCP服务器来管理内部网络的IP地址。参见VBoxManage dhcpserver

作为一项安全措施,默认情况下,内部网络的Linux实现仅允许在相同用户ID下运行的虚拟机建立内部网络。但是,可以创建共享的内部网络接口,供具有不同用户ID的用户访问。

仅主机网络

仅主机网络可以被认为是桥接网络和内部网络模式的混合体。与桥接网络一样,虚拟机可以相互通信并与主机通信,就像它们通过物理以太网交换机连接一样。与内部网络一样,不需要存在物理网络接口,并且虚拟机无法与主机外部世界通信,因为它们未连接到物理网络接口。

当使用仅主机网络时,Oracle VirtualBox在主机上创建一个新的软件接口,该接口随后出现在您现有网络接口旁边。换句话说,桥接网络使用现有物理接口连接虚拟机,而仅主机网络则在主机上创建一个新的回环接口。此外,内部网络模式下虚拟机之间的流量无法被看到,而主机上回环接口上的流量可以被拦截。

注意

运行最新macOS版本的主机不支持仅主机适配器。这些适配器被仅主机网络取代,后者定义了网络掩码和IP地址范围,其中主机网络接口接收该范围内的最低地址。

每当虚拟机使用仅主机网络时,主机网络接口都会由操作系统动态添加和删除。

在macOS主机上,配置网络适配器时选择仅主机网络选项。仅主机适配器选项是为了旧版支持而提供的。

仅主机网络对于预配置的虚拟设备特别有用,其中多个虚拟机一起交付并设计为协同工作。例如,一台虚拟机可能包含一个Web服务器,另一台包含一个数据库,由于它们旨在相互通信,因此该设备可以指示Oracle VirtualBox为这两台虚拟机设置一个仅主机网络。然后,第二个桥接网络将Web服务器连接到外部世界以提供数据,但外部世界无法连接到数据库。

要为虚拟机启用仅主机网络接口,请执行以下任一操作

  • 转到虚拟机设置对话框中的网络页面,并选择适配器选项卡。确保选中启用网络适配器复选框,并在连接方式字段中选择仅主机适配器

  • 在命令行中,使用

    VBoxManage modifyvm 虚拟机名称 --nicN=hostonly --host-only-adapterN=接口名称.

    参见VBoxManage modifyvm

对于仅主机网络,与内部网络一样,您可能会发现内置于Oracle VirtualBox中的DHCP服务器很有用。此功能默认启用并管理仅主机网络中的IP地址。没有DHCP服务器,您将需要静态配置所有IP地址。

  • VirtualBox管理器中,您可以通过选择文件工具网络管理器来配置DHCP服务器。“网络管理器”窗口列出了当前正在使用的所有仅主机网络。选择网络名称,然后使用DHCP服务器选项卡配置DHCP服务器设置。参见网络管理器

  • 或者,您可以使用VBoxManage dhcpserver命令。参见VBoxManage dhcpserver

注意

在Linux和macOS主机上,仅主机接口的数量限制为128个。Oracle Solaris和Windows主机没有此限制。

在Linux、macOS和Solaris上,Oracle VirtualBox只允许将192.168.56.0/21范围内的IP地址分配给仅主机适配器。对于IPv6,只允许链路本地地址。如果需要其他范围,可以通过创建/etc/vbox/networks.conf并在其中指定允许的范围来启用。例如,要允许10.0.0.0/8和192.168.0.0/16 IPv4范围以及2001::/64范围,请将以下行放入/etc/vbox/networks.conf

      * 10.0.0.0/8 192.168.0.0/16
      * 2001::/64
      

以井号#开头的行将被忽略。以下示例允许任何地址,从而有效地禁用了范围控制

      * 0.0.0.0/0 ::/0
      

如果文件存在,但其中未指定任何范围,则不会将地址分配给仅主机适配器。以下示例有效地禁用了所有范围

      # No addresses are allowed for host-only adapters
      

UDP隧道网络

此网络模式使您能够互连在不同主机上运行的虚拟机。

从技术上讲,这是通过将访客网卡发送或接收的以太网帧封装到UDP/IP数据报中,并通过主机可用的任何网络发送它们来实现的。

UDP隧道模式具有以下参数

  • 源UDP端口:主机监听的端口。从任何源地址到达此端口的数据报将被转发到访客网卡的接收部分。

  • 目标地址:传输数据的目标主机的IP地址。

  • 目标UDP端口:传输数据发送到的端口号。

当互连两台不同主机上的两台虚拟机时,它们的IP地址必须交换。在单个主机上,源和目标UDP端口必须交换。

在以下示例中,主机1使用IP地址10.0.0.1,主机2使用IP地址10.0.0.2。要使用命令行进行配置

        VBoxManage modifyvm "VM 01 on host 1" --nic<x> generic
        VBoxManage modifyvm "VM 01 on host 1" --nic-generic-drv<x> UDPTunnel
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> dest=10.0.0.2
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> sport=10001
        VBoxManage modifyvm "VM 01 on host 1" --nic-property<x> dport=10002
        VBoxManage modifyvm "VM 02 on host 2" --nic<y> generic
        VBoxManage modifyvm "VM 02 on host 2" --nic-generic-drv<y> UDPTunnel
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> dest=10.0.0.1
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> sport=10002
        VBoxManage modifyvm "VM 02 on host 2" --nic-property<y> dport=10001

当然,您始终可以在同一主机上互连两台虚拟机,只需将两者的目标地址参数设置为127.0.0.1即可。在这种情况下,它将类似于内部网络。但是,主机可以看到网络流量,而这在正常的内部网络情况下是看不到的。

注意

在基于UNIX的主机(例如Linux、Oracle Solaris和Mac OS X)上,非root用户运行的应用程序无法绑定到1024以下的端口。因此,如果您尝试配置此类源UDP端口,虚拟机将拒绝启动。

VDE网络

虚拟分布式以太网 (VDE) 是一个灵活的虚拟网络基础设施系统,以安全的方式跨越多个主机。它支持L2/L3交换,包括生成树协议、VLAN和WAN仿真。它是Oracle VirtualBox的一个可选部分,仅包含在源代码中。

VDE是由意大利博洛尼亚大学副教授Renzo Davoli开发的一个项目。

该基础设施的基本组成部分是VDE交换机、VDE插头和连接交换机的VDE线路。

Oracle VirtualBox VDE驱动程序有一个单一参数:VDE网络。这是虚拟机将连接到的VDE网络交换机套接字的名称。

以下基本示例展示了如何将虚拟机连接到VDE交换机。

  1. 创建VDE交换机

    vde_switch -s /tmp/switch1
  2. 使用命令行配置虚拟机

    VBoxManage modifyvm "VM name" --nic<x> generic
    VBoxManage modifyvm "VM name" --nic-generic-drv<x> VDE

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

    VBoxManage modifyvm "VM name" --nic-property<x> network=/tmp/switch1

    连接到特定交换机端口n

    VBoxManage modifyvm "VM name" --nic-property<x> network=/tmp/switch1[<n>]

    此命令对VLAN可能很有用。

  3. (可选)VDE交换机端口与VLAN之间的映射。

    使用交换机命令行

    vde$ vlan/create <VLAN>
    vde$ port/setvlan <port> <VLAN>

VDE仅适用于Linux和FreeBSD主机。它仅在主机系统上安装了VirtualSquare项目的VDE软件和VDE插件库时才可用。

注意

对于Linux主机,共享库libvdeplug.so必须在共享库的搜索路径中可用。

有关设置VDE网络的更多信息,请参阅随软件附带的文档。另请参见http://wiki.virtualsquare.org

云网络

云网络可用于将本地虚拟机连接到远程Oracle Cloud Infrastructure实例上的子网。有关如何使用VirtualBox管理器中的“网络管理器”工具创建和配置云网络的详细信息,请参见云网络选项卡

要为虚拟机启用云网络接口,请执行以下任一操作

  • 转到虚拟机设置对话框中的网络页面,并选择适配器选项卡。确保选中启用网络适配器复选框,并在连接方式字段中选择云网络

  • 在命令行中,使用VBoxManage modifyvm 虚拟机名称 --nic x cloud。参见VBoxManage modifyvm

网络管理器

VirtualBox管理器中的网络管理器工具使您能够创建、删除和配置Oracle VirtualBox使用的以下类型的网络

要显示“网络管理器”,请转到全局工具菜单,然后点击网络

仅主机网络选项卡

“网络管理器”中的“仅主机网络”选项卡列出了当前正在使用的所有仅主机网络。

  • 点击创建以向列表添加新的仅主机网络。

  • 点击移除以从列表中移除仅主机网络。

  • 点击属性以显示或隐藏所选仅主机网络的设置。

要配置仅主机网络,请在名称字段中选择网络名称,并执行以下操作

  • 使用适配器选项卡配置仅主机网络的网络适配器。

  • 使用DHCP服务器选项卡配置仅主机网络使用的DHCP服务器设置。DHCP服务器内置于Oracle VirtualBox中,并自动管理网络的IP地址。

NAT网络选项卡

“网络管理器”中的“NAT网络”选项卡列出了当前正在使用的所有NAT网络。

  • 点击创建以向列表添加新的NAT网络。

  • 点击移除以从列表中移除NAT网络。

  • 点击属性以显示或隐藏所选NAT网络的设置。

要配置NAT网络,请在名称字段中选择网络名称,并执行以下操作

  • 使用常规选项选项卡配置NAT网络使用的网络设置。例如,NAT服务接口的网络地址和掩码。

  • 使用端口转发选项卡配置NAT网络使用的端口转发规则。

云网络选项卡

“网络管理器”中的“云网络”选项卡列出了当前正在使用的所有云网络。

  • 点击创建以向列表添加新的云网络。

  • 点击移除以从列表中移除云网络。

  • 点击属性以显示或隐藏所选云网络的设置。

要配置云网络,请在名称字段中选择网络名称并指定以下内容

  • 名称:用于云网络的名称。

  • 提供商:云服务提供商,例如Oracle Cloud Infrastructure

  • 配置文件:用于连接云网络的云配置文件。

  • ID:云隧道网络的OCID。点击网络图标以查看Oracle Cloud Infrastructure上可用于隧道流量的子网。

    有关如何使用VBoxManage cloud命令在Oracle Cloud Infrastructure上创建和配置虚拟云网络 (VCN) 的详细信息,请参见使用云网络

限制网络输入/输出带宽

Oracle VirtualBox支持限制网络传输的最大带宽。一个虚拟机的多个网络适配器可以通过带宽组共享限制。可以存在多个此类限制。

注意

Oracle VirtualBox仅在传输方向上整形虚拟机流量,延迟虚拟机发送的数据包。它不限制虚拟机接收的流量。

限制通过VBoxManage配置。以下示例创建一个名为Limit的带宽组,将限制设置为20 Mbps,并将该组分配给虚拟机的第一个和第二个适配器

VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m
VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit
VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit

组中的所有适配器共享带宽限制,这意味着在上述示例中,两个适配器的组合带宽永远不能超过20 Mbps。但是,如果一个适配器不需要带宽,另一个适配器可以使用其组的剩余带宽。

每个组的限制可以在虚拟机运行时更改,更改会立即生效。以下示例将上一个示例中创建的组的限制更改为100 Kbps

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

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

VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none

在虚拟机运行时,也可以通过为带宽组指定零限制来禁用分配给该组的所有适配器的整形。例如,对于名为Limit的带宽组

VBoxManage bandwidthctl "VM name" set Limit --limit 0

提高网络性能

Oracle VirtualBox提供了各种虚拟网络适配器,它们可以通过多种方式连接到主机网络。根据所使用的适配器和连接类型,网络性能会有所不同。在性能方面,virtio网络适配器优于Intel PRO/1000仿真适配器,后者又优于PCNet系列适配器。virtio和Intel PRO/1000适配器都受益于分段和校验和卸载。分段卸载对于高性能至关重要,因为它允许更少的上下文切换,从而显着增加跨虚拟机/主机边界的数据包大小。

注意

Windows XP的virtio和Intel PRO/1000驱动程序都不支持分段卸载。因此,Windows XP访客机永远无法达到其他访客类型相同的传输速率。有关更多信息,请参阅MS知识库文章842264。

三种连接类型:内部、桥接和仅主机,性能几乎相同。内部类型稍快,并且使用更少的CPU周期,因为数据包永远不会到达主机的网络堆栈。NAT连接类型是所有连接类型中最慢且最安全的,因为它提供网络地址转换。通用驱动程序连接是特殊的,不能被视为其他连接类型的替代品。

分配给虚拟机的CPU数量不会提高网络性能,在某些情况下,由于访客机内并发性的增加,反而可能会损害网络性能。

以下是提高网络性能需要检查的简要总结

  • 尽可能使用virtio网络适配器。否则,请使用Intel PRO/1000适配器之一。

  • 使用桥接连接而不是NAT。

  • 确保访客操作系统中启用了分段卸载。通常它会默认启用。您可以使用Linux访客机上的ethtool命令检查和修改卸载设置。

  • 使用Wireshark等第三方工具对虚拟机的网络适配器上的网络流量进行全面详细分析。为此,需要在虚拟机的网络适配器上使用混杂模式策略。此模式仅适用于以下网络类型:NAT网络、桥接适配器、内部网络和仅主机适配器。

    要设置混杂模式策略,可以从网络适配器网络设置对话框中的下拉列表中选择,或使用命令行工具VBoxManage。参见VBoxManage modifyvm

    混杂模式策略如下

    • deny,它隐藏了并非针对虚拟机网络适配器的任何流量。这是默认设置。

    • allow-vms,它隐藏了虚拟机网络适配器上的所有主机流量,但允许其查看来自其他虚拟机和发往其他虚拟机的流量。

    • allow-all,它移除了所有限制。虚拟机的网络适配器可以看到所有流量。