使用主机环回设备接入虚拟机

使用主机环回设备接入虚拟机

在决定为本地虚拟机分配什么 IP 地址时,我脑海中出现了一个问题:为什么我不能只分配 127.0.0.0/8 网络地址(这样我就可以避免任何类型的 IP 冲突)?毕竟,可以将 HTTP 服务器/任何东西绑定到本地主机;为什么我不能对虚拟机这样做?当我尝试这样做时,virt-manager 说“此网络已在使用中”。

之后,在我尝试使用环回设备时,我问了自己另一个问题:我可以创建到主机环回设备的桥接网络吗?当我使用 iproute2 中的 ip 工具尝试此操作时,ip l set lo master bridge0我得到了以下命令RTNETLINK answers: Invalid argument

是我对理论上的东西应该如何运作一无所知,还是我配置错误了?提前谢谢。:)

答案1

因为VM 是另一台计算机。它运行自己的操作系统,有自己的网络堆栈等等。从网络的角度来看,在 L1(物理)上它与主机绑定,但在 L2(通道)及以上所有级别上,这台额外的计算机完全独立于“主机”。只是另一台机器。这是容器的灰色区域,因为容器实际上与“主机”相同的操作系统(内核)。如果容器具有独立的网络命名空间,它将在网络上具有独立的存在、自己的环回等等,就像虚拟机一样。如果您想象一个没有单独网络的容器,那么从网络的角度来看,该容器将与“主机”相同(它将“查看和共享”主机的网络接口和配置)。

你不能将环回地址用于虚拟机,原因和你不能将其用于另一台计算机的原因完全相同:这些是回送例如与“我自己”同义,每个系统都有自己的“自我”。

Linux 的桥接驱动程序是以太网桥接。您无法用任何东西“桥接”环回的原因之一是环回不是以太网。实际上,这是我在上一段中给出的原因的结果。

为了避免任何类型的 IP 冲突,你必须计划帐户您的网络。没有其他方法。一个特别的建议是永远不要使用“通用”/“默认”网络:192.168.0.0/24、192.168.1.0/24(两者都是无数 SOHO 硬件上的默认网络)、192.168.88.0/24(Mikrotik 默认网络)、192.168.112.0/24(据我所知,libvirt 默认网络)、Docker 默认使用的网络等等。还有很多剩余的网络;使用它们。

答案2

为什么我不能只分配 127.0.0.0/8 网络地址?

当然可以。但话说回来,唯一能够与 127.0.0.0/8 环回网络通信的一方是本地主机(VM)本身……

VM 或物理主机并不重要。

相关内容