You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署至VPS后WebRTC无法连接(已配置TURN服务器)

Mediasoup部署Vultr VPS后节点无法连接的排查建议
  • 检查mediasoup WebRTC Transport的listenIps配置
    这是最常见的核心问题:服务端创建WebRTC Transport时必须指定公网IP的announcedIp,否则返回给客户端的ICE Candidate会是VPS的内网IP,导致客户端无法访问。示例配置:

    const webRtcTransport_options = {
      listenIps: [
        { ip: '0.0.0.0', announcedIp: '你的VPS公网IP地址' }
      ],
      initialAvailableOutgoingBitrate: 1000000,
      // 其他必要参数...
    };
    

    确认announcedIp是Vultr控制台显示的公网IP,不能填内网IP或localhost。

  • 双重验证VPS的防火墙配置

    • 除了系统自带的防火墙(如ufw、firewalld),必须同时检查Vultr控制台的Cloud Firewall,确保mediasoup使用的TCP/UDP端口范围(默认是40000-49999)已被开放。
    • 在服务端打印transport.tuple字段,确认mediasoup实际绑定的端口在你开放的范围内,避免端口配置不匹配。
  • 确认TURN服务器的有效性

    • 打开Chrome的webrtc-internals,查看ICE候选列表中是否有relay类型的候选。如果只有host(本地内网)和srflx(STUN反射)候选,说明TURN未生效。
    • 检查metered.ca的用户名和凭证是否正确,确认凭证未过期(metered的临时凭证有效期通常为24小时)。
    • 简化ICE服务器配置,先只保留一个TCP类型的TURN配置测试,排除多配置的干扰:
      iceServers: [
        {
          urls: 'turn:a.relay.metered.ca:443?transport=tcp',
          username: '你的用户名',
          credential: '你的凭证'
        }
      ]
      
  • 排查客户端的ICE传输策略

    • 若客户端处于UDP被限制的网络环境(如公司内网),可以强制客户端仅使用relay候选,在创建SendTransport时添加:
      producerTransportRef.current = deviceRef.current.createSendTransport({
        ...params,
        iceTransportPolicy: 'relay', // 仅使用relay候选
        iceServers: [...你的TURN配置]
      });
      
    • 在webrtc-internals中查看ICE连接的失败细节,确认是候选配对失败还是DTLS握手失败,定位具体环节。
  • 测试VPS端口的外部可达性

    • 使用nc命令测试公网IP和端口的连通性:
      • TCP测试:nc -zv 你的VPS公网IP 端口号
      • UDP测试:nc -zvu 你的VPS公网IP 端口号
    • 若测试失败,说明端口仍未开放或VPS存在NAT限制,需重新核对防火墙和网络配置。

内容的提问来源于stack exchange,提问作者eso32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:23:26