请进行健康检查。
如果我将 UDP 数据包从 NAT 后面的机器 A 发送到机器 B 的端口 N,其中机器 B 在 NAT 之外(互联网上的其他地方),我是否可以合理地期望 NAT 将从端口 N 上的机器 B 接收的 UDP 数据包传递回机器 A 上的端口 N,不需要在 NAT 上手动端口转发?
Spi*_*iff 23
仅当原始传出数据报的源端口也是端口 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
Run Code Online (Sandbox Code Playgroud)
然后,经过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
Run Code Online (Sandbox Code Playgroud)
现在,当机器 B 回复时,回复通常如下所示:
Source IP: MachineBPublic
Source Port: PortN
Destination IP: NATPublic
Destination Port: PortC
Run Code Online (Sandbox Code Playgroud)
然后,在它通过入站 NAT 转换过程之后:
Source IP: MachineBPublic
Source Port: PortN
Destination IP: MachineAPrivate
Destination Port: PortA
Run Code Online (Sandbox Code Playgroud)
因此,如果机器 A 从与目标端口相同的源端口(“端口 N”)发送帧,并且如果NAT 能够保留该源端口(即,它被配置为在可能的情况下保留源端口,并且该源端口未使用),那么您可以期待对“端口 N”的回复以返回到机器 A。
以下是有关正确 NAT UDP 行为的权威参考:
RFC 4787 / BCP 127:单播 UDP 的网络地址转换 (NAT) 行为要求
rum*_*rak -1
我没想到会这样。
NAT 后面可以有多个 IP,因此您需要选择将其转发到哪个 IP。在 NAT 外部,只有路由器 IP 可见,内部 NAT IP 不可见。
UDP 不形成连接,而只是在网络上传输的数据报。
发送端口号和接收端口号也有区别。