iptables – 桥和转发链

我build立了包含两个接口eth0tap0以太网桥接器br0

 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应负责过滤以太网桥上的stream量。

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

    由于可以作为Linux 2.4的补丁提供的br-nf代码,并在linux 2.6中使用:

    br-nf代码使桥接的IP帧/数据包通过iptables链。 Ebtables在以太网层进行过滤,而iptables只对IP数据包进行过滤。

    由于你正在工作的stream量是ip,所以iptables规则仍然适用,因为br-nf将桥接数据包传递给iptables

    这是阅读有关交互的一个很好的资源, 它详细介绍了br-nf代码的function,包括如何禁用全部或部分function(即不将桥接通信传递给iptables)。

    您可以通过input以下命令来禁用这种行为(让iptables处理桥接数据包):

     echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables 

    (见http://ebtables.sourceforge.net/documentation/bridge-nf.html

    ebtables链将不会看到进入非转发桥端口的帧。 可能看看这个: http : //ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html