我已经设置了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 规则?
答案1
答案2
你可以通过输入以下命令禁用此行为(让 iptables 处理桥接数据包):
echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
(看http://ebtables.sourceforge.net/documentation/bridge-nf.html)
答案3
如果您不需要在系统上使用 iptables 与桥接器,则可以使用以下任一方法永久禁用它:
- 添加 iptables 规则:
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
- 或者编辑 /etc/sysctl.conf:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
答案4
ebtables 链不会看到进入非转发桥接端口的帧。可以看看这个:http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html