我对 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 和端口。这将需要某种映射表。
我想知道,那张桌子通常能用多久?
因此,例如,如果我有一个不规则地以任何方式发送数据的协议,是否存在映射已经消失而另一方认为连接已关闭(没有确认)的风险?
在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
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果我有一个不规则地以任何方式发送数据的协议,是否存在映射已经消失而另一方认为连接已关闭(没有确认)的风险?
似乎已建立的 TCP 连接的超时时间为 5 天(432000 秒)。我想你会没事的,除非你使用基于 UDP 的协议。
在Linux中,有没有办法看到这个表?
是的。在/proc/net/nf_conntrack(第三列)中或使用conntrack -L.
| 归档时间: |
|
| 查看次数: |
6710 次 |
| 最近记录: |