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


11

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

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

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

iptables -A FORWARD -j REJECT

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

br0接口拥有我的主机的IP地址。eth0vnet0没有“拥有”任何IP,从主机点。Windows VM具有静态IP配置。

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

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

那么,netfilter防火墙如何阻止甚至没有启用的功能?

此外,VM-LAN流量仅应包含eth0vnet0。但是,似乎允许-o br0“作品” 进行正向流量(尽管我并未非常仔细地检查)。


看看我对这个U&L的答问:使用网桥时的设置
slm

1
什么是输出sysctl -a | grep bridge-nf
斯特凡Chazelas

@StéphaneChazelas– net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-filter-vlan-tagged = 0 net.bridge.bridge-nf-filter-pppoe-tagged = 0
Totor

Answers:


10

StéphaneChazelas 的评论为答案提供了提示。

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

从内核版本2.6.1开始,有五个sysctl条目用于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

4
从Linux 3.18开始,可以通过不加载br_netfilter模块来禁用iptables处理来自网桥的数据包​​的功能。没有加载模块也意味着没有/proc/sys/net/bridge/条目。
Lekensteyn

由于Linux内核5.3此功能每命名空间,而不是全球性就越大。
AB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.