路由器在NAT中保留记录的时间有多长?它们是否可以重新使用,以转发其他主机的请求?

10
有一个简单解释说明路由器如何将本地网络的请求翻译成外部网络并返回的答案 (https://superuser.com/questions/105838/how-does-router-know-where-to-forward-packet),其中不清楚的是 - NAT 记录保留多长时间?
例如,如果我发送一个 UDP 请求到 25.34.11.56:3874,我的本地端点是 192.168.1.21:54389,路由器会重新编写请求数据包并添加一个 NAT 记录。假设外部端点将是 68.55.32.89:34535。然后接收到我的请求的计算机会响应到 68.55.32.89:34535,并根据 NAT 记录将数据包转发到本地的 192.168.1.21:54389。 那个记录之后会发生什么呢?
如果 25.34.11.56:3874 决定在 10 或 100 分钟后向我的外部端点 68.55.32.89:34535 发送请求呢?路由器是否仍会将其转发给 192.168.1.21:54389?
假设有另一台带有端点 55.43.77.98:8765 的远程计算机。如果此计算机向我的外部端点 68.55.32.89:34535 发送请求,它将被转发到本地的 192.168.1.21:54389 还是被路由器过滤掉,因为远程端点与最初用于第一个请求和 NAT 记录的 25.34.11.56:3874 不匹配?

Tribler团队在2008年对NAT/防火墙特性进行了一些测量:链接 Hacker News上的这个帖子也提供了一些有关NAT穿越的见解:链接 - Encombe
1个回答

11

这取决于具体情况。

根据RFC 4787第4.3节的规定,NAT的UDP超时时间不应小于2分钟(120秒),除非是一些特定、众所周知的端口。然而,在实践中,路由器倾向于使用更短的超时时间。例如,OpenWRT 14.07仅使用60秒的超时时间。

对于TCP来说,超时时间可以更长,因为TCP连接通常是通过明确的FIN/FIN-ACK交换来终止的。对于已建立的TCP连接,RFC 5382第5节规定超时时间不得少于2小时4分钟(7204秒),而OpenWRT使用7440秒。

关于你的第二个问题,大多数NAT会维护与一对端点(套接字地址)相关的映射。如果在NAT内部发送一个数据报到套接字地址B,则该映射仅适用于A和B之间的通信,外部的另一个主机C将无法使用该特定映射发送数据到A。(一些所谓的“完全圆锥”NAT允许这样做,但它们相当罕见。)


这完全回答了问题的一部分,即记录在NAT中存活的时间。其他方面呢?例如,如果本地主机向25.34.11.56:3874发送初始请求,并因此在NAT中创建了一个记录以允许25.34.11.56:3874进行响应,那么55.43.77.98:8765能否到达我的本地192.168.1.21:54389? - alex.49.98
已编辑,希望更好。 - jch
锥形NAT真的会消失吗?最近Hacker News发布的帖子说:“Linux、BSD和大多数家用路由器都是全锥形的。显然,我的蜂窝网络共享功能也是全锥形的。最重要的是,我看到的每个运营商级别的NAT(用于手机网络和一些ISP)都是全锥形的。” - Encombe
那个HackerNews的作者不知道他在说什么。他认为任何非对称NAT都是全锥形的。 - jch
他是zerotier.com背后的开发者,所以他应该知道。我的经验是锥形NAT变得越来越普遍,而不是消失。此外,RFC4787 REQ-1必须具有“端点独立映射”+REQ-8推荐“端点独立过滤”=完全锥形NAT。运营商级NAT似乎几乎总是完全锥形NAT。 - Encombe
完全锥形NAT除了“端点无关映射”之外,还需要“端点无关过滤”。我见过的大多数NAT都具有“端点相关过滤”。请参阅RFC 4787第5节中的REQ-8。 - jch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接