coturn STUN服务:主机名/URL无法访问仅IP可行的问题排查
解决coturn无法通过主机名访问、仅支持IP的问题
核心原因分析
浏览器的STUN客户端对主机名解析存在特殊限制:
- 现代浏览器优先采用标准DNS解析,不支持
My-PC这类局域网短主机名(NetBIOS名称)的直接识别 - 部分STUN实现要求主机名必须为完全限定域名(FQDN),而非无后缀的短名称
具体解决方案
1. 启用mDNS实现局域网主机名解析
通过mDNS(多播DNS)让主机名以.local后缀形式被浏览器正常解析:
- Windows:开启系统服务中的「DNS Client」和「Function Discovery Resource Publication」
- Linux/macOS:Linux安装avahi服务,macOS默认支持mDNS,直接使用
主机名.local作为STUN地址,示例代码:const stunUrl = `stun:My-PC.local:3478`; const pc = new RTCPeerConnection({ iceServers: [{ urls: stunUrl }] });
2. 确保coturn监听所有网络接口
修改coturn配置文件(通常为/etc/turnserver.conf):
- 设置
listening-ip=0.0.0.0,让服务监听所有可用网卡的IP - 删除或注释单一
listening-ip的配置项,避免遗漏主机名解析到的任意IP
3. 配置局域网静态DNS映射
借助路由器DHCP静态分配功能,给运行coturn的机器分配固定内网IP,再在局域网DNS服务器中注册主机名与IP的映射。这种方式无需手动修改每台设备的hosts文件,即可实现主机名访问。
4. 验证主机名解析有效性
在浏览器开发者工具控制台执行以下命令,确认主机名能正确解析到内网IP:
await dns.resolve('My-PC'); // 或My-PC.local
若返回对应IP则解析正常;若返回错误,需排查DNS/mDNS配置。
关于onicecandidateerror 701错误
该错误属于非致命反馈,是STUN客户端尝试多种候选地址时的正常失败情况,只要能成功获取srflx类型的候选地址,就不会影响WebRTC连接,无需额外处理。
内容的提问来源于stack exchange,提问作者jeremykentbgross
相关产品推荐
相关产品推荐

