conntrack 会记住连接多长时间?

conntrack 会记住连接多长时间?

由此关联看来 conntrack 在连接关闭后会记住 X 秒。

有谁知道 X 有多长以及它是否可以配置?

答案1

conntrack 在关闭后应记住 TCP 连接的原因与 TCP 在关闭后应记住连接的原因相同:RFC 793关于TCP,特别是关于TIME-WAIT的部分应该默认(写得不是很清楚)2mn。当然,对于 UDP、ICMP 或其他一些协议,这并不适用,但延迟是为了记住会话。这是状态防火墙或 NAT 所必需的。

也就是说,一旦加载了 netfilter 的 conntrack,大多数设置都可以在那里使用:

/proc/sys/net/netfilter/

(它们可能在非常旧的内核上)

例如,它们可以显示为:

# sysctl net.netfilter | grep timeout
net.netfilter.nf_conntrack_dccp_timeout_closereq = 64

[...]

net.netfilter.nf_conntrack_dccp_timeout_timewait = 240
net.netfilter.nf_conntrack_frag6_timeout = 60
net.netfilter.nf_conntrack_generic_timeout = 600
net.netfilter.nf_conntrack_gre_timeout = 30
net.netfilter.nf_conntrack_gre_timeout_stream = 180
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_icmpv6_timeout = 30

[...]

net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 120

您可以使用相同的命令(或者使用echo nnn > /proc/sys/...)来更改设置。例如,将 TCP CLOSE 状态超时增加到更高的延迟,例如 60:

sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close=60

某些功能和默认设置可能取决于内核选项和版本。例如,net.netfilter.nf_conntrack_udp_timeout_stream对于“已建立”的 UDP 流量(当同一流中不止一个数据包及其回复时被视为如此)在最近的内核中从 180 减少到 120(>= 5.0?)。

还有其他方法可以配置专用超时策略以应用于特定类型的连接,而不是使用默认的全局值:nfct沿着iptables或与nftables

相关内容