Networking 虽然已到达IP和端口,但STUN绑定请求失败

Networking 虽然已到达IP和端口,但STUN绑定请求失败,networking,webrtc,nat,stun,turn,Networking,Webrtc,Nat,Stun,Turn,我正在测试一个WebRTC应用程序,该应用程序在数百对对等机上运行良好,但在一个特定对等机上失败(Matt)。考虑: Alice:WebRTC应用程序工作的对等方(NAT后面家庭网络上的笔记本电脑) Bob:WebRTC应用程序工作的对等方(企业网络中的Ubuntu服务器) Matt:WebRTC应用程序无法运行的对等方(企业网络中的Ubuntu服务器) Server:一个Ubuntu 18.04 EC2实例,我用来模拟STUN和TURN(下面有更多信息) 所使用的STUN和TURN服务器是

我正在测试一个WebRTC应用程序,该应用程序在数百对对等机上运行良好,但在一个特定对等机上失败(
Matt
)。考虑:

  • Alice
    :WebRTC应用程序工作的对等方(NAT后面家庭网络上的笔记本电脑)
  • Bob
    :WebRTC应用程序工作的对等方(企业网络中的Ubuntu服务器)
  • Matt
    :WebRTC应用程序无法运行的对等方(企业网络中的Ubuntu服务器)
  • Server
    :一个Ubuntu 18.04 EC2实例,我用来模拟
    STUN
    TURN
    (下面有更多信息)
所使用的
STUN
TURN
服务器是:

stun:global.stun.twilio.com:3478
turn:global.turn.twilio.com:3478 (with credentials)
问题
Alice
Bob
执行WebRTC信令,并且
iceConnectionState
在0.92秒内变为
connected

[0.074] onIceServers: [object Object],[object Object],[object Object],[object Object]
[0.081] createOffer
[0.161] onAnswer
[0.17] ICE STATE: new
[0.171] onTrack
[0.234] addIceCandidate
[0.235] addIceCandidate
[0.73] addIceCandidate
...
[0.928] ICE Connected     
现在,
Alice
Matt
尝试发送信号和
iceConnectionState
在60秒内不会更改为
connected
。如果我们等到70秒左右,状态变为
失败

[0.143] onIceServers: [object Object],[object Object],[object Object],[object Object]
[0.147] createOffer
[0.399] onAnswer
[0.408] ICE STATE: new
[0.409] onTrack
[0.541] addIceCandidate
[0.541] addIceCandidate
...
[15.528] addIceCandidate
[76.77] ICE FAILURE: failed
Alice
Bob
使用与其他100个对等方相同的代码/堆栈的每次尝试信令,并且在每种情况下,对等方连接都已建立,
iceConnectionState
在2-3秒内变为
已连接

我们对
Matt

测试1:IP/端口可达性
以下工作:

telnet global.turn.twilio.com 3478
这将确认到端口3478的传出TCP流量,并且twilio服务器未被阻止

测试2:UDP流量
我在
服务器上创建了一个简单的
netcat
侦听器,如下所示:

nc -ul 3478
nc -u <SERVER_IP> 3478
然后,
Matt
能够将数据包发送到此服务器,如下所示:

nc -ul 3478
nc -u <SERVER_IP> 3478
但是,
Matt
绑定测试失败:

root@YYYYY:/# stunclient --verbosity 9 --mode full global.stun.twilio.com 3478
Resolved global.stun.twilio.com to 34.203.250.156:0
config.fBehaviorTest = true
config.fFilteringTest = true
config.timeoutSeconds = 0
config.uMaxAttempts = 0
config.addrServer = 34.203.250.156:3478
socketconfig.addrLocal = 0.0.0.0:0
Sending message to 34.203.250.156:3478
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Sending message to 34.203.250.156:3478
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Continuing to wait for response...
Binding test: fail
Behavior test: fail
Filtering test: fail
服务器上的
stunserver--primaryport 8085
执行相同的测试。结果是一致的

==================

对马特有以下问题:

  • 如果
    STUN
    服务器的IP和端口是可访问的,并且
    UDP
    流量没有被阻止,那么为什么
    STUN客户端
    请求失败
  • IT管理员需要做什么才能允许STUN请求?我应该问什么
  • 为什么没有通过
    TURN
    服务器建立对等连接?我可以确认Twilio
    TURN
    服务器工作正常。我在我的Twilio帐户上看到了来自其他同行的流量,涓流冰测试也成功了。当
    STUN
    找不到对等方的外部IP/端口时,TURN不应该中继流量吗

谢谢

我有一个WebRTC项目遇到了类似的问题。ubuntu digital ocean上的一个对等机无法连接。我发现的是

我必须打开数字海洋防火墙上的端口。这些是我必须启用的端口

#+BEGIN_SRC
  107  ufw allow 49152:65535/udp
  108  ufw allow 3478/udp
  109  ufw allow 3478/tcp
#+END_SRC
注意,您同时需要
3478
udp和tcp。在我的例子中,我使用的是STUN/TRUN服务器,它被配置为在这个端口上运行

    environment:
      - TURN_PORT_START=49152
      - TURN_PORT_END=65535
我认为这是默认的转弯范围,但不确定转弯:global.TURN.twilio.com:3478
是否相同

我会在
Matt
对等机上检查该端口范围


也许您可能希望托管自己的TURN服务器,以检查那里正在发生的连接。

我有一个WebRTC项目,该项目也有类似的问题。ubuntu digital ocean上的一个对等机无法连接。我发现的是

我必须打开数字海洋防火墙上的端口。这些是我必须启用的端口

#+BEGIN_SRC
  107  ufw allow 49152:65535/udp
  108  ufw allow 3478/udp
  109  ufw allow 3478/tcp
#+END_SRC
注意,您同时需要
3478
udp和tcp。在我的例子中,我使用的是STUN/TRUN服务器,它被配置为在这个端口上运行

    environment:
      - TURN_PORT_START=49152
      - TURN_PORT_END=65535
我认为这是默认的转弯范围,但不确定转弯:global.TURN.twilio.com:3478
是否相同

我会在
Matt
对等机上检查该端口范围

也许您可能希望托管自己的TURN服务器,以检查正在那里发生的连接