为什么 STUN 不适用于对称 NAT?

网络工程 纳特 非对称路由
2021-07-15 18:17:28

我从维基百科中读到了这一行

" STUN 确实可以与三种类型的 NAT 一起使用:全锥体 NAT、受限锥体 NAT 和端口受限锥体 NAT。在受限锥体或端口受限锥体 NAT 的情况下,客户端必须在 NAT 之前向端点发送数据包允许从端点到客户端的数据包。STUN 不适用于对称 NAT

谁能解释为什么?

2个回答

假设我们在 address 有一个 STUN 服务器,在 addressstun_addr有一个服务器srv_addr使用 STUN 通常是这样的:

  1. 客户端stun_addr通过 NAT 设备连接到 STUN 服务器NAT 设备将源地址转换为natted_addr_1
  2. STUN 服务器告诉客户端它接收连接的地址,即 natted_addr_1
  3. 客户端srv_addr通过NAT设备联系服务器at natted_addr_1如果要到达客户端,告诉外部系统使用
  4. 外部系统使用 natted_addr_1

这仅在 NAT 设备natted_addr_1用于与 STUN 服务器和其他外部系统的通信时才有效更具体地说,它仅在 NAT 设备将在步骤 4 中到达的数据包传送到客户端时才有效。

对称 NAT 设备将在步骤 1 和 3 中使用不同的转换,因为流量的目标地址不同。在步骤 3 中,发送到服务器的数据包中的源地址被转换为某个其他地址natted_addr_2

NAT 设备只知道这些源地址和目标地址的组合,并且只允许它们返回:

  • stun_addrnatted_addr_1
  • srv_addrnatted_addr_2

不幸的是,服务器已被告知要使用,natted_addr_1由于 NAT 地址:端口限制就位,来自srv_addr目的地的数据包natted_addr_1将被 NAT 设备拒绝。

更准确地说,本答案中的“地址”应替换为“地址/端口”,因为 NAT 设备将使用 IP 地址和端口号的组合。

因为 STUN(外部服务器),无法知道 NAT 设备将给客户端哪个端口。在对称 NAT 中,客户端在每个连接上获得唯一的端口(ip:port in pool 情况)