Nat

Nat 映射可以存在多長時間?

  • February 24, 2013

我對 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

當數據包返回 1.1.1.1 時,它必須映射到正確的內部 IP 和埠。這將需要某種映射表。

我想知道,那張桌子通常會持續多久?

  1. x 分鐘/小時?
  2. 直到它看到連接關閉?

因此,例如,如果我有一個協議不定期地以任何一種方式發送數據,是否存在映射已經消失並且另一方認為連接已關閉(沒有 Ack)的風險?

在Linux中,有沒有辦法看到這個表?

我想知道,那張桌子通常會持續多久?

這些似乎由以下 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

因此,例如,如果我有一個協議不定期地以任何一種方式發送數據,是否存在映射已經消失並且另一方認為連接已關閉(沒有 Ack)的風險?

似乎已建立 TCP 連接的超時時間為 5 天(432000 秒)。我想你會沒事的,除非你使用的是基於 UDP 的協議。

在Linux中,有沒有辦法看到這個表?

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

其他資源:

引用自:https://serverfault.com/questions/481899