首页 > 解决方案 > 对称 NAT 穿越

问题描述

假设有 2 个对等点,A 和 B,每个都在一个对称 NAT 下,并具有随机端口分配。

如果 A 在特定端口上向 B 的地址发送数据包,则 NAT 会将请求映射到它的公共 IP 地址和随机端口。

A'private:           A'public:             B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000

如果 A 一直在同一端口上向 B 的地址发送数据包,则 NAT 将继续使用相同的 IP 地址和端口组合。

A'private:           A'public:             B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000

如果 A 决定在不同的端口向 B 的地址发送数据包,则 NAT 将随机分配另一个端口来发送数据包。

A'private:           A'public:             B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000
192.168.0.7:8000 --> 94.109.0.76:27650 --> 35.232.76.41:5001

当 A 向 B 发送一个数据包时,如果它是从 A 发送消息的端口发送的,并且如果它具有 A 的 NAT 映射的地址/端口作为目标,则 NAT 将允许来自 B 的回复通过。

A'private:           A'public:             B:
192.168.0.7:8000 --> 94.109.0.76:43576 --> 35.232.76.41:5000

B:                   A'public:             A's private
35.232.76.41:5000 --> 94.109.0.76:43576 --> 192.168.0.7:8000

理论上,如果 A 在其每个端口 (0-65535) 上向 B 发送数据包,A 允许来自 B 的任何端口的回复通过,但只有当 B 向其中一个地址发送数据包时,回复才会通过/port 由 A 的 NAT 映射,同时发送 65535 个数据包。

如果 B 向 A 的每个端口 (0-65535) 发送数据包,B 很可能会设法找到 A 的 NAT 映射的端口之一,因此将通过 A 的防火墙。

这对你们有意义还是我错过了一点?我一直在尝试使用这种技术在对称 NAT 下连接 2 个对等点,但还没有成功。

标签: networkingudpnathole-punchingnat-traversal

解决方案


推荐阅读