我的盒子的设置如下:
我在裸机上使用 Xen,使用 Domain-0 (Debian Bullseye) 作为 X 终端。在这里,我创建了一组连接到网桥的虚拟机(包括连接到 Domain-0 中 X 终端的虚拟机)。任何发往上游网络的流量都被路由到连接到上游路由器的接口(即它不是所述网桥的端口)。
现在,在我正在使用的虚拟机(Debian Bullseye)中,我正在尝试使用 KVM(VM 是 Debian Bullseye)设置嵌套虚拟化以进行测试(为此虚拟机启用了 VMX 直通)并设置了另一个桥在这个“主”虚拟机中并将其出站接口附加到它。我创建的嵌套 VM 的后端接口也与这个“内部”桥接。
现在,当我尝试从嵌套 VM 访问网络时,我可以毫无问题地访问托管嵌套 VM 的 VM,但是,当我尝试 ping Domain-0 或 Internet 上的任何主机时,它会被过滤。此外,我通常可以从“主”VM 访问 Domain-0 和 Internet,这反过来告诉我 Domain-0 中的网桥正在过滤来自嵌套 VM 的所有流量。
有没有办法配置位于 Domain-0 中的网桥,以便它允许来自嵌套 VM 的流量通过?我不打算在“主”虚拟机中使用路由(尽管这肯定会解决问题,但这不是我的意图)。
不幸的是,这个问题没有定论,因为它的作者试图从“主”虚拟机内部解决问题,而我试图从外部解决它,即在 Domain-0 内。
进一步调查显示,此问题是防火墙问题。通过将日志记录规则放入 Domain-0 中的 ebtables 的 PREROUTING 链以及托管嵌套 VM 的 DomU 中的 PREROUTING 和 POSTROUTING 链中,我注意到 Domain-0 根本没有收到任何数据包,并签入托管 DomU显示 ICMP 数据包到达由嵌套 VM 创建的后端接口,但尚未转发到出站 PV 前端接口。
通过添加 iptables 规则来免除桥接流量的处理(
iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT
托管 DomU 中的一个简单的技巧),我终于能够访问上游服务器(Domain-0,在 Xen 下运行的其他 DomU,以及最后但并非最不重要的机器'网)。在此之前,我已经在 Domain-0 中的所有网桥和托管 DomU 中的网桥上重新启用了 STP,并将与此相关的几个参数设置为合理的值。