首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >虽然IP和端口已到达,但STUN绑定请求失败

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

Stack Overflow用户
提问于 2020-09-23 07:20:35
回答 1查看 2.4K关注 0票数 2

我正在测试一个WebRTC应用程序,它在数百对对等点上运行得非常好,但在一个特定的对等点上却失败了(下面的Matt)。考虑:

  • Alice:WebRTC应用程序工作的对等程序(NAT后家庭网络上的笔记本电脑)
  • Bob:WebRTC应用程序工作的对等程序(企业网络中的Ubuntu服务器)。
  • Matt:WebRTC应用程序不能工作的对等服务器(企业网络中的Ubuntu服务器)
  • Server:我用来模拟STUNTURN的Ubuntu18.04 EC2实例(下面将详细介绍)

所使用的STUNTURN服务器如下:

代码语言:javascript
运行
复制
stun:global.stun.twilio.com:3478
turn:global.turn.twilio.com:3478 (with credentials)

问题

AliceBob在0.92s内执行WebRTC信号,iceConnectionState变为connected

代码语言:javascript
运行
复制
[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     

现在,AliceMatt尝试信令和iceConnectionState在60多年内不改变为connected。如果我们等到70年代,状态就会改变为failed

代码语言:javascript
运行
复制
[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

AliceBob分别尝试使用与100个其他对等点相同的代码/堆栈发送信令,在每种情况下,都建立了对等连接,并且iceConnectionState在2-3秒内更改为connected

我们在Matt上执行以下测试

测试1: IP/端口可达性

以下工作:

代码语言:javascript
运行
复制
telnet global.turn.twilio.com 3478

这证实了发送到端口3478的TCP流量,twilio服务器没有被阻塞。

测试2: UDP流量

我在netcat上创建了一个简单的Server侦听器,如下所示:

代码语言:javascript
运行
复制
nc -ul 3478

然后,Matt能够向该服务器发送数据包,如下所示:

代码语言:javascript
运行
复制
nc -u <SERVER_IP> 3478

这证实了发送到端口3478的UDP通信没有被阻塞。

测试3:特技演员

AliceBob都可以成功地执行眩晕绑定:

代码语言:javascript
运行
复制
root@XXXX:/# stunclient --verbosity 9 global.stun.twilio.com 3478
Resolved global.stun.twilio.com to 54.244.51.6:0
config.fBehaviorTest = false
config.fFilteringTest = false
config.timeoutSeconds = 0
config.uMaxAttempts = 0
config.addrServer = 54.244.51.6:3478
socketconfig.addrLocal = 0.0.0.0:0
Sending message to 54.244.51.6:3478
Got response (76 bytes) from 54.244.51.6:3478 on interface 10.1.13.185:47172
Other address is 54.244.51.6:3479

Binding test: success
Local address: 10.1.13.185:47172
Mapped address: 50.209.172.197:47172

但是,Matt没有通过绑定测试:

代码语言:javascript
运行
复制
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 8085Server上也进行了同样的测试。结果是相同的。

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

有以下关于Matt的问题

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-09-23 17:51:06

我有一个WebRTC项目,也有类似的问题。在一个乌本图数字海洋上的同龄人无法连接。我发现

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

代码语言:javascript
运行
复制
#+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服务器,并将其配置为在此端口上运行。

代码语言:javascript
运行
复制
    environment:
      - TURN_PORT_START=49152
      - TURN_PORT_END=65535

我认为这是默认的转弯范围,但不确定turn:global.turn.twilio.com:3478是否相同。

我会检查Matt对等点上的端口范围

也许您可能希望宿主自己的转服务器来检查正在发生的连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64022930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档