NAT和UDP答复


20

请进行健全性检查。

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

Answers:


21

仅当原始传出数据报的源端口也是端口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)行为要求


3

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

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

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


-1

我不希望那样。

NAT后可以有多个IP,因此您需要选择将其转发到的IP。在NAT之外,仅路由器IP是可见的,而内部NAT IP是不可见的。

UDP不构成连接,而只是一个跨网络传输的数据报。

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


您是正确的,UDP不会“形成连接”,但是配对的源端口和目标端口确实允许NAT唯一标识NAT后面的哪个IP将数据包发送到
portforwardpodcast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.