ip_conntrack_tcp_timeout_established未应用于整个子网

7

我有一个NAT设置,连接了数千个设备。网关通过eth0连接互联网,LAN侧的设备通过网关上的eth1连接。

我的iptables设置如下:

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

eth1的配置如下:

    ip: 192.168.0.1
subnet: 255.255.0.0

客户端被分配的IP地址范围是192.168.0.2到192.168.255.254。
在/etc/sysctl.conf中,我对ip_conntrack_tcp_timeout_established进行了以下设置。
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1200

由于连接到此网关的客户端设备数量众多,我无法使用默认的5天超时时间。
这种设置似乎很有效,并且已经测试了超过10000个客户端设备的设置。
然而,我遇到的问题是TCP建立的超时时间为1200,只适用于IP范围在192.168.0.2至192.168.0.255之间的设备。所有IP地址在192.168.1.x至192.168.255.x范围内的设备仍然使用5天默认超时时间。
这会在/proc/net/ip_conntrack表中留下太多的“已建立”连接,最终填满,即使它们应该在20分钟内超时,它们显示将在5天后超时。
显然,我错过了某个设置或者配置不正确。
有什么建议吗?
谢谢。

这是一个不错的问题,但最好由serverfault.com上的专业人员来回答。 - Adam Liss
4
如果有其他人遇到类似的问题,我想让你知道。我基本上安装了conntrack_tools并运行了sudo /usr/sbin/conntrack -F来重置表格,在那之后,所有连接似乎都开始使用1200秒的超时而不是5天的超时。 - Stephen Hankinson
1个回答

4

正如@StephenHankinson所提到的,更改sysctl变量时现有连接(参见conntrack -L)的超时时间不会重置。这通常不是问题,因为这些连接最终会结束,但可以使用conntrack -F强制NFCT忘记所有CTs。但请注意,如果您的规则集不允许不以TCP SYN开头的“NEW”连接,则可能会中断现有连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接