Nat
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
當數據包返回 1.1.1.1 時,它必須映射到正確的內部 IP 和埠。這將需要某種映射表。
我想知道,那張桌子通常會持續多久?
- x 分鐘/小時?
- 直到它看到連接關閉?
因此,例如,如果我有一個協議不定期地以任何一種方式發送數據,是否存在映射已經消失並且另一方認為連接已關閉(沒有 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
.其他資源: