引言:近期在 macbook pro m1 下研究通过 Vagrant 配置 Vmware、Virtualbox 虚拟机搭建 K8S 集群的问题,碰到虚拟机的网络设置,有许多概念性的东西会困扰到集群网络的搭建,在参考文章的过程碰到一片较好的英文 blog 文章,详细介绍了虚拟机网络的配置,可惜是英文,索性翻译过来供大家参考。
在现代商业世界中,网络是交互式计算机操作的一个重要组成部分。很难想象,在这个变化速度越来越快的世界里,没有网络,如何在计算机之间交换数据。硬件虚拟化背后的核心思想之一是在所有可以使用物理计算机的场景下使用虚拟机。因此,虚拟机必须能够使用虚拟网络适配器连接到物理和虚拟网络。
在 VirtualBox 上运行的虚拟机可以连接到不同的网络。VirtualBox 为虚拟机提供了多种网络模式。今天的博文涉及 VirtualBox 网络设置,帮助你以最佳方式配 VirtualBox,以满足你的需求。 下面我们将讨论并比较以下这些 VirualBox 的网络模式:
- Not Attached
- NAT
- NAT 网络 3、
- 桥接适配器
- Internal 网络
- Host-Only 适配器
- 通用驱动
一、虚拟网络适配器
每个 VirtualBox 虚拟机最多可以使用 8 个虚拟网络适配器,每个适配器又被称为网络接口控制器(NIC)。4 个虚拟网络适配器可以在 VirtualBox GUI(图形用户界面)中进行配置。所有的虚拟网络适配器(最多 8 个)都可以用 VBoxManage modifyvm 命令进行配置。VBoxManage 是 VirtualBox 的一个命令行管理工具,可用于配置所有 VirtualBox 设置,包括 VirtualBox 网络设置。可以在虚拟机设置中访问 VirtualBox 网络适配器设置(选择你的虚拟机,点击设置,在虚拟机设置窗口中进入网络部分)。 如上图,你应该看到 4 个适配器页签。在虚拟机创建后,默认情况下会启用一个虚拟网络适配器。你可以勾选 \"启用网络适配器 \"复选框来启用适配器,不勾选复选框来禁用它(这个复选框定义了虚拟网络适配器设备是否连接到虚拟机上)。点击 \"高级\",展开高级 VirtualBox 网络适配器设置。
二、VirtualBox 中的虚拟网络适配器的类型
一个虚拟网络适配器是一个软件模拟的物理设备,有 6 种虚拟适配器类型可以通过 VirtualBox 进行虚拟化:
1、AMD PCnet-PCI II(Am79C970A)。这种网络适配器是基于 AMD 芯片的,可以在很多情况下使用。对于 Windows 用户,这种网络适配器可以用于旧版本的 Windows 系统(如 Windows 2000),因为较新的 Windows 版本,如 Windows 7、8 和 10 不包含这种适配器的内置驱动程序。最初,Am79C970A PCI 设备包含一个单芯片 10-Mbit 控制器,并集成了 DMA 引擎。这个网络适配器还支持 AMD 的 Magic Packet 技术,用于远程唤醒。
2、AMD PCnet-FAST III(Am79C973)。这个虚拟化的网络适配器被几乎所有可以在 VirtualBox 上运行的操作系统所支持。GRUB(启动加载器)可以使用这个适配器进行网络启动。与上述的网络适配器类似,这个适配器也是基于 AMD 芯片。
3、英特尔 PRO/1000 MT 桌面(82540EM)。这个适配器可以与 Windows Vista 和较新的 Windows 版本完美配合。大多数的 Linux 发行版也支持这个适配器。
4、英特尔 PRO/1000 T 服务器(82543GC)。Windows XP 无需安装额外的驱动程序就能识别该适配器。
5、英特尔 PRO/1000 MT 服务器(82545EM)。这个适配器模型对于从其他平台导入 OVF 模板很有用,可以加速导入过程。
6、Paravirtualized 网络适配器(virtio-net)是一个特殊情况。客户操作系统必须为虚拟化环境提供一个特殊的软件接口,而不是将大多数操作系统支持的网络硬件虚拟化。这种方法允许你避免网络硬件仿真的复杂性,因此可以提高网络性能。 VirtualBox 支持行业标准的 virtIO 网络驱动。VirtIO 网络驱动是 KVM 项目的一部分,是开源的。这些驱动程序可用于内核为 2.6.25 或更高版本的 Linux,以及包括 Windows 2000、XP 和 Vista 等旧版本的 Windows。
巨型帧(Jumbo frames)
支持 VirtualBox 对巨型帧(可以携带大小超过 1500 字节的数据包的以太网帧)提供有限的支持。如果你需要使用巨型帧,请选择一个英特尔的虚拟网络适配器,并将该适配器配置为桥接模式工作。基于 AMD 的虚拟网络适配器不支持 Jumbo 帧。如果你试图为基于 AMD 的虚拟网络适配器启用巨量帧,巨量帧的输入和输出流量将被无声地放弃。默认情况下,巨型帧是禁用的。
三、VirtualBox 的网络模式
VirtualBox 提供了一长串的网络模式可供选择,这是 VirtualBox 网络设置中最有趣的特性之一。每个虚拟网络适配器都可以单独 frames 配置为在不同的网络模式下运行。例如,你可以为适配器 1 设置 NAT 模式,为适配器 2 设置 Host-Only 模式。你可以在下拉菜单中选择网络模式,如下图: 让 我来详细看看每一种 VirtualBox 的网络模式。
1、无连接模型(Not attached)
在虚拟机中安装了一个虚拟网络适配器,但网络连接不见了,很像你在使用物理网络适配器时拔掉以太网网线。这种模式对测试很有用。例如,你可以在短时间内启用这种网络模式以模拟拔掉网线的情况。当你禁用 \"Not Attached \"模式切换到另一种网络模式时,网络连接又变得可用。你还可以检查 DHCP 客户端是否能正确获得 IP 地址,应用程序是否能在连接中断或丢包后恢复下载,等等。
除了使用 \"Not Attached \"网络模式外,你也可以使用任何其他网络模式,并使用勾选 \"电缆连接 \"复选框的方式模拟\"Not Attached \"网络模式的效果。当虚拟机处于运行状态时,你可以勾选/不勾选该复选框(见上面的屏幕截图)就可以达到类似\"Not Attached \"网络模式的效果。不要忘记点击 \"确定 \"来使虚拟机网络配置的生效。
2、NAT
这种网络模式是虚拟网络适配器的默认启用模式。虚拟机上的操作系统可以通过使用虚拟 NAT(网络地址转换)设备访问物理局域网(LAN)中的宿主机。虚拟机上的操作系统也可以访问外部网络,包括互联网。当 VirtualBox 网络使用 NAT 网络模式的时候,宿主机或其所在局域网的其他服务器不能直接访问虚拟机。这种默认的网络模式对于只使用虚拟机访问互联网的用户来说是足够的。虚拟机网络适配器的 IP 地址是通过 DHCP 获得的,在这种网络模式下使用的网络 IP 地址不能在 GUI 中改变。 VirtualBox 有一个内置的 DHCP 服务器和 NAT 引擎。一个虚拟 NAT 设备使 VirtualBox 宿主机的物理网络适配器作为外部网络接口。在 NAT 模式下使用的虚拟 DHCP 服务器的默认地址是 10.0.2.2(这也是虚拟机的默认网关 IP 地址)。网络掩码是 255.255.255.0。如果您将 2 个或多个虚拟机的网络适配器配置为使用 NAT 模式,每个虚拟机将在一个隔离网络的虚拟 NAT 设备后获得一个 10.0.2.15 的 IP 地址。每个虚拟机的默认网关是 10.0.2.2。在 VirtualBox 中,当使用 NAT 模式时,多个虚拟机的 IP 地址相同,如下图: 在 VBoxManage 中打开虚拟机的 NAT 模式可以执行如下命令:
VBoxManage modifyvm VM_name –nic1 nat
这里,VM_name 是虚拟机的名称,nic1 是虚拟网络适配器的号码,nat 是你设定的 VirtualBox 网络模式。
端口转发可以在 VirtualBox 虚拟机网络设置窗口中通过点击端口转发按钮进行配置(见上面的截图)。关于在 VirtualBox 网络设置中配置端口转发的详细信息,你可以在下面的网络模式部分之后找到。
3、NAT 网络
这种模式类似于你用于配置路由器的 NAT 模式。如果你对多个虚拟机使用 NAT 网络模式,它们可以通过网络相互通信。虚拟机可以访问物理网络中的其他主机,也可以访问外部网络,包括互联网。任何来自外部网络的机器以及宿主机所连接的物理局域网的机器都不能访问被配置为使用 NAT 网络模式的虚拟机(类似于你配置路由器从家庭网络访问互联网时的情况)。
使用 NAT 网络模式时,你不能从宿主机访问客机(除非你在全局 VirtualBox 网络设置中配置了端口转发)。一个内置的 VirtualBox NAT 路由器使用 VirtualBox 主机的物理网络接口控制器作为外部网络接口(和 NAT 模式一样)。
NAT 网络的默认地址是 10.0.2.0/24。默认的网关 IP 地址是 10.0.2.1(x.x.x.1 的 ip 模版通常被用于设置默认网关 IP),比如,如果你在 virtualbox 中配置了基于 NAT 网络模式的虚拟网络,设置了 192.168.22.0/24 的网络地址,则这个网络的网关地址会是 192.168.22.1。
在 NAT 网络模式下,你不能改变网关的 IP 地址,也不能改变由 DHCP 服务器分配的 IP 地址范围。类似的,DHCP 服务器的 IP 地址默认是 10.0.2.3(使用 x.x.x.3 的模版)。下面是一个运行在 virtualbox 中基于 win7 系统的虚拟机的 NAT 网络模式下 IP 地址的配置情况: 如果你不想使用 virtualbox 的 GUI 界面编辑网络设置,你可以通过以下命令增加一个新的 NAT 网络:
VBoxManage natnetwork add –netname natnet1 –network “192.168.22.0/24” –enable
这里 natnet1 是 NAT 网络的名称,192.168.22.0/24 是 NAT 网络的地址。
如果你想配置虚拟机网络适配器以便能通过 VBoxManage 使用 NAT 网络模式,可以运行以下命令:
VBoxManage modifyvm VM_name –nic1 natnetwork
这里 nic1 是第一个虚拟网络适配器(网络控制接口),natnetwork 是 VirtualBox 网络模式的名称,VirtualBox 网络模式的名称选项有:none, null, nat, natnetwork, bridged, intnet, hostonly, generic。应用这些设置前需要先关闭虚拟机。
端口转发是另外一个可以从这个窗口访问和配置的选项。端口转发可以用来配置从宿主机以及与宿主机同一物理网络的其他主机访问虚拟机内操作系统上运行的服务的路径(详见下文)。
正如你所看到的,在 VirtualBox GUI 中,NAT 模式和 NAT 网络模式的端口转发设置的位置是不同的。NAT 模式的端口转发设置在 VM > 设置 > 网络中可用,而 NAT 网络模式的端口转发设置可以在文件 > 首选项 > 网络中配置。这是因为 NAT 模式的端口转发规则对每个虚拟机来说是单独的,而 NAT 网络模式的端口转发规则对多个虚拟机来说是共同的,这些虚拟机的适配器都连接到相应的 NAT 网络。请参阅下面的 \"端口转发 \"部分中关于配置端口转发的详细信息。
4、桥接适配器
该模式用于将虚拟机的虚拟网络适配器与 VirtualBox 主机的物理网络适配器相连。虚拟机的虚拟网络适配器使用主机网络接口进行网络连接。简单地说,虚拟网络适配器直接发送或接收网络数据包,不使用额外的路由。
桥接网络模式使用一个特殊的网络过滤器驱动程序,以过滤来自主机的物理网络适配器的数据。这种网络模式下,宿主机所在的物理本地局域网的服务器都能独立对等地访问跑在虚拟机上的服务器。
在 VirtualBox 中使用桥接网络模式时,你可以从虚拟机访问宿主机、宿主机所在物理网络的其他主机以及外部网络,包括互联网。虚拟机也可以被同一物理局域网中的宿主机以及其他主机(或虚拟机)所访问。如果你在宿主机上有多个物理网络适配器,你应该在 VirtualBox 网络设置中选择正确的适配器。
在下面的截图中,你可以看到两个物理网络适配器–以太网适配器和 Wi-Fi 适配器。如果你对无线网络适配器使用桥接模式,你就不能在虚拟机操作系统中使用该 Wi-Fi 适配器的底层特性。例如,你不能选择要连接的 Wi-Fi 网络,启用监控模式等。相反,你需要连接到宿主机上的 Wi-Fi 网络。如果你必须在虚拟机的客户操作系统中使用 Wi-Fi 适配器的所有功能,请使用 USB Wi-Fi 适配器和 USB Pass-through 功能,详细说明见 Kali Linux 的博文。 在 VirtualBox 中,使用桥接模式时,虚拟机的虚拟网络适配器的 IP 地址可以与宿主机的物理网络适配器的 IP 地址属于同一个网段。如果物理网络中有 DHCP 服务器,虚拟机的虚拟网络适配器将在桥接模式下自动获得 IP 地址(如果在虚拟机操作系统的网络接口设置中设置了自动获得 IP 地址)。因此,在桥接模式下运行的虚拟网络适配器的默认网关与主机的默认网关相同。让我们看看一个有 IP 地址的简单例子。
- 物理网络的地址段是:10.10.10.0
- 物理网络的默认网关 IP 地址是:10.10.10.1
- DHCP 服务器的 IP 地址是:10.10.10.1
- 宿主机的 IP 地址配置是:IP 地址:10.10.10.72;子网掩码:255.255.255.0;默认网关:10.10.10.1
- 虚拟机的 IP 地址配置是:IP 地址:10.10.10.91;子网掩码:255.255.255.0;默认网关:10.10.10.1
有时你可能发现物理网络中有多个网关。你可以通过一个网关将宿主机接入某个必要的网络,然后使用另一个网关将虚拟机接入其他的网络。你也可以修改虚拟机的路由表,使用两个网关接入到合适的网络。正如你所见,桥接网络模式是 Virtualbox 网络设置中非常强大的选项,可以应用在许多的场景下。
混杂模式。这种模式允许网络适配器中转所有接收到的流量,无论流量是寻址哪个适配器的。在正常模式下,网络适配器只接收包括该特定网络适配器的 MAC 地址作为目标地址的帧。在正常模式下,被寻址到与所选适配卡的 MAC 地址不同的 MAC 地址的帧(当流量不是广播时)会被丢弃。混杂模式使一个物理网络适配器有多个 MAC 地址成为可能,允许所有传入的流量通过主机的物理网络适配器,到达虚拟机的虚拟网络适配器,该虚拟机有自己的 MAC 地址,并被认为是宿主机物理适配器上的另一个 mac 地址,即使该流量并不是寻址该特定虚拟机的虚拟网络适配器。
大多数无线网络适配器不支持混杂模式。与 Wi-Fi 适配器的桥接是通过以下方式完成的–VirtualBox 在必须传送到虚拟机的虚拟网络适配器的以太网帧头中替换了适当的 MAC 地址(该流量必须使用主机 Wi-Fi 适配器的 MAC 地址)。混杂模式对网络测试和安全审计很有用。你可以在 VirtualBox 网络设置中启用混杂模式,并用嗅探器监测网络流量。使用混杂模式有三个选项:
1、Deny。
任何不以虚拟机的虚拟网卡为目的地的流量都将被屏蔽。这个选项是默认设置。
2、Allow VMs。
除了去向或来自于虚拟机的流量,其他流量都将被屏蔽。
3、Allow ALL。
这一模式下没有限制,虚拟机的网卡可以看到所有进来、出去的流量。混杂模式不仅可以用于桥接网络模式,也可以用于 NAT 网络模式,Internal 网络模式和 Host-only 适配器模式。
5、Internal Network
VirtualBox 中的虚拟机网卡被配置成 Internal network 模式的时候,他们会被接入一个隔离的虚拟网络。在这个隔离的虚拟网络中,虚拟机之间可以互相通信,但是他们不能和 Virtualbox 中的宿主机通信,不能和宿主机所在的局域网中的其他主机通信,也不能外部网络通信。宿主机或其他设备可以访问接入到 Internal Network 中的虚拟机。Virtualbox 中的 Internal network 可以用来模拟真实网络。
例如,你可以创建 3 个虚拟机,每个虚拟机都有一个连接到 internal network 的虚拟网络适配器(适配器 1)。这些网络适配器的 IP 地址是被定义为 VirtualBox internal network 的子网中的 IP(你应该手动定义子网)。其中一个虚拟机(VM1)也有 2 个虚拟网络适配器,第 2 个网络适配器被配置为在 NAT 模式下运行。VM1 虚拟机被配置为一个路由器(创建路由器的最佳解决方案之一是安装 Linux 和配置 IPTABLES,但在 VirtualBox 网络测试的情况下,第一次可以使用更简单的路由解决方案)。如果 VM1 运行 internal network 模式下的网络适配器的 IP 地址在 VM2 和 VM3 的网络设置中被设置为网关, 那么 VM2 和 VM3 就可以访问外部网络。这个例子的网络配置如下:
VM1:IP 地址-192.168.23.1(internal network 模式);10.0.2.15(NAT 模式);网关 10.0.2.2(Virtualbox 内置 NAT 设备的 IP 地址)
VM2:IP 地址:192.168.23.2(internal network),网关-192.168.23.1VM3:IP 地址:192.168.23.3(internal network),网关-192.168.23.1
VirtualBox internal network 子网设置:192.168.23.0
详见下图: 注意:您也可以部署这样的虚拟基础设施来进行防火墙规则测试,但在连接外部网络时,更好的方案是为 VM1 的第 2 个虚拟网络适配器设置桥接模式而不是 NAT 模式。6、Host-only Adapter
这种网络模式用于在宿主机和虚拟机之间进行通信。一个虚拟机可以与连接到 host-only 网络的其他虚拟机通信,也可以与宿主机通信。VirtualBox 宿主机可以访问所有连接到 host-only 网络的虚拟机。 虚拟机的虚拟网络适配器在其 IP 配置中没有网关,因为 host-only 模式不允许你连接到 host-only 网络以外的任何设备。也可以创建 1 个以上的 VirtualBox host-only 网络适配器,以便使用不同的 host-only 网络–只需按下“创建”按钮即可。如果不再需要 host-only 网络,只需选择适配器并点击删除即可。
7、Generic Driver
这种网络模式允许你共享通用网络接口,用户可以选择一个扩展包中分发的或 VirtualBox 自带的合适的驱动。
Generic Driver 模式有两个可用的子模式:UDP 隧道和 VDE(虚拟分布式以太网)网络。
UDP 隧道。运行在不同宿主机上的虚拟机可以通过使用现有的网络基础设施进行透明的通信。
VDE 网络。虚拟机可以连接到 Linux 或 FreeBSD 主机上的虚拟分布式交换机。你需要从源代码编译 VirtualBox 来使用 VDE 网络,因为标准的 VirtualBox 包不包括这个功能。
8、VirtualBox 网络模式比较
为了方便,我们使用下边对 Virtualbox 支持的各网络模式进行了一个汇总总结: 9、端口转发
端口转发是将寻址向某个 IP 地址和端口的流量转发到另一个不同的 IP 地址和端口的处理操作。服务器和其他路由设备上可以使用专门应用程序来实现端口转发。端口转发最常用的一个应用场景是为隐藏在 NAT 后边的特定的网络设备提供外部网络访问入口。
配置完端口转发规则后,客户端可以通过连接路由器(或主机)外部 IP 地址和专用端口来访问特定的服务。网络包会首先被路由器上的一个应用程序所截获,然后这个应用程序会读取网络包头中的目的 IP 地址和端口号(IP 包头,含有 TCP 或 UDP 段的包头)。如果包头中目的 IP 地址和端口号的组合能与端口转发规则集合中的某个条件匹配上,路由器程序就会重写包头中的信息(IP 地址和/或端口号),并根据端口转发规则将包/段发送给另一个网络接口。
默认情况下,VirtualBox 宿主机和其他局域网中的主机不能访问网络适配器被设置成 NAT 或 NAT Network 模式的 VirtualBox 虚拟机,但是 VirutalBox 提供了内置的端口转发特性支持了这种类型的访问。
四、Example 1 – SSH
访问现在让我们考虑配置连接到 VirtualBox 虚拟机的端口转发的示例,使用的例子是连接到运行在 Ubuntu Linux 虚拟机上的 SSH 服务器,该虚拟机通过 NAT 模式连接到网络。你可以在这篇博文中阅读如何在 VirtualBox 上安装 Ubuntu。(https://www.nakivo.com/blog/install-ubuntu-on-virtualbox-virtual-machine/)
输入数据:
宿主机 IP 地址:10.10.10.72(一个物理的 NIC)
Ubuntu 虚拟机 IP 地址:10.0.2.15(NAT 模式)
用户名称:user1
1、在 Ubuntu 虚拟机上安装 SSH 服务器 apt-get install openssh-server
2、编辑 SSH 服务器配置文件 vim /etc/ssh/sshd_config
3、去掉下边语句的注释,打开使用密码认证的功能 PasswordAuthentication yes
4、重启 SSH 进程服务/etc/init.d/ssh restart
5、确认 SSH 服务器正常工作并尝试从 localhost(Ubuntu 虚拟机)连接到 SSH 服务器
6、如果一切顺利,你就可以开始在 virtualbox 中配置端口转发了正如你所记得的,你应该打开虚拟机设置,选择网络部分。选择被配置为在 NAT 模式下工作的虚拟网络适配器,展开高级设置,点击端口转发按钮。点击 \"+\"图标,在虚拟机的 VirtualBox 网络设置中添加一个新的端口转发规则,如下图: 在你的 virtualbox 宿主机或同一局域网的其他主机上打开一个 SSH 客户端,连接到你的 virtualbox 宿主机 IP 的 8022 端口,你就可以访问 virtualbox 上的虚拟机了。
五、Example 2 – HTTP access
如果你想在你的虚拟机上部署一个 Web 服务器,并提供从外部访问你的网站,你可以添加另一个端口转发规则。让我们考虑如何配置该端口转发规则,以便从 VirtualBox 宿主机和连接到物理局域网(LAN)的其他机器访问部署在 Ubuntu 虚拟机上的网站。在这个例子中,使用 Apache 作为 web 服务器。首先,在 Virtualbox 上运行的 Ubuntu 虚拟机部署 Apache 软件。apt-get install apache2
默认情况下 Ubuntu 的 ufw 防火墙是关闭的。如果你 Ubuntu 虚拟机上的防火墙是打开的,要确保可以访问 TCP80 端口。安装完 Apache 后,在 Ubuntu 虚拟机上打开一个 Web 浏览器,输入 http://127.0.0.1 访问 apache 的默认页面。如果一切顺利,我们将能看到 Apache 的默认页面。这意味着,现在你可以在 VirtualBox 网络设置中配置一个端口转发规则,用于访问 Ubuntu 虚拟机上托管的网站。打开端口转发设置窗口,进入虚拟机设置>网络>[选择你的适配器]>端口转发(与上述解释类似)。你可以通过以下方式添加一个新规则。 你也可以为通过 RDP、FTP 和其他协议访问虚拟机创建类似的规则。为虚拟网络适配器在 NAT 网络模式下工作的虚拟机配置端口转发的功能类似(见上面解释 NAT 网络模式的部分)。
六、结论
VirtualBox 是一个强大的虚拟化解决方案,它很灵活,提供了广泛的网络设置。每个虚拟机最多可以使用 8 个虚拟网络适配器,每个网络适配器都可以被模拟成相应型号的真实英特尔和 AMD 网络接口控制器(NIC)。VirtualBox 网络适配器设置允许你改变每个虚拟网卡的 MAC 地址,插入或拔出虚拟网线,并选择网络模式。为虚拟网络适配器设置网络模式是 VirtualBox 网络设置中最有趣和重要的部分之一。有六种网络模式,每一种都可以用于不同的使用情况。可以配置端口转发,以便外部服务器访问网络适配器以 NAT 或 NAT 网络模式运行的虚拟机。
今天的 blog 已经涵盖了 VirtualBox 的网络设置,但如果你想了解更多关于 VirtualBox 的信息,欢迎你查看我们关于 VirtualBox 使用、安装 VirtualBox 扩展包和更新 VirtualBox 的博文。你也可以阅读关于 VirtualBox 与 VMware 和 Hyper-V 比较的博文,其中也讨论了这些虚拟化平台的网络设置。
翻译自 NAKIVO Blog ,原文地址:https://www.nakivo.com/blog/virtualbox-network-setting-guide/