iptables-桥接和转发链


14

我有br0包含两个接口的设置以太网桥,eth0并且tap0

brctl addbr br0
brctl addif eth0
brctl addif tap0
ifconfig eth0 0.0.0.0 promisc up
ifconfig tap0 0.0.0.0 promisc up
ifconfig br0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 

我的默认FORWARD连锁政策是DROP

iptables -P FORWARD DROP

当我不添加以下规则时,流量不会通过网桥。

iptables -A FORWARD -p all -i br0 -j ACCEPT

据我了解,iptables它仅负责IP层。

ebtables 应该负责过滤以太网桥上的流量。

那么,为什么我必须在iptable的FORWARD链中添加ACCEPT规则?

Answers:


12

由于br-nf代码可作为linux 2.4的修补程序使用并在linux 2.6中使用:

br-nf代码使桥接的IP帧/数据包通过iptables链。以太网层上的ebtables过滤器,而iptables仅过滤IP数据包。

由于您正在处理的流量是ip,因此iptables规则仍然适用,因为br-nf将桥接数据包传递到iptables

是一个很好的资源,以了解互动和这一个细节的功能BR-NF代码,包括如何禁用全部或部分功能的(即不是通过桥流量的iptables)。


即使在4.4.0-22-generic(ubuntu 16.04)上,该功能也无法使用echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables。有任何想法吗?
Arie Skliarouk

回答自己:#加载br_netfilter modprobe br_netfilter#添加到BROUTING链规则以将所有ipv4数据包转发到iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk


1

如果您不需要将iptables与系统上的网桥一起使用,则可以使用以下任一方法永久禁用它:

  1. 添加iptables规则:

iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

  1. 或编辑/etc/sysctl.conf:

net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0


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.