我build立了包含两个接口eth0和tap0以太网桥接器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