NAT 源 UDP 端口是否仅依赖于 src ip/port?

网络工程 路由器 纳特 UDP
2021-07-30 19:00:49

NAT UDP 端口是否仅依赖于 src ip/port?

假设我使用源 NAT 通过 NAT/路由器连接了两个网络。

网络 A(带有路由器 192.168.0.1)中的 PC A(192.168.0.2)向网络 B(带有路由器 10.0.0.1)中的 PC B(10.0.0.2)发送一个 UDP 数据包。在网络 A 中,数据包的 src ip/port 192.168.0.2:2000 和 dst 10.0.0.2:5000。在网络 B 中,它变为 src ip/port 10.0.0.1:6000(因为 6000 无论出于何种原因都是免费的,只是为了示例)和 dst 10.0.0.2:5000。

然后 PC A 从 src ip/port 192.168.0.2:2000 向网络 B 中的另一台 PC 发送另一个 UDP 数据包。 )?我假设是的,但我不确定。

它是否也取决于 dst ip/端口?如果不是,是否意味着一台PC,甚至网络A 中的一个src 端口,可以用完网络B 中的所有NAT 哈希表条目?(我希望至少需要 65536 个网络 A src 端口来填充网络 B 中的 NAT 哈希表条目。)

顺便说一句:这个问题是从 Stack Overflow 移过来的,因为我认为它更适合这里。

2个回答

在您的情况下,它是“NAT 过载”(或 PAT、NAPT)
这一切都是为了确保翻译条目唯一性(local-src ip:port ==> global-src ip:port)

所以要回答你的问题:
1-如果转换表已经包含以下条目:
192.168.0.2 :2000 ==> 10.0.0.1:6000 (只是为了示例),所有来自 192.168.0.2:2000 的传出连接都将是转换为 10.0.0.1:6000。所以你的假设是正确的。

2- 这取决于本地 src-ip 和 src-port。
所以是的,理论上最多 65536 个 PAT 条目,1 个具有来自不同 src-ports 的 65536 个传出连接的设备,或一个来自 65536 个设备的 src-port,可以填满转换表。
实际上,该限制可能会通过以下方式减少:
- 内存、CPU、可用端口(静态 PAT/PAR)、...

当前的建议是 NAT 映射是独立于端点的。也就是说,即使目的地不同,来自同一私有客户端 IP/端口/协议的所有数据包也使用相同的公共客户端 IP 和端口。

但是,无法保证您在野外找到的每个 NAT 都会执行此操作。有些人可能会根据完整的 4 元组(称为“对称 NAT”)进行转换。

特别隐蔽的是具有端口保留行为的对称 NAT。在客户端上具有随机源端口的轻负载下,映射将看起来与端点无关。但是,如果不同机器上的多个客户端使用相同的源端口,则 NAT 的真实性质将变得显而易见。我相信 linux NAT 属于这一类,尽管我对此并不乐观。