为什么我的防火墙 (iptables) 会干扰我的网桥 (brctl)?

为什么我的防火墙 (iptables) 会干扰我的网桥 (brctl)?

我设置了一个br0“连接”到两个接口的桥:

  • eth0,我的物理接口连接到真实的LAN,
  • vnet0,KVM虚拟接口(连接到Windows VM)。

我在前向链中有一个防火墙规则:

iptables -A FORWARD -j REJECT

现在,唯一有效的 ping 是从虚拟机到主机。

br0接口拥有我的主机的 IP 地址。从主机的角度来看,eth0并且不“拥有”任何IP。 vnet0Windows VM 具有静态 IP 配置。

如果将我的iptables规则更改为ACCEPT(或者甚至使用更具限制性的iptables -A FORWARD -o br0 -j ACCEPT),则一切正常! (即我可以从虚拟机 ping 任何 LAN 计算机,反之亦然)。

所有 IP 转发内核选项均被禁用(如net.ipv4.ip_forward = 0)。

那么,netfilter 防火墙如何阻止甚至未启用的东西呢?

此外,VM-LAN 流量应仅表示eth0vnet0。然而,它看起来像是允许-o br0“有效”的转发流量(虽然我没有仔细检查)。

答案1

评论斯特凡·查泽拉斯 (Stéphane Chazelas) 提供了答案的提示。

根据Bridge-nf 常见问题解答bridge-nf 使 iptables、ip6tables 或 arptables 能够查看桥接流量。

从内核版本 2.6.1 开始,有五个系统控制条目对于bridge-nf行为控制:

  • bridge-nf-call-arptables- 将桥接的 ARP 流量传递到 arptables 的 FORWARD 链。
  • bridge-nf-call-iptables- 将桥接的 IPv4 流量传递到 iptables 的链。
  • bridge-nf-call-ip6tables- 将桥接的 IPv6 流量传递到 ip6tables 的链。
  • bridge-nf-filter-vlan-tagged- 将桥接 VLAN 标记的 ARP/IP 流量传递到 arptables/iptables。
  • net.bridge.bridge-nf-filter-pppoe-tagged- 将桥接的 pppoe 标记的 IP/IPv6 流量传递到 {ip,ip6} 表

您可以使用以下命令禁用 netfilter 防火墙阻止:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0

相关内容