假设我的主机没有网卡。
我想在它上面运行几个虚拟机,并在它们之间通过完全虚拟的 LAN 连接它们。我想要很多机器和很多局域网。
我想以这种方式尝试网络配置。
什么工具可以让我做到这一点?
答案1
在大多数情况下,除非您需要实际隔离机器组,否则不需要执行任何特殊操作。使用桥接接口将虚拟机连接到主机网络的标准方法在大多数情况下都可以正常工作,即使主机上不需要实际的网络硬件。事实上,此标准设置中的桥接接口的存在只是为了让虚拟机管理器能够将虚拟机的虚拟网络接口连接到,因为如果没有某种中介,很难将虚拟机直接暴露到网络上层。
ip link show
作为一个更具体的示例,以下是我运行一堆虚拟机的一个系统的输出摘录:
6: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether fe:20:b5:bd:42:4b brd ff:ff:ff:ff:ff:ff
7: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast aster br0 state UNKNOWN mode DEFAULT group default qlen 1000
link/ether fe:98:c5:54:95:2a brd ff:ff:ff:ff:ff:ff
8: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast aster br0 state UNKNOWN mode DEFAULT group default qlen 1000
link/ether fe:97:56:bf:0c:81 brd ff:ff:ff:ff:ff:ff
在此系统上,软件桥接口br0
充当所有虚拟机连接到的网段,提供与硬件网络交换机等效的功能。当我使用 QEMU 选项时,QEMU 会自动为我运行的每个虚拟机创建每个tap
接口(我在这里只列出了两个这样的接口,但我通常至少有十几个),-net bridge
并且就像连接虚拟机的电缆一样。 (虚拟)VM 中的 NIC 到桥接接口。在这种特殊情况下,我实际上没有任何物理硬件连接到该桥接口(因此有时称为“浮动”或“虚拟”桥),而是使用主机系统上的路由规则来提供外部网络访问对于虚拟机。如果我想将几个虚拟机与其余虚拟机隔离,我可以轻松创建一个新的桥接口,并告诉 QEMU 将它们连接到该接口而不是br0
.
就您的情况而言,根据问题的标签,您似乎想要使用 VirtualBox,它具有与此类似的功能,具有“内部网络”和“仅主机”适配器。第一个的工作原理就像我上面提到的桥接设置一样,除了 VirtualBox 本身提供桥接而不是操作系统这样做,并且它提供了充当 DHCP 服务器的选项。第二个实际上是虚拟机和主机系统之间的点对点链接。它对于低级配置实验不是很有用,但对于 VPN 实验非常有用(因为该链接仅到达主机,您可以确定任何两个虚拟机仅通过 VPN 链接进行通信)。
现在,虽然所有这些都可以很好地用于试验网络配置,但它并不是最有效的选择。根据您想要进行的实验类型的具体细节,您可能会发现开放虚拟交换机或者ns-3更适合您想做的事情。
答案2
VirtualBox 可以很好地做到这一点。您需要使用“仅限主机”网络类型或“仅限内部”。
仅主机 - 在您的计算机上创建虚拟 NIC,将其附加到 VM 也附加到的虚拟交换机。您可以在不同的子网中拥有多个,等等。
仅限内部 - 创建 VM 连接到的虚拟交换机。没有连接到您的主机。您可以创建多个,并且它们彼此不相连,可以是同一子网,也可以是不同子网。
我推荐的是一台具有 2 个以上接口的虚拟机,其中一个位于仅限主机的网络上(以便您的台式机/笔记本电脑可以连接到它),其他则位于不同的仅限内部网络上。将虚拟机设置为主机和仅限内部网络之间的路由器/网桥,在每个仅限内部网络上创建多台计算机。
我已经做到了这一点(使用桥接接口而不是仅使用主机,以便我的专用网络可以使用互联网),并在 3 个不同的子网上运行 12 个虚拟机,并在它们之间进行路由,并设置了假 DNS 和电子邮件等等。学习和实验的好方法。