4

我已经安装了 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.

这出了什么问题。

谢谢

4

2 回答 2

11

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

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

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

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

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

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

RFC 5780 第 3.2 节中的更多详细信息

于 2020-06-21T09:07:07.320 回答
0

在 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

玩得开心!

于 2022-02-19T08:14:16.057 回答