解决方案:

解决方案:

在我的服务器上,我有一堆虚拟机,通过一个简单的 L2 Linux 桥连接到 OPNsense 虚拟机,用于虚拟机之间的防火墙和路由。

虚拟机通过服务器的单个接口OPNsense连接。通过这个简单的 l2 桥连接到虚拟机的 虚拟机。macvtapenp3s0
vm01OPNsense

vm01虚拟机的桥接配置hypervisor

auto br_vm01
iface br_vm01 inet manual
    bridge_ports none

vm01连接网桥的接口br_vm01:连接网桥的vnet2
接口:OPNsensebr_vm01vnet6

hypervisor托管虚拟vm0机的 IP OPNsense10.1.0.8

我尝试执行以下操作:我尝试从vm01虚拟机连接到hypervisor.例如,通过做一个简单的 netcat。

root@vm01:~# nc -vzw 2 10.1.0.8 8080
10.1.0.8: inverse host lookup failed: Unknown host
(UNKNOWN) [10.1.0.8] 8080 (http-alt) : Connection timed out

vm01虚拟机上具有必要的防火墙规则,OPNsense以便与虚拟机管理程序进行通信。此外,所有其他类型的连接都可以正常工作。

为了进一步诊断这个问题,我在vnet2vnet6接口上做了一些 tcpdump。
IP 数据包在该接口上正常进入vnet2,但它们再也不会在该接口上发送出去vnet6。所以 Linux 网桥会以某种方式过滤掉这个数据包。我还在虚拟机上进行了数据包捕获OPNsense,但数据包从未到达那里。

仅当我尝试联系虚拟机管理程序时才会发生这种情况,当我联系其他任何东西时它永远不会发生。

我的问题:是否有可能以某种方式告诉 Linux 仅将网桥视为哑第 2 层交换机。我不需要任何类型的过滤,因为这是由OPNsense虚拟机提供的。

我已经尝试过并且有用的信息:
/sys/class/net/br_vm01/bridge/nf_call_iptables设置为 0。
sysctl net.bridge.bridge-nf-call-iptables也显示 0。
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
在网桥上打开 VLAN 感知也没有帮助。
我没有任何 ebtables 规则。

hypervisor与内核一起vm01运行Debian 115.10.0-11

答案1

解决方案:

找到了答案。问题是我测试参数的方式/proc/sys/net/bridge/bridge-nf-call-iptables

当我测试它时,我不仅改变了/proc/sys/net/bridge/bridge-nf-call-iptables,而且还改变了很多其他变量。遗憾的是这使它不起作用。最后发现只要这样设置就可以0解决问题。

原因

但这仍然没有向我解释为什么会造成这个问题。
这个问题是由 docker 的 iptables 规则引起的,它似乎与网桥混淆了。仅当我尝试联系由 docker 打开的虚拟机管理程序上的开放端口时,才会出现此问题。因此,没有被它打开的东西不会发生这种情况,就像nc -l -p 8081

相关内容