在线咨询
在线客服

工作日:9:00-24:00

商务合作

15366085265

QQ联系方式

1872421339

大客户经理

宋经理

客户经理
专业客户经理,解答您的疑问

WebRTC:基于 coturn 的 STUN / TURN 服务器搭建

发布日期

本文是一篇涵盖 WebRTC 中 STUN/TURN 的原理、coturn 的安装、配置、排错、以及浏览器差异等关键点。

一、为什么 WebRTC 一定需要 STUN / TURN?

WebRTC 的核心目标是实现浏览器与浏览器之间的实时通信(P2P)。

但在实际网络环境中,大部分设备处于 NAT / 内网环境,因此两个浏览器无法直接互连。

WebRTC 使用 ICE(Interactive Connectivity Establishment) 机制来解决这个问题,ICE 依赖两个关键组件:

-STUN:获取本机的“外网映射地址” → 用于 NAT 打洞

- TURN:当打洞失败时,通过 TURN 服务器进行数据中继(兜底方案)

因此:没有 STUN → 无法建立直连,没有 TURN → NAT 严格环境下无法通信。

二、为什么建议使用 coturn?

coturn 是目前全球使用最广的开源 STUN/TURN 实现,具有:

- 稳定、成熟、跨平台

- 支持 TLS/DTLS、安全性高

- 性能优秀,支持高并发

- 多租户、多 realm、多用户

- 配置灵活,企业级可用

无论是自建 WebRTC 服务、视频会议、直播互动,coturn 都是首选方案。

三、Ubuntu 中安装 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

四、coturn 最关键的配置(必看)

复制默认配置文件:

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

五、如何测试你的 STUN / TURN 是否工作正常?

Chrome 官方提供了最权威的 ICE 测试工具:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

输入你的 STUN / TURN 地址后点击“Gather candidates”,如果能看到:

- srflx → STUN 正常
- relay → TURN 正常

六、Chrome 报错 701,而 Firefox 正常?原因在这里

Chrome 在校验 STUN 地址时更严格,如果配置不正确,会提示:

STUN server address is incompatible (701)

常见原因包括:

- STUN 使用了内网 IP
- external-ip 写错
- 域名指向非公网 IP
- 防火墙未开放 UDP 3478

七、完整排查 checklist(非常实用)

✓ 服务器是否真正拥有公网 IP?

✓ 3478(UDP)是否开放?

✓ external-ip 是否正确?

✓ 账号是否在 turnserver.conf 内?

✓ 浏览器是否成功生成 srflx/relay?

✓ 是否使用 Docker(需要 --net=host)?

八、总结

WebRTC → 必须依赖 STUN(打洞)与 TURN(兜底)。

coturn → 开源、强大、稳定,是最佳选择。

本教程给出了安装、配置、测试、排错全流程,可直接用于生产部署。