Nat 映射存在多久?

Ala*_*lan 6 nat

我对 NAT 的简单理解是这样的事情可能会发生:

两台客户端PC 192.168.1.2和192.168.1.3打开一个src端口=12345的连接,网关收到这些,需要使用NAT,所以其中一个保持12345,另一个保持12346对外IP 1.1.1.1。

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
Run Code Online (Sandbox Code Playgroud)

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

我想知道,那张桌子通常能用多久?

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

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

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

chu*_*utz 9

我想知道,那张桌子通常能用多久?

这些似乎由以下 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

其他资源: