CentOS 7 下 coturn 全面部署教程(STUN + TURN + TLS)

lishihuan大约 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 端口

端口范围协议方向用途优先级
3478TCP入站STUN/TURN 主端口⭐⭐⭐⭐⭐ 必须
3478UDP入站STUN/TURN 主端口⭐⭐⭐⭐⭐ 必须
5349TCP入站TURNS (TLS)⭐⭐⭐⭐ 推荐
49152-65535UDP入站TURN 中继端口范围⭐⭐⭐⭐⭐ 必须
49152-65535TCP入站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 传输);
});