2017-04-07 70 views
2

我想为基于WebRTC的应用程序设置COTURN服务器。不过,我遇到了一些我无法理解的错误消息,并且无法在互联网上找到任何帮助。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文件看起来'S:

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未授权”,而我已经三重检查的RTCPeerConnection配置 - 它们确实包含用户名和密码。

  • 除了上面的日志,我还看到'438错误的随机数'也经常出现。我搜索了一下,但它似乎并不是我可以通过JS控制的东西。它与任何服务器配置有关吗?

谢谢!感谢你的帮助。

回答

1

我在TURN服务器设置中遇到了一些问题。

  • 首先,我们从一个大约两岁的博客取了它。因此,该设置也是两年前的 - Coturn Monza。开始的理想方法是获得Coturn AMI(Amazon Machine Image)(Version 4.5.0.6 details)并使用它来设置服务器。或者,我们至少应该通过git存储库进行最新的设置。

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

  • 第三个关键问题在于Turnserver.config文件中的配置。我们几乎没有完成所有配置,并且在Polaris的答案之后我们做了。配置文件包含每个配置的足够解释,问题确实在配置中。

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

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

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

1

你的配置是怎样的?

实现WebRTC使用我的工作例如:

须藤纳米/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 

须藤纳米的/ etc/turnuserdb。conf - >用户名:密码

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

注意,你总是需要与港口使用您的IP/URL像123.456.789.10:80

+0

我的监听端口是3478,因此url中的端口是3478。我没有指纹,失效随机数,总配额,bps容量,无回送对等体,无组播对等体。我将在问题中发布我当前的配置。此外,服务器通过了Trickle ICE的测试。但是当我的应用程序使用它时仍然有错误。 – Nisarg

+0

你的答案并不完整,但它帮助我解决了这个问题。我会很快发布一个答案。谢谢! – Nisarg

0

这里有一些故障排除提示:

  • 确保您加入指纹的选项,如北极星
  • 尽量只使用一个静态的用户名和密码,现在,如提及:

    用户=用户N AME:测试

  • 则包括这在你的PeerConnectionConfig:

    { 'URL': '转:yourserver.com:3478',凭据: '测试',用户名: '用户名'}

  • 使用“WebRTC网络限制器”Chrome扩展来强制WebRTC使用TURN服务器。

  • 现在注释掉证书和pkey。

+0

谢谢,cert和pkey的作用是什么?早些时候我注意到,当我遗漏了cert和pkey时,服务器在STUN模式下工作不正常。 – Nisarg

+0

我认为这可能是TLS。我不使用它在我的配置。 – CpnCrunch