ip_conntrack_tcp_timeout_established未应用于整个子网

时间:2012-02-17 03:05:29

标签: timeout iptables nat gateway subnet

我有一个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

为客户端分配ips 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的设备。在192.168.1.x到192.168.255.x范围内具有ips的所有设备仍在使用5天的默认超时。

这会在/ proc / net / ip_conntrack表中留下太多“ESTABLISHED”连接并最终填满,即使它们应该在20分钟内超时,它们显示它们将在5天内超时。

显然我在某个地方错过了设置或者配置错误。

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:4)

正如@StephenHankinson所提到的,在更改sysctl变量时,现有连接(参见conntrack -L)没有重置超时。这应该不是问题,因为这些连接最终会结束,但NFCT可能会被迫使用conntrack -F忘记所有CT。但请注意,如果规则集不允许“新”连接不以TCP SYN开头,则可能会终止现有连接。