-
在线客服
工作日:9:00-24:00
-
商务合作
15366085265
-
QQ联系方式
1872421339
-
大客户经理
宋经理
本文是一篇涵盖 WebRTC 中 STUN/TURN 的原理、coturn 的安装、配置、排错、以及浏览器差异等关键点。
WebRTC 的核心目标是实现浏览器与浏览器之间的实时通信(P2P)。
但在实际网络环境中,大部分设备处于 NAT / 内网环境,因此两个浏览器无法直接互连。
WebRTC 使用 ICE(Interactive Connectivity Establishment) 机制来解决这个问题,ICE 依赖两个关键组件:
-STUN:获取本机的“外网映射地址” → 用于 NAT 打洞
- TURN:当打洞失败时,通过 TURN 服务器进行数据中继(兜底方案)
因此:没有 STUN → 无法建立直连,没有 TURN → NAT 严格环境下无法通信。
coturn 是目前全球使用最广的开源 STUN/TURN 实现,具有:
- 稳定、成熟、跨平台
- 支持 TLS/DTLS、安全性高
- 性能优秀,支持高并发
- 多租户、多 realm、多用户
- 配置灵活,企业级可用
无论是自建 WebRTC 服务、视频会议、直播互动,coturn 都是首选方案。
以下示例基于 Ubuntu 20+,其他版本类似。
1. 安装依赖:
sudo apt-get update
sudo apt-get install libssl-dev make sqlite libsqlite3-dev
2.(可选)安装 libevent:
wget https://github.com/libevent/libevent/releases/download/release-2.1.10-stable/libevent-2.1.10-stable.tar.gz
tar -zxvf libevent-2.1.10-stable.tar.gz
cd libevent-2.1.10-stable
./configure
make
sudo make install
3. 下载并编译 coturn:
wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
tar -zxvf 4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure
make
sudo make install
复制默认配置文件:
cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
以下是最关键的配置项:
listening-port=3478
tls-listening-port=5349
external-ip=你的服务器公网IP
user=username:password
realm=myrealm
lt-cred-mech
fingerprint
用于创建账号:
turnadmin -a -u username -p password -r myrealm
启动 coturn:
turnserver -o -a -f -v -r myrealm
Chrome 官方提供了最权威的 ICE 测试工具:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
输入你的 STUN / TURN 地址后点击“Gather candidates”,如果能看到:
- srflx → STUN 正常
- relay → TURN 正常
Chrome 在校验 STUN 地址时更严格,如果配置不正确,会提示:
STUN server address is incompatible (701)
常见原因包括:
- STUN 使用了内网 IP
- external-ip 写错
- 域名指向非公网 IP
- 防火墙未开放 UDP 3478
✓ 服务器是否真正拥有公网 IP?
✓ 3478(UDP)是否开放?
✓ external-ip 是否正确?
✓ 账号是否在 turnserver.conf 内?
✓ 浏览器是否成功生成 srflx/relay?
✓ 是否使用 Docker(需要 --net=host)?
WebRTC → 必须依赖 STUN(打洞)与 TURN(兜底)。
coturn → 开源、强大、稳定,是最佳选择。
本教程给出了安装、配置、测试、排错全流程,可直接用于生产部署。