NAT 和 UDP 回复

NAT 和 UDP 回复

请进行健全性检查。

如果我将 UDP 数据包从 NAT 后面的机器 A 发送到机器 B 的端口 N,而机器 B 位于 NAT 之外(在互联网上的其他地方),我是否可以合理地期望 NAT 将从机器 B 的端口 N 上收到的 UDP 数据包传递回机器 A 的端口 N,而不需要在 NAT 上手动进行端口转发?

答案1

仅当原始传出数据报的源端口也是端口 N,并且 NAT 未选择浮动源端口时才会发生这种情况。

也就是说,来自机器 A 的第一个 UDP 数据报在您的 LAN 上如下所示:

       Source IP: MachineAPrivate  
     Source Port: PortA     <-- note this is typically different than the destination port  
  Destination IP: MachineBPublic  
Destination Port: PortN  

然后,经过出站方向的 NAT 转换后,它看起来是这样的:

       Source IP: NATPublic  
     Source Port: PortC   <-- note this may or may not be the same as "PortA" above  
  Destination IP: MachineBPublic  
Destination Port: PortN  

现在,当机器 B 回复时,回复通常如下所示:

       Source IP: MachineBPublic  
     Source Port: PortN  
  Destination IP: NATPublic  
Destination Port: PortC  

然后,经过入站 NAT 转换过程后:

       Source IP: MachineBPublic  
     Source Port: PortN  
  Destination IP: MachineAPrivate  
Destination Port: PortA  

所以,如果机器 A 从与目标端口相同的源端口(“端口 N”)发送帧,并且如果NAT 能够保留该源端口(即,它配置为在可能的情况下保留源端口,并且该源端口未被使用),然后您可以期待对“端口 N”的回复以返回到机器 A。

以下是有关正确的 NAT UDP 行为的权威参考:
RFC 4787 / BCP 127:单播 UDP 的网络地址转换 (NAT) 行为要求

答案2

接近,但是机器 B 需要查看它实际接收的源地址和端口号,这可能与 N 不同。

计算机 A 上的 NAT 可能不会使用计算机 A 发送的端口 N。(假设位于同一 NAT 后面的计算机 C 也在端口 N 上发送:它们不能同时使用它。)因此,计算机 B 可能会看到不同的源端口 M。但如果 NAT 这样做,那么它应该接受发送回端口 M 的流量并自动将其映射回计算机 B 上的 N。

换句话说,只要机器 B 向其收到的数据包中提供的源地址和源端口发送回数据包,您就可以合理地预期返回数据包会找到返回原始源的路径。这假设返回数据包是在很短的时间内发送的,因为自动 NAT 规则往往会在几分钟后超时。

答案3

我没想到这一点。

NAT 后面可以有多个 IP,因此您需要选择要转发到哪个 IP。NAT 之外只有路由器 IP 可见,内部 NAT IP 不可见。

UDP 不形成连接,而只是通过网络传输数据报。

发送端口和接收端口号也有区别。

相关内容