Nat 映射可以存活多久?

Nat 映射可以存活多久?

我对 NAT 的简单理解是可能会发生以下情况:

两台客户端电脑 192.168.1.2 和 192.168.1.3 打开一个源端口 = 12345 的连接。网关收到这些后需要使用 NAT,因此当它从外部 IP 1.1.1.1 出去时,其中一个保持为 12345,另一个保持为 12346。

192.168.1.2:12345                            1.1.1.1:12345 <-> 2.2.2.2:80
                  -----> 192.168.1.1 ----->
192.168.1.3:12345                            1.1.1.1:12346 <-> 3.3.3.3:443

当数据包返回 1.1.1.1 时,它必须映射到正确的内部 IP 和端口。这需要某种映射表。

我想知道,这张桌子通常可以使用多久?

  1. x 分钟/小时?
  2. 直到它看到连接关闭?

因此,例如如果我有一个不定期地以任何方式发送数据的协议,那么是否存在映射已经消失并且另一方认为连接已关闭(没有确认)的风险?

在Linux中,有没有办法查看这个表?

答案1

我想知道,这张桌子通常可以使用多久?

这些似乎由以下 sysctl 键控制。作为示例,附上我机器上的配置(从未调整过,应该是默认值)。

> sysctl -a 2>/dev/null | grep ip_conntrack_.*timeout
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2 = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_udp_timeout = 30
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180

因此,例如如果我有一个不定期地以任何方式发送数据的协议,那么是否存在映射已经消失并且另一方认为连接已关闭(没有确认)的风险?

似乎已建立的 TCP 连接的超时时间为 5 天(432000 秒)。我想你应该没问题,除非你使用的是基于 UDP 的协议。

在Linux中,有没有办法查看这个表?

是的。/proc/net/nf_conntrack(第三列)或使用conntrack -L

其他资源:

相关内容