1.前言

在 Ubuntu 系统上部署 STUN 和 TURN 服务器,通常使用 coturn 工具,它是一个开源的 STUN/TURN 服务器实现,功能全面且易于配置。

一、环境准备

  1. 系统要求

    • Ubuntu 18.04/20.04/22.04(推荐 LTS 版本)
    • 公网 IP 地址(用于 STUN/TURN 服务对外提供服务)
    • 防火墙开放以下端口:
      • STUN:UDP 3478(默认端口,可自定义)
      • TURN:UDP 3478(中继端口)、TCP 3478(可选,支持 TCP 连接)
      • 媒体中继端口范围(如 49152-65535,用于 TURN 转发媒体流)
  2. 更新系统

    sudo apt update
    sudo apt upgrade -y
    

二、安装 coturn 服务器

  1. 添加软件源并安装

    sudo apt install coturn -y
    
  2. 检查安装结果

    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 服务

  1. 启动服务

    sudo systemctl start coturn
    sudo systemctl enable coturn  # 设置开机自启
    
  2. 检查服务状态

    sudo systemctl status coturn
    
  3. 测试 STUN 服务
    使用在线测试工具(如 StunLocate)或命令行工具:

    # 使用 netcat 测试 UDP 连通性
    nc -vuz 你的公网IP 3478
    
  4. 测试 TURN 服务
    使用开源工具 coturnclient 或通过应用程序(如 WebRTC 客户端)验证中继功能。

六、高级配置优化

  1. TCP 支持(适用于网络环境限制严格的场景)
    在配置文件中添加:

    listening-protocol=tcp
    
  2. HTTPS 伪装(绕过某些网络限制)

    # 伪装为 HTTPS 服务(端口 443)
    external-ip=你的公网IP
    listening-port=443
    listening-protocol=udp
    
  3. 限制服务器负载

    max-bps=10000000  # 最大带宽限制(10Mbps)
    max-clients=1000   # 最大客户端数
    max-connections=2000  # 最大连接数
    

七、集成到 FreeSWITCH

若需与 FreeSWITCH 配合使用,需在 FreeSWITCH 配置中指定 STUN/TURN 服务器:

  1. 编辑 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="密码"/>
    
  2. 重启 FreeSWITCH 使配置生效:

    sudo systemctl restart freeswitch
    

八、安全建议

  1. 定期更新系统

    sudo apt update && sudo apt upgrade -y
    
  2. 限制服务器访问

    • 仅允许可信 IP 访问 STUN/TURN 服务
    • 使用 allowed-ip 参数在配置文件中设置白名单
  3. 密码强度

    • 避免使用简单密码,定期更换用户密码
    • 生产环境务必使用哈希密码认证(hash-passwords
  4. 监控日志

    tail -f /var/log/syslog | grep coturn
    

九、常见问题排查

  1. 客户端无法连接 STUN 服务器

    • 检查公网 IP 是否正确,防火墙是否开放端口
    • 确认 external-ip 配置是否与公网 IP 一致
  2. TURN 中继无媒体流

    • 检查中继端口范围(relay-port-range)是否在防火墙中开放
    • 确认客户端是否正确配置 TURN 服务器地址和认证信息
  3. 服务启动失败

    • 查看日志:sudo journalctl -u coturn
    • 检查配置文件语法错误(使用 turnserver -c /etc/turnserver.conf -n 验证)
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐