CentOS 7 下 coturn 全面部署教程(STUN + TURN + TLS)
大约 3 分钟
CentOS 7 下 coturn 全面部署教程(STUN + TURN + TLS)
1. 部署
🧼 第一步:彻底卸载旧的 coturn(如有)
sudo rm -f /etc/turnserver.conf
sudo rm -f /usr/lib/systemd/system/coturn.service
sudo rm -f /etc/sysconfig/coturn
✅ 第二步:重新安装 coturn
sudo yum install epel-release -y
sudo yum install coturn -y
如果下载失败
[rootak8s-master ~]# sudo yum install-y coturn己加载插件:fastestmirror,product-id,search-disabled-repos, subscription-managel
This system is not registered with an entitlement server, You can use subscription-manager to register.
oading mirror speeds from cached hostfile* base: mirrors.aliyun.comextras: mirrors.aliyun.com*updates: mirrors.aliyun.com
没有可用软件包
coturn错误:无须任何处理
更换数据源
# 备份原有 EPEL 配置 【如果报错,说明没这个文件,直接跳过,进行下一步】
sudo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
# 下载阿里云 EPEL 源
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 清除缓存并重建
sudo yum clean all
sudo yum makecache
安装后,会自动生成 /usr/lib/systemd/system/coturn.service systemd 服务文件
如果没有这个文件,可以手动创建
[Unit]
Description=coturn
Documentation=man:coturn(1) man:turnadmin(1) man:turnserver(1)
After=syslog.target
After=network.target
[Service]
User=coturn
Group=coturn
Type=notify
ExecStart=/usr/bin/turnserver -c /etc/coturn/turnserver.conf --pidfile /run/coturn/turnserver.pid --no-stdout-log
Restart=on-abort
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
LimitNOFILE=999999
LimitNPROC=60000
LimitRTPRIO=infinity
LimitRTTIME=7000000
CPUSchedulingPolicy=other
UMask=0007
# Only required to bind coturn to privileged ports (ports < 1024),
# e.g. port 80 or 443 to handle restrictive corporate firewalls.
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
✅ 第三步:编辑coturn 配置(STUN + TURN + TLS)
sudo vi /etc/coturn/turnserver.conf
内容如下(替换 IP 和域名):
# 基本功能
fingerprint
lt-cred-mech
realm=test.lihuan.tech
# 用户认证
user=turnuser:xunchuang@2026
# 端口范围
min-port=49152
max-port=65535
# 监听配置
listening-port=3478
tls-listening-port=5349
listening-ip=0.0.0.0
external-ip=120.48.94.49
# TLS 证书
cert=/home/ssl/test.lihuan.tech.crt
pkey=/home/ssl/test.lihuan.tech.key
# 日志
log-file=/var/log/turnserver.log
verbose
✅ 第四步:启用 coturn 服务
编辑 coturn 启动配置:
sudo vi /etc/sysconfig/coturn
添加或修改为:
TURNSERVER_ENABLED=1
然后启动服务:
sudo systemctl enable coturn
sudo systemctl restart coturn
# 查看状态 【这个一定要观察】
sudo systemctl status coturn
✅ 第五步:放行防火墙端口
如果是云服务器,安全组中方向下面的端口
同时需要放开 49152-65535 访问的tcp/udp 端口
| 端口范围 | 协议 | 方向 | 用途 | 优先级 |
|---|---|---|---|---|
3478 | TCP | 入站 | STUN/TURN 主端口 | ⭐⭐⭐⭐⭐ 必须 |
3478 | UDP | 入站 | STUN/TURN 主端口 | ⭐⭐⭐⭐⭐ 必须 |
5349 | TCP | 入站 | TURNS (TLS) | ⭐⭐⭐⭐ 推荐 |
49152-65535 | UDP | 入站 | TURN 中继端口范围 | ⭐⭐⭐⭐⭐ 必须 |
49152-65535 | TCP | 入站 | TURN TCP 中继(可选) | ⭐⭐ 可选 |
✅ 第六步:验证安装是否成功
✅ 1. 检查服务是否运行中:
sudo systemctl status coturn
你应该看到 “active (running)”。
✅ 2. 查看监听端口:
sudo netstat -tulnp | grep -E '3478|5349'
# 或者
sudo lsof -i :5349
sudo lsof -i :3478
你应该看到 turnserver 正在监听这些端口。
✅ 3. 验证服务状态
# 检查端口监听
sudo netstat -tulnp | grep -E '3478|5349'
# 测试TURN功能(需安装客户端工具)
sudo yum install -y coturn-utils
#
turnutils_uclient -t -S -y -w turnuser -p xunchuang@2026 127.0.0.1
turnutils_uclient -t -S -y -w turnuser -p xunchuang@2026 test.lishihuan.cn
4. 浏览器验证 relay 是否成功(TURN)
前端配置 WebRTC 测试:
const pc = new RTCPeerConnection({
iceServers: [
{ urls: 'stun:test.lishihuan.cn:3478' },
{
urls: 'turns:test.lishihuan.cn:5349',
username: 'peeruser',
credential: 'peerpass'
}
]
});
pc.onicecandidate = e => {
if (e.candidate) {
console.log('ICE candidate:', e.candidate.candidate);
}
};
输出中应包含:
candidate:.... typ srflx ... ✅ STUN成功
candidate:.... typ relay ... ✅ TURN成功
✅ 5. 查看日志:
注意:日志可能在 /var/log/turnserver_YYYY-MM-DD.log 下
sudo tail -f /var/log/turnserver.log
能看到客户端连接、认证等详细日志说明服务正常。
2. 使用
var peer = new Peer({
host: 'test.lishihuan.cn',// test.lishihuan.cn
port: 3030,
path: '/peerjs',
config: {
'iceServers': [
// 自建
{ urls: 'stun:test.lishihuan.cn:3478' },
{ urls: 'turns:test.lishihuan.cn:5349', username: 'turnuser', credential: 'xunchuang@2026' },
// 公共 STUN 作为备份
{ url: 'stun:stun01.sipphone.com' },
{ url: 'stun:stun.ekiga.net' },
{ url: 'stun:stunserver.org' },
{ url: 'stun:stun.softjoys.com' },
{ url: 'stun:stun.voiparound.com' },
{ url: 'stun:stun.voipbuster.com' },
{ url: 'stun:stun.voipstunt.com' },
{ url: 'stun:stun.voxgratia.org' },
{ url: 'stun:stun.xten.com' },
{ url: 'stun:stun.l.google.com:19302' }
]
},
debug: 4 // 0:无日志;1:错误;2:错误 + 警告;3:错误 + 警告 + 日志;4:全日志(包括底层 socket 传输);
});