WebRTC TURN连通性测试的无直连环境搭建咨询
TURN功能测试环境搭建及验证方案
方法1:iptables流量拦截(Linux端快速测试用)
通过防火墙规则直接屏蔽对等端的直连流量,强制WebRTC走TURN转发,操作成本最低。
- 提前确认你两个测试端的公网IP,以及WebRTC应用使用的UDP端口范围,默认一般为1024~65535
- 在其中一台测试端执行以下规则,拦截所有来自另一测试端的入站流量:
iptables -A INPUT -s <对等端公网IP> -j DROP - 为避免端口漏通,可额外拦截所有UDP入站流量:
iptables -A INPUT -p udp --dport 1024:65535 -j DROP - 测试完成后清空规则恢复正常通信:
iptables -F && iptables -X
注意:操作iptables前请确保你有测试端的控制台访问权限,避免误封SSH端口导致无法远程连接
方法2:对称NAT环境模拟(接近真实业务场景)
对称NAT场景下STUN打洞无法成功,必须走TURN转发,可模拟最普遍的公网无法直连的用户场景。
- 准备两台独立的家用路由器,分别接入不同的运营商宽带,或者同一宽带下两台路由器都开启对称NAT模式(部分路由器叫NAT4模式,可在路由器管理后台的网络设置页找到开关)
- 两个测试设备分别接入两台路由器的内网,不要做任何端口映射配置
- 确认两台路由器的公网出口不存在互访的白名单规则,此时两台测试设备无法通过STUN打洞建立直连,会自动触发TURN转发逻辑
验证TURN是否实际生效的方式
- coturn服务端开启verbose日志,在coturn配置文件中开启
verbose参数后重启服务,测试过程中查看日志,出现allocate、relay关键词即为TURN分配了转发端口且有流量经过 - 测试端执行tcpdump抓包:
tcpdump -i any host <你的TURN服务器公网IP>,如果所有WebRTC相关的UDP包都发往TURN服务器IP,没有直接发往对等端IP的流量,即为TURN生效 - 可在你的C++ WebRTC代码中调用
RTCPeerConnection的getStats接口,查询selectedCandidatePair统计项,只要其中任意一侧的candidate类型为relay,即可确认当前连接走的是TURN转发
内容的提问来源于stack exchange,提问作者NoTrust
相关产品推荐
相关产品推荐

