- 更新:2020-09-26 21:50:04
- 首发:2020-08-20 20:09:34
- 教程
- 8135
coturn是主流的开源 TURN
and STUN
服务器软件,支持诸多规范、功能和数据库。coturn
的出现对于WebRTC
的发展有着举足轻重的影响。
鉴于官方文档已经非常详尽,本文仅列举几个常见问题,具体的部署方法不再一一赘述。
coturn
开源仓库地址:https://github.com/coturn/coturn
配置参数
external-ip=IP
user=username:password
realm=turn.example.com
以上三个参数为满足系统运行最基本的参数。监听的是默认端口3478
。
需要注意的是,external-ip
需填写公网IP地址或公共IP地址(参考下文中“关于内网WebRTC”)。如果服务器位于NAT之后,则可以填写为external-ip=1.2.4.8/192.168.1.1
这样的形式,即public-ip[/private-ip]
。
realm
参数则为新版本的必填参数。(不知道从什么时候开始,这个参数变为必填参数,网上大部分文章都没有提到该参数,不填则系统无法正常工作。参照李超
老师的指导,随便填一个值就行,域名也不用解析)
以守护进程方式运行coturn
:
turnserver -L <public_ip_address> -o -a -f -r <realm-name>
基于Docker部署需要注意的问题
https://github.com/instrumentisto/coturn-docker-image,此项目是较多star的coturn docker image。
使用此项目的镜像,需要注意三个问题:
- 建议以
--network=host
方式运行coturn
的Docker
容器。Docker
部分版本在监听大量端口的时候,会消耗非常多的资源并可能产生异常。 Dockerfile
中默认指定了--external-ip=$(detect-external-ip)"
的参数,其中detect-external-ip
命令是请求外网服务器并返回公网IP地址,此方法不适用于内网WebRTC部署
。同时,由于该参数的存在,配置文件中就不能再填写external-ip
,可以直接覆盖此参数。- 使用
Docker
运行coturn
,在进行相应的健康检查时,需要留意对使用的端口状态也进行检查,避免因端口异常导致影响业务。
关于内网环境下的WebRTC部署
WebRTC的TURN/STUN服务
可以在内网进行部署,但是大部分场景下需要确保所有地址都可以访问到一个公共IP地址
。例如政务内网和企业专网处于不同的网段,但都可以通过31.1.2.3
的地址访问到TURN/STUN服务器
,这样就可以确保系统正常使用。
如果不处于同一网段,则可以考虑在路由器或其它网关设备上进行NAT设置,也就是进行IP转发。例如A内网访问B内网服务器使用31.1.2.3
这个IP,但是在B内网访问A内网中同一台服务器是10.0.0.3
这个IP,在A内网和B内网网段不冲突的情况下,可以将10.0.0.3
转发到31.1.2.3
来实现互通。
sudo iptables -t nat -A OUTPUT -d 10.0.0.3 -j DNAT --to-destination 31.1.2.3
基于Docker
内网部署,可以参考《Docker 内网部署 离线部署》。
如果不能设置到同一个公共IP,或者服务器本身存在多张网卡,亦或者中继服务器位于多层NAT后。这些情况都是可以实现互通的,接受付费咨询。
WebRTC部署调试技巧
- 可以访问
http://getip.icu/地址获取不同条件下当前客户端的公网IP地址(仅供WebRTC开发人员测试网络使用),也可以使用curl getip.icu
获取到公网IP地址。【2023年7月更新:该地址滥用人数过多,已被关闭】 - 经过授权的情况下,调试内网环境WebRTC可以参考《MacOS同时使用内网和外网(双网卡同时联网)》。
- 可以在一段通过
nc -l <端口>
监听端口,再在另一端通过nc -v <IP> <端口>
检查对应端口的连通情况。 - 可以通过https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/测试
TURN/STUN服务
部署的情况。其中ICE
选项里的IceTransport
为relay
,是测试仅TURN
服务下的情况。返回的数据中,显示Type
为srflx
表示STUN
服务可用。显示Type
为relay
且最终Done
表示TURN
服务可用。该项目也可克隆到内网环境进行ICE测试。
暂无内容
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢