Ubuntu 部署 STUN 与 TURN 服务器
Ubuntu 部署 STUN 与 TURN 服务器
- 1.前言
- 一、环境准备
- 二、安装 coturn 服务器
- 三、配置 coturn 服务器
- 1. 备份默认配置
- 2. 编辑配置文件
- 3. 示例:配置哈希密码认证
- 四、防火墙配置
- 1.使用 UFW 防火墙(Ubuntu 默认)
- 2.验证端口是否开放
- 五、启动与测试 coturn 服务
- 六、高级配置优化
- 七、集成到 FreeSWITCH
- 八、安全建议
- 九、常见问题排查
1.前言
在 Ubuntu 系统上部署 STUN 和 TURN 服务器,通常使用 coturn 工具,它是一个开源的 STUN/TURN 服务器实现,功能全面且易于配置。
一、环境准备
-
系统要求
- Ubuntu 18.04/20.04/22.04(推荐 LTS 版本)
- 公网 IP 地址(用于 STUN/TURN 服务对外提供服务)
- 防火墙开放以下端口:
- STUN:UDP 3478(默认端口,可自定义)
- TURN:UDP 3478(中继端口)、TCP 3478(可选,支持 TCP 连接)
- 媒体中继端口范围(如 49152-65535,用于 TURN 转发媒体流)
-
更新系统
sudo apt update sudo apt upgrade -y
二、安装 coturn 服务器
-
添加软件源并安装
sudo apt install coturn -y
-
检查安装结果
coturn --version
三、配置 coturn 服务器
1. 备份默认配置
sudo cp /etc/turnserver.conf /etc/turnserver.conf.bak
2. 编辑配置文件
sudo nano /etc/turnserver.conf
添加或修改以下关键配置(根据需求调整):
# 公网 IP 地址(替换为你的公网 IP)
external-ip=你的公网IP地址# 监听端口(STUN/TURN 共用端口)
listening-port=3478# 监听协议(UDP 和 TCP)
listening-ip=0.0.0.0
listening-protocol=udp
# 可选:启用 TCP 支持
# listening-protocol=tcp# 中继媒体端口范围(建议设置为高端口范围)
relay-port-range=49152-65535# 认证方式(使用静态密码或哈希)
# 方式 1:静态密码(测试用,生产环境建议用哈希)
user=用户名:密码 # 例如:turnuser:turnpass# 方式 2:使用哈希密码(更安全)
# hash-passwords
# userdb=/etc/turnserver.userdb # 用户数据库路径# 允许的 IP 范围(可选,限制访问来源)
# allowed-ip=192.168.1.0/24# 禁用 IPv6(可选,若无需支持 IPv6)
# no-ipv6# 日志配置
syslog
verbose
3. 示例:配置哈希密码认证
# 创建用户数据库(若使用 hash-passwords)
sudo touch /etc/turnserver.userdb
sudo chmod 600 /etc/turnserver.userdb# 添加用户(密码将被哈希存储)
sudo turnserver -a -u 用户名 -p 密码 -o /etc/turnserver.userdb
四、防火墙配置
1.使用 UFW 防火墙(Ubuntu 默认)
# 开放 STUN/TURN 端口(UDP)
sudo ufw allow 3478/udp# 开放媒体中继端口范围(UDP)
sudo ufw allow 49152:65535/udp# 可选:开放 TCP 端口(若启用 TCP 支持)
# sudo ufw allow 3478/tcp# 重启防火墙
sudo ufw reload
2.验证端口是否开放
sudo netstat -tuln | grep 3478
五、启动与测试 coturn 服务
-
启动服务
sudo systemctl start coturn sudo systemctl enable coturn # 设置开机自启
-
检查服务状态
sudo systemctl status coturn
-
测试 STUN 服务
使用在线测试工具(如 StunLocate)或命令行工具:# 使用 netcat 测试 UDP 连通性 nc -vuz 你的公网IP 3478
-
测试 TURN 服务
使用开源工具coturnclient
或通过应用程序(如 WebRTC 客户端)验证中继功能。
六、高级配置优化
-
TCP 支持(适用于网络环境限制严格的场景)
在配置文件中添加:listening-protocol=tcp
-
HTTPS 伪装(绕过某些网络限制)
# 伪装为 HTTPS 服务(端口 443) external-ip=你的公网IP listening-port=443 listening-protocol=udp
-
限制服务器负载
max-bps=10000000 # 最大带宽限制(10Mbps) max-clients=1000 # 最大客户端数 max-connections=2000 # 最大连接数
七、集成到 FreeSWITCH
若需与 FreeSWITCH 配合使用,需在 FreeSWITCH 配置中指定 STUN/TURN 服务器:
-
编辑 FreeSWITCH 的 SIP 配置文件:
sudo nano /usr/local/freeswitch/conf/sip_profiles/external.xml
添加以下内容(位于
<configuration>
标签内):<param name="stun-address" value="你的公网IP:3478"/> <param name="turn-address" value="你的公网IP:3478"/> <param name="turn-username" value="用户名"/> <param name="turn-password" value="密码"/>
-
重启 FreeSWITCH 使配置生效:
sudo systemctl restart freeswitch
八、安全建议
-
定期更新系统
sudo apt update && sudo apt upgrade -y
-
限制服务器访问
- 仅允许可信 IP 访问 STUN/TURN 服务
- 使用
allowed-ip
参数在配置文件中设置白名单
-
密码强度
- 避免使用简单密码,定期更换用户密码
- 生产环境务必使用哈希密码认证(
hash-passwords
)
-
监控日志
tail -f /var/log/syslog | grep coturn
九、常见问题排查
-
客户端无法连接 STUN 服务器
- 检查公网 IP 是否正确,防火墙是否开放端口
- 确认
external-ip
配置是否与公网 IP 一致
-
TURN 中继无媒体流
- 检查中继端口范围(
relay-port-range
)是否在防火墙中开放 - 确认客户端是否正确配置 TURN 服务器地址和认证信息
- 检查中继端口范围(
-
服务启动失败
- 查看日志:
sudo journalctl -u coturn
- 检查配置文件语法错误(使用
turnserver -c /etc/turnserver.conf -n
验证)
- 查看日志: