UDP 源端口如何映射到 NAT 上?

网络工程 路由 路由器 纳特 UDP ntp
2021-07-20 12:30:04

这是一个示例用例;我很想知道这是如何工作的以及为什么:

有人拥有来自其 ISP 的 NAT 路由器。

路由器后面是 2 台运行 Linux 并使用 ntpd 的 PC。ntpd 将 UDP 消息发送到源和目标端口都设置为 123 的服务器。

当数据包从路由器(WAN 端口)出来并进入 NTP 服务器时,它们的 src 端口应该是什么?

路由器是否假设将 LAN 上的 src 映射到 WAN 上的不同 src,以便它知道如何映射响应?

如果没有,并且他们将 src 123 携带到互联网上,路由器如何知道将回复发送到哪台 PC?

2个回答

这取决于 NAT 实现。

通常,大多数 NAT 引擎倾向于根据需要进行尽可能少的修改。所以,第一个可以保留他们的 src 端口。第二个是“失败者”并且已经改变了。地图条目不依赖于任何变化;它跟踪使用、更改或未使用的任何内容。只要它们不与同一个服务器通信,它们就可以使用相同的 src 端口,因为映射包含目的地:

[(inside){src}PC A:123 {dst}Server A:123 :: (outside){src}ISP:123 {dst}Server A:123]
[(inside){src}PC B:123 {dst}Server B:123 :: (outside){src}ISP:123 {dst}Server B:123]
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

外部细节不同,因此是找到内部匹配的唯一键。

路由器如何知道将回复发送到哪台 PC?

为了回答上面的问题,NAT 表生成随机端口作为路由器中源 PC 的参考,并保存在 NAT 表中。

Source ip address : Destination ip address Source mac -address Destination mac -address Source port 目的端口

因此,此源端口将正确地将流量返回到最初生成此流量的正确源。