如果只有一方位于 NAT 之后,我是否需要 STUN?

如果只有一方位于 NAT 之后,我是否需要 STUN?

一方通过对称NAT连接,另一方可直接访问,并且有一个STUN服务器。

双方将通过 WebRTC 进行通信。双方均配置为使用该 STUN 服务器。

它会起作用吗?我是否仅仅因为 WebRTC 协议而需要 STUN 服务器,还是有其他真正原因需要它来穿过那一个 NAT 设备?

答案1

NAT 设备会更改 IP 数据包的地址和端口。但是 SIP 消息包含 IP 地址里面不受 NAT 设备管理的 IP 数据包的有效负载。SIP 报头接触或者通过 或者社民党数据包含仅在 LAN 上下文中有效的 IP 地址和端口号。这是因为 SIP 必须借助其他机制才能正确填充协议的标头。其他 VoIP 协议(​​如 Asterisk 的专有 IAX2)可以穿越 NAT 而不会出现这些问题,但只有当您拥有 Asterisk 服务器或将其安装在公共位置时,您才能利用它。

无论如何,假设您必须使用 SIP。在这种情况下,必须使用 NAT 穿越协议。STUN 协议使用外部服务器来查找 NAT 后面设备的公共地址和端口

正如你所看到的STUN 协议和 VoIP – 第 1 部分

STUN 协议的主要目的是使运行在 NAT 设备后面的设备能够发现其公共 IP 以及它所连接的网关上运行的 NAT 类型。它还使连接在网关后面的设备能够发现网关本身 (NAT) 完成的端口转换;即其他设备可以使用哪个端口从网络外部连接到它。请注意,网关和路由器并不总是进行端口转换;这取决于它们运行的​​ NAT 类型及其配置方式。例如,全锥 NAT 配置不会转换端口。

因此,对于在公共服务器中是否需要 STUN 的问题,答案是否定的。它帮助 NAT 后面的客户端找出其公共地址和端口,以便将正确的数据放入 SIP 标头中。

但是……同构 NAT 是一种 NAT,其中设备根据外部服务器将一对(私有 IP,私有端口)转换为不同的对(公共 IP,公共端口)。设备(路由器)能够更改,至少是每次连接中的公共端口,因此,从 STUN 服务器获取信息是不值得的,因为与通话中另一方的实际连接将使用其他端口。同构 NAT 必须通过其他协议进行遍历,例如 TURN

相关内容