coturn STUN 请求在本地工作,但不适用于远程连接

2024-01-29

我已成功向 coturn 服务器发出 TURN 请求(https://github.com/coturn/coturn https://github.com/coturn/coturn),但在执行 STUN 请求时失败。如果我尝试从运行服务器的同一台机器上 STUN 连接到 coturn 服务器turnutils_stunclient myIP https://github.com/coturn/coturn/wiki/turnutils_stunclient,服务器响应

RFC 5780 response 1
0: IPv4. Response origin: : IP1:3478
0: IPv4. Other addr: : IP2:3479
0: IPv4. UDP reflexive addr: IP1:36457

========================================
RFC 5780 response 2
0: IPv4. Response origin: : IP2:3479
0: IPv4. Other addr: : IP2:3479
0: IPv4. UDP reflexive addr: IP1:36457

========================================
RFC 5780 response 3
0: IPv4. Response origin: : IP2:3479
0: IPv4. Other addr: : IP2:3479
0: IPv4. UDP reflexive addr: IP1:36458

,这太棒了!为了远程测试 STUN 请求,我还在我的笔记本电脑上安装了 coturn。如果我从我的笔记本电脑发出相同的请求,stun 服务器仅响应 1 个响应,然后挂起。

RFC 5780 response 1
0: IPv4. Response origin: : IP1:3478
0: IPv4. Other addr: : IP2:3479
0: IPv4. UDP reflexive addr: IP1:36457

没有第二条和第三条消息,并且命令行被阻止。

运行javascript请求时进一步确认了问题:

function checkTURNServer(turnConfig, timeout){ 
  return new Promise(function(resolve, reject){
    setTimeout(function(){
        if(promiseResolved) return;
        resolve(false);
        promiseResolved = true;
    }, timeout || 5000);

    var promiseResolved = false
      , myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection   //compatibility for firefox and chrome
      , pc = new myPeerConnection({iceServers:[turnConfig]})
      , noop = function(){};
    pc.createDataChannel("");    //create a bogus data channel
    pc.createOffer(function(sdp){
      if(sdp.sdp.indexOf('typ relay') > -1){ // sometimes sdp contains the ice candidates...
        promiseResolved = true;
        resolve(true);
      }
      pc.setLocalDescription(sdp, noop, noop);
    }, noop);    // create offer and set local description
    pc.onicecandidate = function(ice){  //listen for candidate events
      if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1))  return;
      promiseResolved = true;
      resolve(true);
    };
  });   
}

checkTURNServer({"url":"stun:IP1:3478"}).then(function(bool){
    console.log('is TURN server active? ', bool? 'yes':'no'); // prints no!!
}).catch(console.error.bind(console));

我应该怎么做才能使 STUN 请求起作用?你能为我指出正确的方向吗?

- - - - - - - - -附加信息 - - - - - - - - - - -

我只测试了 TURN 功能,并且能够连接:

checkTURNServer({"url":"turn:IP1:3478",username: 'mainuser',
    credential: 'mainpassword' }).then(function(bool){
    console.log('is TURN server active? ', bool? 'yes':'no'); // prints yes
}).catch(console.error.bind(console));

我已经安装了coturn并将其配置为服务。这是我的内容/etc/systemd/system/coturn.service file:

[Unit]
Description=turnserver Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/turnserver -c /usr/local/etc/turnserver.conf
Restart=on-abort
[Install]
WantedBy=multi-user.target

当我跑步时systemctl start coturn,服务正常启动。

内容/usr/local/etc/turnserver.conf

listening-ip=IP1
listening-ip=IP2
lt-cred-mech
user=mainuser:mainpassword
realm=mydomain.com
max-bps=128000
cert=/etc/letsencrypt/live/mydomain.com/cert.pem
pkey=/etc/letsencrypt/live/mydomain.com/privkey.pem

的结果iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N FORWARD_IN_ZONES
-N FORWARD_IN_ZONES_SOURCE
-N FORWARD_OUT_ZONES
-N FORWARD_OUT_ZONES_SOURCE
-N FORWARD_direct
-N FWDI_iredmail
-N FWDI_iredmail_allow
-N FWDI_iredmail_deny
-N FWDI_iredmail_log
-N FWDO_iredmail
-N FWDO_iredmail_allow
-N FWDO_iredmail_deny
-N FWDO_iredmail_log
-N INPUT_ZONES
-N INPUT_ZONES_SOURCE
-N INPUT_direct
-N IN_iredmail
-N IN_iredmail_allow
-N IN_iredmail_deny
-N IN_iredmail_log
-N OUTPUT_direct

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

coturn STUN 请求在本地工作,但不适用于远程连接 的相关文章

  • iOS 和 Safari 11 WebRTC 不收集 STUN/TURN Trickle ICE 候选者

    在 iOS 11 iPhone 5s 和 iPhone 7 或桌面上使用 Safari 11 时 我的 Web 应用程序无法通过 CoTURN 服务器收集 WebRTC 中继 ICE 候选项 Web 应用程序 建立单向音频 WebRTC 对
  • Bug 报告者:getDisplayMedia 的替代品?

    我正在尝试在我的网站上实现错误报告器 我的目标是用户能够在解决问题时以声音描述问题并记录浏览器选项卡 错误报告将只是一个视频文件 可以通过电子邮件发送给我 看来提议的navigator mediaDevices getDisplayMedi
  • NAT 后面的 HTTP 服务器

    我正在尝试在多层 NAT 后面创建一个 apache 服务器 以便可以从 Internet 访问 限制 避免中继 有一个公共服务器 我们称他为OldMan 用于登录 眩晕 但其带宽太差 无法承载中继数据 我无权手动配置 NAT 3 用户无需
  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • 适用于高带宽应用的 WebRTC 数据通道

    我想通过 WebRTC 数据通道发送单向流数据 并且正在寻找最佳配置选项 高带宽 低延迟 抖动 以及其他人在此类应用程序中的预期比特率的经验 我的测试程序发送 2k 的块 使用 2k 的 bufferedAmountLowThreshold
  • 使用 django 通道将 webRTC 视频流发送到服务器

    我正在尝试创建一个用 django 编写的人脸检测 Web 应用程序 该应用程序是这样工作的 用户导航到该 url 相机在客户端计算机上启动 然后将每一帧发送到服务器进行人脸检测 然后将处理后的帧显示在网页上 我知道我无法使用 opencv
  • 什么是 STUN?它是否需要端口转发服务器?

    我对没有基础服务器的 p2p 通信进行了一些研究 并通过了 STUN 据我所知 STUN 是 NAT 打孔 的一种方式 不需要对等方进行端口转发即可连接 这是正确的吗 打孔到底是什么意思 这一切看起来都很脆弱 因为如果不需要端口转发 它就会
  • RecordRTC:Ondataavailable 被调用两次。只有第一个文件正确,其他文件已损坏或太小[重复]

    这个问题在这里已经有答案了 我想以2秒的间隔记录本地和远程流并用Ajax上传到服务器 但问题是 ondataavailable 方法被调用了两次 因此同一个视频被上传到服务器两次 第一个视频可以正常播放 而其余视频要么已损坏 要么非常小 不
  • 如何使用 MediaRecorder 作为 MediaSource

    作为学习 WebRTC 的练习 我试图并排显示本地网络摄像头和网络摄像头的延迟播放 为了实现这一目标 我尝试将记录的 blob 传递到 BufferSource 并使用相应的 MediaSource 作为视频元素的源 the ondataa
  • 未捕获的 ReferenceError:进程未定义简单对等 Javascript

    我目前正在学习 WebRTC 并使用 simple peer 和 React 和 Socket io 的 npm 包 当我尝试致电用户时 就会显示此错误 stream readable js 529 Uncaught ReferenceEr
  • 如何运行媒体流

    我创建了一个网络摄像头流 navigator getUserMedia video true function stream videoTag src window URL createObjectURL stream videoTag p
  • Android WebRTC 自定义捕获器

    我已经编译了 webRTC 演示应用程序 我看到捕获帧是由VideoCaptureAndroid java与本机代码紧密耦合的文件 我需要添加将我自己的帧推送到 webRTC 库以在视频通道上发送的功能 我可以用 C NDK 或 Java
  • NAT 穿越和 IPv6

    我很好奇一旦 IPv6 的部署和使用增加 NAT 和 NAT 穿越机制的用处 我们有很多 NAT 遍历机制 包括专有的 主要用于某种住宅或企业 NAT 背后的 IPv4 设备 客户端 鉴于 NAT 的出现是因为 IPv4 缺乏可用地址 那么
  • WebRTC 与 python

    我想用 python twisted 制作一个流服务器 它接收 WebRTC 视频流 然后对其应用一些 OpenCV 算法 但是我找不到 WebRTC 的 python 模块 如何使用 python twisted 发送和接收 WebRTC
  • WebRTC:强制对等点使用 TURN 服务器

    我有一个 webrtc 应用程序 它工作正常 但出于测试目的 我需要测试我的 TURN 服务器是否工作 但因为两个测试设备都在同一网络内 所以我无法测试 认为下面的代码会限制候选人仅那些使用 TURN 服务器的 function onIce
  • 我需要 TURN 服务器吗?

    在什么情况下我应该使用 TURN 服务器 现在我有一个运行完美的 WebRTC 应用程序 该应用程序即将发布 我是否需要设置自己的 TURN 服务器 或者可能仅适用于主要应用程序 WebRTC 可以通过多种方式进行连接 并且当它在第一个选择
  • WebRTC 暂停和恢复流

    我正在尝试使用 WebRTC 构建一个 Web 应用程序 当某些事件触发时需要暂停 恢复视频 音频流 我已经尝试过getTracks 0 stop 但我不知道如何恢复流 对此有什么建议吗 谢谢 getTracks 0 stop 是永久的 U
  • webrtc - 视频出现斑点,但它仍然是黑色的

    我使用 chrome 21 运行我的 webrtc 代码 如果我在同一个 chrome 中打开两个选项卡 然后打开其中包含 webrtc 代码的页面 一个选项卡用于发送视频流 一个选项卡用于接收视频流 效果很好 但是 如果我使用两种隐身模式
  • 检测 MediaStreamTrack 是否为黑色/空白

    我正在与peerjs 创建视频聊天 我使用以下功能切换相机 开 关 function toggleCamera localStream getVideoTracks 0 enabled localStream getVideoTracks
  • 无需画布/显示器即可拍摄隐形 WebRTC/视频照片

    我读了拍摄静态照片 https developer mozilla org en US docs Web API WebRTC API Taking still photos来自 MDN 的描述如何从网络摄像头捕获照片 使用视频元素和med

随机推荐