net.bridge.bridge-nf-call-iptables=1

http://blog.csdn.net/quqi99/article/details/7447233




net.bridge.bridge-nf-call-iptables=1_第1张图片


关于上面的这个图,先要说一个很重要的说法,上图显示,netfilter实际上既可以在L2层过滤,也可以在L3层过滤的。

所以在网桥中一般会有下面的参数,即要求iptables不对bridge的数据进行处理:

# cat >> /etc/sysctl.conf <   net.bridge.bridge-nf-call-ip6tables = 0
  net.bridge.bridge-nf-call-iptables = 0
  net.bridge.bridge-nf-call-arptables = 0
  EOF
# sysctl -p /etc/sysctl.conf

或者改用下面的方法解决:

 iptables -t raw -I PREROUTING -i BRIDGE -s x.x.x.x -j NOTRACK.

如果net.bridge.bridge-nf-call-iptables=1,也就意味着二层的网桥在转发包时也会被iptables的FORWARD规则所过滤,这样就会出现L3层的iptables rules去过滤L2的帧的问题(packets don't cross nat table twice, In the bridging process, you don’t know the outgoing interface so the previous rule doesn’t work. He needs the interface because he’s using MASQUERADE. In the routing process, the packets go to iptables but they never cross NAT tables because the packet already crossed the table in the bridging process.http://www.woitasen.com.ar/2011/09/confusion-using-iptables-nat-and-bridge/),所以涉及一些dnat, snat就不生效了,举个例子,具体表现在openstack中就是metadata服务不好使了。这个说法可参见:https://bugzilla.redhat.com/show_bug.cgi?id=512206

所以这样下面的规则也就失效了,所以http://blog.youlingman.info/debugging-iptables-with-raw-table/这个文章上的作者调试iptables的方法挺好,但实际上网络为什么不通的问题实质没有找准。




你可能感兴趣的:(NetFilter)