前情回顾
前面我们已经将聊天的基本功能完成了,接下来来安装coturn服务,生成webrtc视频通信
coturn服务集成了stun和turn服务器
三个常用的概念
STUN = 告诉你自己是谁 TURN = 帮你转发数据 coturn = STUN/TURN 的服务器实现软件
为什么需要 STUN / TURN?
因为现在大部分设备都在 NAT(内网)后面:
手机/电脑 → 路由器(NAT) → 公网
内网 IP(192.168.x.x)在公网是看不到的。
WebRTC / 视频通话 / P2P 通信 就必须解决:
👉 “我怎么让对方知道我的公网地址?”
STUN 是什么?
全称:
Session Traversal Utilities for NAT
作用:
👉 告诉客户端:你的公网 IP 和端口是多少
工作流程:
客户端 → STUN服务器
STUN服务器 → 告诉你:你在公网看到的地址是 1.2.3.4:5678
然后客户端把这个地址发给对方。
✅ 优点
- 轻量
- 免费
- 不转发数据
❌ 缺点
- 只能在 NAT 允许打洞的情况下成功
- 对称 NAT 基本失败
TURN 是什么?
全称:
Traversal Using Relays around NAT
作用:
👉 当打洞失败时,帮你转发数据
工作模式:
A → TURN服务器 → B
TURN 服务器相当于一个“中转站”。
✅ 优点
- 几乎 100% 成功
- 解决所有 NAT 问题
❌ 缺点
- 服务器要承担带宽
- 成本高
coturn 是什么?
👉 coturn 是一个 开源的 STUN + TURN 服务器软件
官网: https://github.com/coturn/coturn
你部署 coturn 之后:
- 可以当 STUN 服务器
- 也可以当 TURN 服务器
三者关系图
WebRTC 通信
│
┌───────────┴───────────┐
│ │
先尝试 STUN 如果失败 → TURN
│ │
直接P2P通信 通过服务器转发
│
coturn
(实现STUN和TURN的程序)
安装coturn
因为docker被限制,自己尝试安装了docker拉取coturn服务还是超时,所以果断选择本机安装。
本机安装有两种方式,一种源码方式,一种集成服务安装。
官方推荐集成服务安装,源码安装是为了制作自己的webrtc服务,修改源码才用到,这里我们不用。
# 更新软件包
sudo apt update
# 安装 Coturn
sudo apt install coturn -y
# 查看版本
turnserver --help | head -1
修改配置文件
先备份原来的配置文件
sudo cp /etc/turnserver.conf /etc/turnserver.conf.bak
再修改配置文件
sudo vim /etc/turnserver.conf
改为如下内容
# 监听端口
listening-ip = 0.0.0.0
listening-port=3478
tls-listening-port=5349
# 外部 IP
external-ip=81.68.86.146
#relay-ip=81.68.86.146
# 启用指纹
fingerprint
# 使用长期凭证机制
lt-cred-mech
# 用户认证
user=webrtc:Kx9mP2qL8rY5tZ
# Realm
realm=turn.example.com
# 日志
log-file=/var/log/turnserver/turnserver.log
verbose
# 端口范围
min-port=49152
max-port=65535
# 拒绝私有 IP
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
创建日志目录
# 创建日志目录
sudo mkdir -p /var/log/turnserver
# 设置权限
sudo chown turnserver:turnserver /var/log/turnserver
验证服务
# 查看端口监听
sudo netstat -tuln | grep 3478
# 查看日志
sudo tail -f /var/log/turnserver/turnserver.log
# 或者
sudo journalctl -u coturn -f
启用并启动服务
# 启用 Coturn 服务
sudo sed -i 's/#TURNSERVER_ENABLED=1/TURNSERVER_ENABLED=1/' /etc/default/coturn
# 启动服务
sudo systemctl enable coturn
sudo systemctl start coturn
# 查看状态
sudo systemctl status coturn
如果出错,可以手动编辑设置启动 Coturn 服务
# 编辑配置文件
sudo vim /etc/default/coturn
找到这一行:
#TURNSERVER_ENABLED=1
去掉注释符号 #,改为:
TURNSERVER_ENABLED=1
保存并且退出
常用管理命令
# 启动服务
sudo systemctl start coturn
# 停止服务
sudo systemctl stop coturn
# 重启服务
sudo systemctl restart coturn
# 查看状态
sudo systemctl status coturn
# 查看日志
sudo journalctl -u coturn -n 100 -f
# 查看配置文件
sudo cat /etc/turnserver.conf
云服务器开启端口
必须开放的端口:
- 3478 (UDP + TCP) - STUN/TURN 主端口
- 49152-65535 (UDP) - TURN 数据中继端口范围
可选端口(如果使用 TLS):
- 5349 (UDP + TCP) - TURN over TLS
腾讯云安全组配置步骤
1. 登录腾讯云控制台
访问:https://console.cloud.tencent.com/cvm/instance
2. 配置安全组
控制台 → 云服务器 → 实例列表 → 找到你的服务器 → 安全组 → 修改规则
3. 添加入站规则
| 类型 | 端口范围 | 协议 | 来源 | 策略 |
|---|---|---|---|---|
| 自定义 | 3478 | UDP | 0.0.0.0/0 | 允许 |
| 自定义 | 3478 | TCP | 0.0.0.0/0 | 允许 |
| 自定义 | 49152-65535 | UDP | 0.0.0.0/0 | 允许 |
| 自定义 | 5349 | UDP | 0.0.0.0/0 | 允许 |
| 自定义 | 5349 | TCP | 0.0.0.0/0 | 允许 |
快速验证端口是否开放
在你的服务器上执行:
# 查看 Coturn 是否监听端口
sudo netstat -tuln | grep -E '3478|5349'
# 应该看到类似输出:
# udp 0 0 0.0.0.0:3478 0.0.0.0:*
# tcp 0 0 0.0.0.0:3478 0.0.0.0:*
从外部测试(在你的本地电脑上):
# 测试 UDP 端口(需要安装 nc)
nc -u -v 81.68.86.146 3478
# 测试 TCP 端口
nc -v 81.68.86.146 3478
测试 TURN 服务
访问测试页面:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
填入:
- TURN URI:
turn:81.68.86.146:3478 - Username:
webrtc - Password:
Kx9mP2qL8rY5tZ
点击 Gather candidates,如果看到 relay 类型的候选者,说明成功!
先添加,然后点击add server
然后点击下方
如果需要修改配置
# 编辑配置文件
sudo vim /etc/turnserver.conf
# 保存后重启服务
sudo systemctl restart coturn
# 查看日志确认
sudo journalctl -u coturn -f



