6

我正在尝试为基于 WebRTC 的应用程序设置 COTURN 服务器。但是,我遇到了一些我无法理解的错误消息,并且在互联网上找不到任何帮助。

以下是有关该应用程序的一些详细信息:

  • 两个用户登录到应用程序,其中一个用户可以与另一个用户共享他们的屏幕 - 所以流只在一个方向上

  • 我能够让应用程序在 Intranet 和一些外部网络上运行。所以我相信只要 STUN 模式足够,应用程序就可以正常工作。

  • 对于某些网络,STUN 候选者不断失败,所以我需要一个 TURN 服务器来中继流。

我已经从服务器收集了一些服务器日志,以防有人可以根据它们识别问题:

handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59942

handle_turn_command: STUN method 0x1 ignored

handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59944

handle_turn_command: STUN method 0x1 ignored

session 128000000000000096: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised

session 128000000000000097: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

session 128000000000000096: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised

session 128000000000000097: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised

IPv4. Local relay addr: <IP Address>:64306

session 128000000000000096: new, realm=<server URL>, username=<username>, lifetime=600

session 128000000000000096: realm <server URL> user <username>: incoming packet ALLOCATE processed, success

IPv4. Local relay addr: <IP Address>:65384

session 128000000000000097: new, realm=<server URL>, username=<username>, lifetime=600

session 128000000000000097: realm <server URL> user <username>: incoming packet ALLOCATE processed, success

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

session 128000000000000096: realm <server URL> user <username>: incoming packet ALLOCATE processed, success

session 128000000000000097: realm <server URL> user <username>: incoming packet ALLOCATE processed, success

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

handle_turn_command: STUN method 0x1 ignored

session 128000000000000096: refreshed, realm=<server URL>, username=<username>, lifetime=0

session 128000000000000096: realm <server URL> user <username>: incoming packet REFRESH processed, success

session 128000000000000097: refreshed, realm=<server URL>, username=<username>, lifetime=0

session 128000000000000097: realm <server URL> user <username>: incoming packet REFRESH processed, success

session 128000000000000096: closed (2nd stage), user <username> realm <server URL> origin <>, local <IP Address>:3478, remote <IP Address2>:59942, reason: allocation timeout

session 128000000000000096: delete: realm=<server URL>, username=<username>

session 128000000000000097: closed (2nd stage), user <username> realm <server URL> origin <>, local <IP Address>:3478, remote <IP Address2>:59944, reason: allocation timeout

session 128000000000000097: delete: realm=<server URL>, username=<username>

这是我的turnserver.conf文件的外观:

listening-port=3478
#tls-listening-port=443
realm=subdomain.domain.com
server-name=subdomain.domain.com
lt-cred-mech
userdb=/etc/turnserdb.conf

cert=/home/ubuntu/certificate.crt
pkey=/home/ubuntu/qc.key
pkey-pwd=L1ght!t

no-stdout-log
Verbose

我特别关心以下几点:

  • 我是否应该假设由于我的代码与 STUN 服务器一起使用,它也可以与正常工作的TURN 服务器一起使用?因此,错误意味着问题出在 TURN 服务器上?

  • 我可以看到一些错误说明“分配超时”。这是否意味着任何可能不足的 RAM/CPU/网络分配?

  • 一些请求的用户名部分为空'<>'而不是'',然后是'401 Unauthorized',而我已经三次检查了RTCPeerConnection配置-它们确实包含用户名和密码。

  • 除了上面的日志,我还经常看到“438 Wrong nonce”出现。我对此进行了一些搜索,但这似乎不是我可以通过 JS 控制的东西。它与任何服务器配置有关吗?

谢谢!感谢你的帮助。

4

3 回答 3

5

你的配置看起来如何?

我的 webRTC 使用示例:

sudo nano /etc/turnserver.conf ->

listening-port=80
tls-listening-port=1133
fingerprint
lt-cred-mech
userdb=/etc/turnuserdb.conf
realm=subdomain.domain.com
server-name=subdomain.domain.com
total-quota=100
bps-capacity=0
stale-nonce
log-file=/var/log/turnserver/turn.log
no-loopback-peers
no-multicast-peers

sudo nano /etc/turnuserdb.conf -> 用户名:密码

如果启用,您还需要在防火墙中允许这些端口。在此处检查您的服务器:Trickle ICE

请注意,您始终需要将 ip/url 与 123.456.789.10:80 之类的端口一起使用

于 2017-04-08T07:58:26.600 回答
3

我的 TURN 服务器设置存在一些问题。

  • 首先,我们从一个大约两年前的博客中获取它。结果,该设置也已经使用了两年 - Coturn Monza。开始的理想方式是获取 Coturn AMI(亚马逊机器映像)(版本 4.5.0.6 详细信息)并使用它来设置服务器。或者,我们至少应该通过 git 存储库进行最新设置。

  • 第二个问题是配置。甚至在在这里发布问题之前,我们就错过了在服务器上打开必要的端口。一旦我们这样做了,我们就开始收到 STUN 响应,但中继还没有工作。

  • 第三个关键问题是 Turnserver.config 文件中的配置。我们几乎没有完成所有配置,在北极星的回答之后我们完成了。配置文件包含对每个配置的充分解释,问题确实出在配置上。

  • 最后一个问题是测试用例。我们希望确保中继“正常工作”,在测试的早期阶段,我们已经确定了需要中继的特定网络设置(即只有 STUN 无法完成请求。)最终我们了解到,即使是 TURN 服务器将无法通过该设置。

    我们确实花了一些时间尝试 NOSTUN 模式(它在 turnserver.config 中),但由于缺乏好的测试用例,我们无法确认中继是否正常工作。

    我不完全理解Trickle ICE Page上的测试代码,但我相信那里的结果是可靠的。

于 2017-04-23T08:48:59.270 回答
0

以下是一些故障排除提示:

  • 确保添加指纹选项,如 Polaris 所述
  • 现在尝试只使用静态用户名和密码,例如:

    用户=用户名:测试

  • 然后将其包含在您的 PeerConnectionConfig 中:

    {'url':'转:yourserver.com:3478',凭据:'test',用户名:'username'}

  • 使用“WebRTC Network Limiter”chrome 扩展来强制 WebRTC 使用 TURN 服务器。

  • 暂时注释掉 cert 和 pkey。

于 2017-04-12T00:47:00.977 回答