Coturn 服务器 - 中继不工作
Coturn server - Relay is not working
我正在尝试为我的基于 WebRTC 的应用程序设置一个 COTURN 服务器。但是,我遇到了一些我无法理解的错误消息,并且在互联网上找不到任何帮助。
以下是有关该应用的一些详细信息:
两个用户登录到该应用程序,其中一个用户可以与另一个用户共享他们的屏幕 - 因此流只有一个方向
我能够使该应用程序在内部网和某些外部网络上运行。所以我相信只要 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 服务器上工作,所以它也可以在 working TURN 服务器上工作?因此,错误意味着问题出在 TURN 服务器上?
我可以看到一些错误 'Allocation Timeout'。这是否意味着指的是可能不足的任何 RAM/CPU/Network 分配?
有些请求的用户名部分为空“<>”而不是“”,并且后面跟着“401 Unauthorized”,而我已经三次检查了 RTCPeerConnection 配置 - 它们确实包含用户名和密码。
除了上面的日志,我还经常看到“438 Wrong nonce”出现。我对此进行了一些搜索,但它似乎不是我可以通过 JS 控制的东西。跟服务器配置有关系吗?
谢谢!感谢您的帮助。
您的配置如何?
我的 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
等端口一起使用
以下是一些故障排除提示:
- 确保添加指纹选项,如 Polaris 所述
暂时尝试使用静态用户名和密码,例如:
user=用户名:test
然后将其包含在您的 PeerConnectionConfig 中:
{'url': 'turn:yourserver.com:3478', 凭证: 'test', 用户名: 'username'}
使用"WebRTC Network Limiter" chrome扩展强制WebRTC使用TURN服务器。
暂时注释掉 cert 和 pkey。
我的 TURN 服务器设置存在一些问题。
首先,我们是从一个大约有两年历史的博客中获取的。结果,这个设置也是两年前的 - Coturn Monza。理想的开始方式是获取 Coturn AMI(Amazon Machine Image)(Version 4.5.0.6 details)并使用它来设置服务器。或者,我们至少应该通过 git 存储库进行最新设置。
第二个问题是配置。甚至在此处发布问题之前,我们就错过了在服务器上打开必要的端口。一旦我们这样做了,我们就开始收到 STUN 响应,但是中继还没有工作。
第三个关键问题是 Turnserver.config 文件中的配置。我们几乎没有完成所有配置,在 Polaris 的回答后我们完成了。配置文件对每个配置都有充分的解释,问题确实出在配置上。
最后一个问题是测试用例。我们想确保中继是 "working",并且在测试的早期阶段我们已经确定了需要中继的特定网络设置(即只有 STUN 无法完成请求。)最终我们了解到,即使TURN 服务器将无法通过该设置。
我们确实花了一些时间尝试 NOSTUN 模式(它在 turnserver.config 中),但由于缺乏好的测试用例,我们无法确认中继是否正常工作。
Trickle ICE Page上的测试代码我不是很懂,但我相信那边的结果是可靠的。
我正在尝试为我的基于 WebRTC 的应用程序设置一个 COTURN 服务器。但是,我遇到了一些我无法理解的错误消息,并且在互联网上找不到任何帮助。
以下是有关该应用的一些详细信息:
两个用户登录到该应用程序,其中一个用户可以与另一个用户共享他们的屏幕 - 因此流只有一个方向
我能够使该应用程序在内部网和某些外部网络上运行。所以我相信只要 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 服务器上工作,所以它也可以在 working TURN 服务器上工作?因此,错误意味着问题出在 TURN 服务器上?
我可以看到一些错误 'Allocation Timeout'。这是否意味着指的是可能不足的任何 RAM/CPU/Network 分配?
有些请求的用户名部分为空“<>”而不是“”,并且后面跟着“401 Unauthorized”,而我已经三次检查了 RTCPeerConnection 配置 - 它们确实包含用户名和密码。
除了上面的日志,我还经常看到“438 Wrong nonce”出现。我对此进行了一些搜索,但它似乎不是我可以通过 JS 控制的东西。跟服务器配置有关系吗?
谢谢!感谢您的帮助。
您的配置如何?
我的 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
等端口一起使用以下是一些故障排除提示:
- 确保添加指纹选项,如 Polaris 所述
暂时尝试使用静态用户名和密码,例如:
user=用户名:test
然后将其包含在您的 PeerConnectionConfig 中:
{'url': 'turn:yourserver.com:3478', 凭证: 'test', 用户名: 'username'}
使用"WebRTC Network Limiter" chrome扩展强制WebRTC使用TURN服务器。
暂时注释掉 cert 和 pkey。
我的 TURN 服务器设置存在一些问题。
首先,我们是从一个大约有两年历史的博客中获取的。结果,这个设置也是两年前的 - Coturn Monza。理想的开始方式是获取 Coturn AMI(Amazon Machine Image)(Version 4.5.0.6 details)并使用它来设置服务器。或者,我们至少应该通过 git 存储库进行最新设置。
第二个问题是配置。甚至在此处发布问题之前,我们就错过了在服务器上打开必要的端口。一旦我们这样做了,我们就开始收到 STUN 响应,但是中继还没有工作。
第三个关键问题是 Turnserver.config 文件中的配置。我们几乎没有完成所有配置,在 Polaris 的回答后我们完成了。配置文件对每个配置都有充分的解释,问题确实出在配置上。
最后一个问题是测试用例。我们想确保中继是 "working",并且在测试的早期阶段我们已经确定了需要中继的特定网络设置(即只有 STUN 无法完成请求。)最终我们了解到,即使TURN 服务器将无法通过该设置。
我们确实花了一些时间尝试 NOSTUN 模式(它在 turnserver.config 中),但由于缺乏好的测试用例,我们无法确认中继是否正常工作。
Trickle ICE Page上的测试代码我不是很懂,但我相信那边的结果是可靠的。