为什么选择Coturn?
Coturn是开源的TURN/STUN服务器,解决WebRTC通信中的NAT穿透问题。通过Docker部署可避免环境依赖问题,实现快速搭建高可用ICE服务。
完整部署流程
1. 宿主机准备
# 创建配置目录
mkdir -p /opt/docker/coturn/{ssl,compose}
# 下载默认配置文件
cd /opt/docker/coturn
wget -O turnserver.conf https://raw.githubusercontent.com/coturn/coturn/master/docker/coturn/turnserver.conf
cp turnserver.conf turnserver.conf.default # 备份原始配置
# 生成自签名SSL证书(重要:生产环境建议使用Let's Encrypt)
cd ssl
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 -nodes \
-keyout privatekey.pem -out certificate.pem \
-subj "/CN=yourdomain.com" # 替换为你的域名
2. 关键配置修改
编辑配置文件 vim /opt/docker/coturn/turnserver.conf
:
# 网络配置
listening-port=3478
tls-listening-port=5349
listening-ip=192.168.1.10 # 内网IP(通过ip addr show eth0查看)
external-ip=203.0.113.5 # 公网IP(必须正确!)
realm=turn.yourdomain.com # 域名或公网IP
# 认证设置
user=myuser:mypassword # 格式:用户名:密码(建议强密码)
# 证书路径(映射到容器内)
cert=/etc/coturn/ssl/certificate.pem
pkey=/etc/coturn/ssl/privatekey.pem
# 安全增强
no-stdout-log # 禁用明文日志
stale-nonce=300 # 防止重放攻击
min-port=49152
max-port=65535
# CLI管理(可选)
cli-ip=127.0.0.1 # 限制本地访问
cli-port=5766
cli-password=YourSecureCLIPwd # 修改默认密码!
3. Docker Compose部署
创建 vim /opt/docker/coturn/compose/docker-compose.yml
:
version: '3.8'
services:
coturn:
image: coturn/coturn:4.6.3
container_name: coturn
restart: unless-stopped
volumes:
- /opt/docker/coturn/turnserver.conf:/etc/coturn/turnserver.conf
- /opt/docker/coturn/ssl:/etc/coturn/ssl
network_mode: "host" # 必须使用host模式
4. 启动服务
cd /opt/docker/coturn/compose
docker compose up -d # 后台运行
# 查看日志验证
docker logs -f coturn | grep "listening"
# 预期输出:
# 0: : Listening on: 203.0.113.5:3478
# 0: : Listening on: 203.0.113.5:5349
服务验证
访问 WebRTC ICE测试工具:
URI格式
turn:203.0.113.5:3478?transport=udp turn:turn.yourdomain.com:5349?transport=tcp
认证信息
- Username:
myuser
- Password:
mypassword
- Username:
成功标志
出现relay
类型候选地址即表示中继服务正常:srflx | udp | 203.0.113.5:63412 # 反射地址(NAT穿透) relay | udp | 203.0.113.5:51234 # 中继地址(关键!)
常见问题排查
无
relay
候选地址?- 检查防火墙:确保UDP端口开放(尤其49152-65535)
- 验证
external-ip
配置:必须与服务器公网IP一致 - 测试端口连通性:
nc -zv 203.0.113.5 3478
TLS证书错误?
- 浏览器访问
https://turn.yourdomain.com:5349
检查证书有效性 - 更新证书:替换
ssl/
目录文件后重启容器
- 浏览器访问
性能优化建议
# 增加线程数(根据CPU核心数调整) thread-num=8 # 限制用户带宽 user-quota=1200 # 单位:KB/s total-quota=12000
安全加固措施
- 禁止匿名访问:移除配置中的
no-auth
选项 - 定期轮换密码:通过
user=新用户名:新密码
动态更新 - 防火墙规则:仅允许信令服务器IP访问3478/5349端口
- 日志审计:挂载日志卷
- ./logs:/var/log/coturn
最终效果:您的WebRTC应用将获得稳定的NAT穿透能力,支持1:1通话至千人直播场景。部署过程仅需10分钟,更新时只需替换镜像版本和配置文件!
延伸阅读:结合Traefik反向代理实现自动HTTPS证书续签,进一步提升生产环境可靠性。