当前位置: 首页 > news >正文

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 服务器实现,功能全面且易于配置。

一、环境准备

  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 验证)
http://www.lryc.cn/news/594334.html

相关文章:

  • BLIP、InternVL Series(下)
  • 从TPACK到TPACK - AI:人工智能时代教师知识框架的重构与验证
  • 血条识别功能实现及原理
  • Mobile Neural Network (MNN) 3.2.1
  • CAN通讯理论与实践:调试和优化全讲解
  • EPLAN 电气制图(十): 继电器控制回路绘制(下)放料、放灰
  • UDP中的单播,多播,广播(代码实现)
  • 前端环境搭建---基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建
  • Linux场景常见的几种安装方式
  • VSCode使用Jupyter完整指南配置机器学习环境
  • 在服务器无网络的环境下安装 VS Code Remote-SSH 组件
  • (5)从零开发 Chrome 插件:Vue3 Chrome 插件待办事项应用
  • 数控调压BUCK电路 —— 基于TPS56637(TI)
  • Spring Cloud Gateway高危隐患
  • jmeter如何做自动化接口测试?
  • jQuery多库共存
  • http基础一
  • 游戏剧情抄袭侵权比对报告:防止“爆款”变“爆雷”
  • C 语言经典编程题实战:从基础算法到趣味问题全解析
  • Qemu-NUC980(一):SOC框架代码添加
  • LeetCode 3202.找出有效子序列的最大长度 II:取模性质(动态规划)
  • 智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】
  • 【图像处理基石】什么是畸变校正?
  • 2025牛客暑期多校训练营2(部分补题)
  • 【LeetCode 热题 100】124. 二叉树中的最大路径和——DFS
  • 网络安全隔离技术解析:从网闸到光闸的进化之路
  • 【机器学习深度学习】魔塔社区模型后缀全解析:Base、Chat、Instruct、Bit、Distill背后的技术密码
  • leetcode丑数II计算第n个丑数
  • Java行为型模式---解释器模式
  • 大语言模型:人像摄影的“达芬奇转世”?——从算法解析到光影重塑的智能摄影革命