第 6 章. 虚拟网络

目录

6.1. 虚拟网络硬件
6.2. 网络模式简介
6.3. 网络地址转换 (NAT)
6.3.1. 配置 NAT 端口转发
6.3.2. NAT 模式下的 PXE 引导
6.3.3. NAT 限制
6.4. 网络地址转换服务
6.5. 桥接网络
6.6. 内部网络
6.7. 仅主机网络
6.8. UDP 隧道网络
6.9. VDE 网络
6.10. 云网络
6.11. 网络管理器
6.11.1. 仅主机网络选项卡
6.11.2. NAT 网络选项卡
6.11.3. 云网络选项卡
6.12. 限制网络输入/输出带宽
6.13. 提升网络性能

3.9节“网络设置”所述,Oracle VM VirtualBox 为每台虚拟机提供最多八个虚拟PCI以太网卡。对于每张此类网卡,您可以单独选择以下各项

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

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

6.1. 虚拟网络硬件

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

  • AMD PCNet PCI II (Am79C970A)

  • AMD PCNet FAST III (Am79C973),默认设置

  • 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 VM VirtualBox 虚拟化常见客户机操作系统支持的通用网络硬件。相反,Oracle VM VirtualBox 期望客户机提供针对虚拟化环境的特殊软件接口,从而避免了模拟网络硬件的复杂性并提高了网络性能。Oracle VM VirtualBox 支持行业标准virtio网络驱动程序,这些驱动程序是开源 KVM 项目的一部分。

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

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

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

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

Oracle VM VirtualBox 还对巨型帧提供有限支持。巨型帧是数据量超过 1500 字节的网络数据包,前提是您使用 Intel 网卡虚拟化和桥接网络。AMD 网络设备不支持巨型帧。在这些情况下,巨型数据包将在传输和接收方向上静默丢弃。尝试使用此功能的客户机操作系统会将其视为数据包丢失,这可能导致客户机中出现意外的应用程序行为。这不会导致客户机操作系统在默认配置下出现问题,因为巨型帧需要明确启用。

6.2. 网络模式简介

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

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

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

  • NAT 网络。NAT 网络是一种允许出站连接的内部网络类型。请参阅6.4节“网络地址转换服务”

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

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

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

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

  • 通用网络。很少使用的模式,它们共享相同的通用网络接口,允许用户选择一个可以包含在 Oracle VM VirtualBox 中或作为扩展包分发的驱动程序。

    以下子模式可用

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

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

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

表 6.1. 网络模式概述

模式

虚拟机→主机

虚拟机←主机

虚拟机1↔虚拟机2

虚拟机→网络/局域网

虚拟机←网络/局域网

仅主机

+

+

+

内部

+

桥接

+

+

+

+

+

NAT

+

端口转发

+

端口转发

NAT服务

+

端口转发

+

+

端口转发

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

6.3. 网络地址转换 (NAT)

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

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

NAT 模式的缺点是,就像路由器后面的私有网络一样,虚拟机在外部互联网上是不可见的且无法访问的。您无法以这种方式运行服务器,除非您设置端口转发。请参阅6.3.1节“配置 NAT 端口转发”

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

注意

尽管 NAT 引擎将 VM 与主机分离,但 VM 可以访问主机的环回接口及其上运行的网络服务。主机的环回接口可通过 IP 地址 10.0.2.2 访问。在某些情况下,访问主机的环回接口会非常有用,例如,在 VM 中运行开发中的 Web 应用程序,而数据库服务器在主机的环回接口上运行。

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

6.3.1. 配置 NAT 端口转发

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

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

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

或者,可以使用命令行工具VBoxManage。请参阅8.10节“VBoxManage modifyvm”

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

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。

在 VM 运行时配置传入的 NAT 连接是可能的,请参阅8.20节“VBoxManage controlvm”

6.3.2. NAT 模式下的 PXE 引导

NAT 模式现在支持 PXE 引导。如果用户VirtualBox.xml文件所在的目录中存在TFTP目录,NAT DHCP 服务器会提供形如vmname.pxe的引导文件名。用户有责任提供vmname.pxe

6.3.3. NAT 限制

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

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

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

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

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

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

6.4. 网络地址转换服务

网络地址转换 (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

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

注意

尽管 NAT 服务将 VM 与主机分离,但 VM 可以访问主机的环回接口及其上运行的网络服务。主机的环回接口可通过 IP 地址 10.0.2.2 访问(假定默认配置,在其他配置中是配置的 IPv4 或 IPv6 网络范围中的相应地址)。在某些情况下,访问主机的环回接口会非常有用,例如,在 VM 中运行开发中的 Web 应用程序,而数据库服务器在主机的环回接口上运行。

6.5. 桥接网络

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

注意

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

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

注意

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

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

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

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

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

    某些适配器在硬件中剥离 VLAN 标签。这使得您无法在使用 2.6.27 之前的 Linux 内核或非 Linux 主机操作系统时,在 VM 和外部网络之间使用 VLAN 中继。

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

    在 Oracle Solaris 11 版本 159 及以上的主机上,可以直接将 Oracle Solaris Crossbow 虚拟网络接口 (VNIC) 与 Oracle VM VirtualBox 配合使用,无需额外配置,只需确保每个 VNIC 专用于每个客户机网络接口即可。

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

6.6. 内部网络

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

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

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

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

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

  • 使用命令行,例如

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

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

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

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

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

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

6.7. 仅主机网络

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

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

注意

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

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

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

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

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

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

  • 在命令行中,使用VBoxManage modifyvm vmname --nicx hostonly。请参阅8.10节“VBoxManage modifyvm”

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

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

  • 或者,您可以使用VBoxManage dhcpserver命令。请参阅8.50节“VBoxManage dhcpserver”

注意

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

在 Linux、macOS 和 Solaris 上,Oracle VM 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
      

6.8. 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 端口,虚拟机将拒绝启动。

6.9. VDE 网络

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

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

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

Oracle VM 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

6.10. 云网络

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

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

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

  • 在命令行中,使用VBoxManage modifyvm vmname --nicx cloud。请参阅8.10节“VBoxManage modifyvm”

6.11. 网络管理器

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

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

6.11.1. 仅主机网络选项卡

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

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

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

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

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

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

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

6.11.2. NAT 网络选项卡

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

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

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

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

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

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

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

6.11.3. 云网络选项卡

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

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

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

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

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

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

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

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

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

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

6.12. 限制网络输入/输出带宽

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

注意

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

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

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

6.13. 提升网络性能

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

注意

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

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

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

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

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

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

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

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

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

    混杂模式策略如下

    • deny,它会隐藏不适用于 VM 网络适配器的任何流量。这是默认设置。

    • allow-vms,它会隐藏所有主机流量,使其不被 VM 的网络适配器看到,但允许它查看来自其他 VM 和发送给其他 VM 的流量。

    • allow-all,它移除所有限制。VM 的网络适配器会看到所有流量。