Welcome to Snooda's Blog
iptables规则延迟生效/不生效问题-conntrack
[
|
2021/07/21 20:04]
![未加星标](/template/snooda/images/others/unstarred.gif)
![不指定 不指定](/images/weather/blank.gif)
生产环境线上一般是不允许开启conntrack的,因为默认的连接跟踪表也就万级别,不小心打满后,容易导致很难排查的网络问题。(iptables -t nat只查看也会不知不觉启用conntrack)所以很多团队是规定禁止线上运行iptables的。 但是某些设备上,conntrack是必备的一项功能,比如网关,用来做防火墙、包转发等。 今天就遇到了一个很特殊的场景。。表现特征是iptables配的MASQUERADE看起来并不生效。有时不知怎么回事生效以后,删掉规则居然仍然能转发。。明明删除了规则,居然还能ping通,新增了规则,居然还转发到老的地方。。
后来研究了一下,发现原来对于iptables的nat表来讲,只有连接新建时,才会查表进行一次匹配。当连接被conntrack后,就不再走nat表匹配了。
对于icmp来讲,默认conntrack会保留30s,所以如果添加规则前30s如果ping了一下。那么添加完并不会生效已有的。。。。反之亦然。
可以使用conntrack -E作为验证手段。该命令会打印conntrack模块对连接的跟踪情况。
如果想手动移除映射关系,可以使用conntrack -D
后来研究了一下,发现原来对于iptables的nat表来讲,只有连接新建时,才会查表进行一次匹配。当连接被conntrack后,就不再走nat表匹配了。
对于icmp来讲,默认conntrack会保留30s,所以如果添加规则前30s如果ping了一下。那么添加完并不会生效已有的。。。。反之亦然。
可以使用conntrack -E作为验证手段。该命令会打印conntrack模块对连接的跟踪情况。
如果想手动移除映射关系,可以使用conntrack -D