Conntrack TCP 状态超时无法正常工作

Conntrack TCP 状态超时无法正常工作

我使用私有 IP 地址,并且希望在路由器(网关)中保持 SNAT 条目的活动状态至少两个小时(我的网络的某些 Windows 应用程序使用 TCP keepalive 设置为 2 小时)。网关是一台 Linux 机器,所以我将nf_conntrack_tcp_timeout_establishednf_conntrack_generic_timeout设置为 7400 秒:

echo 7400 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
echo 7400 > /proc/sys/net/netfilter/nf_conntrack_generic_timeout

现在,当 TCP 连接建立后不久,我可以看到新值:

# cat /proc/net/ip_conntrack
tcp      6 7399 ESTABLISHED src=192.168.0.192 dst=108.168.176.194
sport=51826 dport=5222 src=108.168.176.194 dst=95.63.14.117 sport=5222 
dport=51826 [ASSURED] use=1

但几秒钟后我再次读取该值,现在该值已返回到 60 秒:

tcp      6 39 ESTABLISHED src=192.168.0.192 dst=108.168.176.194 
sport=51826 dport=5222 src=108.168.176.194 dst=95.63.14.117 sport=5222 
dport=51826 [ASSURED] use=1

答案1

根本原因是内核中的conntrack代码被修改。由于我们使用的是由我们的提供商修改的嵌入式 Linux 发行版,因此刷新 SNAT 条目超时的函数指向一个特殊函数,用于为我们的提供商提供新的“功能”之一。我已经修复了它,现在它可以按预期工作。

相关内容