STUN/TURN 服务器配置与集成
ICE 服务器的作用
组件 | 功能 | 用途 |
---|---|---|
STUN | 探测 NAT 类型,获取公网 IP 和端口 | 帮助 ICE 协议发现网络路径 |
TURN | 中继服务器 | 当直接连接失败时,作为中继转发媒体流 |
搭建 STUN/TURN 服务器(推荐使用 coturn)
coturn 是一个开源的 STUN/TURN 服务器实现,广泛用于 WebRTC 项目。
1. 安装 coturn(Linux 环境)
Ubuntu/Debian
sudo apt update
sudo apt install coturn
CentOS/RHEL
sudo yum install epel-release
sudo yum install coturn
2. 配置 coturn
编辑配置文件(通常位于 /etc/turnserver.conf
):
listening-port=3478
tls-listening-port=5349
external-ip=YOUR_PUBLIC_IP
realm=yourdomain.com
server-name=yourdomain.com
lt-cred-mech
use-auth-secret
static-auth-secret=your-secret-key
3. 启动 coturn
sudo systemctl enable coturn
sudo systemctl start coturn
安全配置建议
- 限制访问权限:通过防火墙限制 STUN/TURN 端口(默认 3478、5349)
- 启用 TLS:配置证书以支持
turns://
协议 - 限制中继带宽:在高并发场景中限制每个连接的带宽
- 防止滥用:通过
static-auth-secret
或数据库认证控制访问权限
测试 STUN/TURN 服务器
使用命令行工具测试 STUN:
turnutils_stunclient --host=your-stun-server-ip --port=3478
使用浏览器测试 TURN:
在 WebRTC 应用中配置 ICE 服务器:
javascript
const configuration = {
iceServers: [
{
urls: "stun:your-stun-server:3478"
},
{
urls: "turn:your-turn-server:3478",
username: "user",
credential: "password"
}
]
};
const peerConnection = new RTCPeerConnection(configuration);
在 WebRTC 应用中使用 ICE 服务器
只需在 RTCPeerConnection
的构造参数中配置 iceServers
:
javascript
const configuration = {
iceServers: [
{
urls: "stun:your-stun-server:3478"
},
{
urls: "turn:your-turn-server:3478",
username: "user",
credential: "password"
}
]
};
const peerConnection = new RTCPeerConnection(configuration);
常见问题排查
注意:以下是常见问题及解决方案
问题 | 可能原因 | 解决方案 |
---|---|---|
ICE 连接失败 | 网络不通、NAT 类型限制 | 检查 STUN/TURN 服务器是否可达 |
TURN 中继失败 | 配置错误、认证失败 | 检查用户名/密码、共享密钥 |
ICE 超时 | 网络延迟、防火墙拦截 | 检查防火墙规则、增加 ICE 超时时间 |
多个候选地址冲突 | ICE 候选地址处理不当 | 在前端逻辑中合理处理候选地址排序 |
总结
- 安装 coturn(开源 STUN/TURN 实现)
- 配置 STUN/TURN 服务器(IP、端口、认证)
- 启动并测试 coturn 服务
- 在 WebRTC 应用中配置
iceServers
- 安全加固(防火墙、TLS、认证)
- 监控和日志分析(
/var/log/turnserver.log
)
补充:商业 ICE 服务器(可选)
服务 | 特点 |
---|---|
Xirsys | 提供 TURN/STUN 服务,支持全球部署 |
Twilio TURN | 提供 TURN 中继服务 |
Agora.io | 提供完整的 WebRTC 云服务 |
© 2025 WebRTC 指南