STUN 服务器地址不兼容 |错误代码=701:

STUN server address is incompatible | Error code=701:

我已经安装了 TURN 服务器,服务器代码中的所有内容都运行良好。日志文件中没有错误。只有一个警告说明

 0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided

但是TURN服务器运行在服务器上。

这是我检查 lsof -i :3478

时显示的内容
turnserve 999 root   15u  IPv4 446811411      0t0  TCP domain.com:stun (LISTEN)
turnserve 999 root   23u  IPv4 446811417      0t0  TCP domain:stun (LISTEN)
turnserve 999 root   24u  IPv4 446810998      0t0  UDP domain.com:stun
turnserve 999 root   25u  IPv4 446810999      0t0  UDP domain.com:stun

当我在 Trickle ICE 中检查 STUN 时,它会抛出一个错误

The server stun:xxx.xxx.xxx.xxx:3478 returned an error with code=701:
STUN server address is incompatible.
The server stun:xxx.xxx.xxx.xxx:3478 returned an error with code=701:
STUN allocate request timed out.

这是怎么回事。

谢谢

我认为 701 错误是一种更通用的连接错误,Trickle ICE 使用它来指示它没有收到绑定响应。 运行 stunclient your.stun.ip.address 使用命令行工具 www.stunprotocol.org 查看您的 STUN 服务是否可以从外部世界访问。

从技术上讲,STUN 需要托管在具有两个 IP 地址和两个端口的设备上。它通常是一个命令行参数,用于指定服务器应侦听的 IP 地址。但是大多数服务器实现可以在具有单个 IP 地址的主机上运行。

服务器上的第二个IP地址和端口用于STUN客户端过滤测试,检测什么类型的NAT有效。客户端在服务器的主要 ip 和端口上发送绑定请求,但具有更改请求属性以使服务器从备用 IP 地址或端口响应。通常情况下,这个具有更改请求属性的绑定请求会失败,因为 NAT 不会转发来自其他 IP/port.

的流量

过滤测试对于记录客户端使用的 NAT 类型很有用。这样就可以调试失败的连接,并且 success/failure 指标可以与 NAT 类型相关联。

由于大多数 ICE 实现将交换所有可用的候选地址(本地、映射和中继),过滤测试对连接建立不是非常有用。

我很惊讶 Trickle ICE 给你一个错误。我认为 WebRTC 从未使用过 changer-request 属性。我刚刚对 stun.stunprotocol.org 的 Trickle ICE 会话进行了 Wireshark 跟踪。我没有看到 webrtc 客户端在它发出的两个绑定请求中设置 change-request 属性。

RFC 5780 Section 3.2

中有更多详细信息

在 macOS 中,我就是这么做的:

> brew install stuntman

完成后

> stunclient stun.stunprotocol.org
Binding test: success
Local address: 198.18.0.1:54898
Mapped address: 210.0.158.130:56750

要指定端口,就像这样:

> stunclient stun.stunprotocol.org 3478
Binding test: success
Local address: 198.18.0.1:63061
Mapped address: 210.0.158.130:37126

玩得开心!