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

网络工程 纳特 非对称路由
2022-02-24 12:48:11

我从wikipedia读到了这一行

" 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. 客户端通过 NAT 设备联系服务器srv_addr,并告诉外部系统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 地址:端口限制就地,NAT 设备将拒绝来自srv_addr目的地的数据包。natted_addr_1

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

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