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

在 Linux 服务器搭建Coturn即ICE/TURN/STUN实现P2P(点对点)直连

首先,通过 SSH 登录到你的云服务器,并更新系统软件包:

sudo apt-get update
sudo apt-get upgrade -y

然后,安装 Coturn 服务器。在 Ubuntu 上,这非常简单:

sudo apt-get install coturn -y

Coturn 默认使用 3478 端口进行 STUN 和 TURN 的侦听,并使用 4915265535 之间的端口范围进行数据中继。你需要确保你的服务器防火墙和云服务商的安全组都开放了这些端口。

在云服务商的安全组中,添加入站规则:

  • 协议:UDP

  • 端口:3478

  • 协议:TCP

  • 端口:3478

  • 协议:UDP

  • 端口范围:49152-65535

在服务器的防火墙中(如果启用),运行以下命令开放端口:

sudo ufw allow 3478/udp
sudo ufw allow 3478/tcp
sudo ufw allow 49152:65535/udp
sudo ufw enable  # 启用ufw防火墙

配置 Coturn 服务器

Coturn 的配置文件通常位于 /etc/turnserver.conf。你需要编辑这个文件来设置你的服务。

打开配置文件:

sudo nano /etc/turnserver.conf

在文件中添加或修改以下关键配置项:

# 侦听的公网IP,如果有多个IP,可以指定
# listening-ip=0.0.0.0 # 服务器的公网IP地址,这是最关键的配置,请替换成你的服务器IP
external-ip=你的服务器公网IP# 域名,用于访问TURN服务时的realm。请替换成你自己的域名或公网IP
realm=your.domain.com# 用户认证方式,推荐使用长效凭证机制
# lt-cred-mech
no-stun-backward-compatibility# 侦听端口,默认是3478,如果需要可修改
listening-port=3478# 关闭loopbackpeers,防止数据包回环
no-loopback-peers# 日志配置
log-file=/var/log/turnserver/turnserver.log# 用户配置
# 格式为 user=username:password
# 这是最简单的认证方式,推荐在生产环境中使用动态凭证机制
user=testuser:testpass

注意: 在配置文件中,# 开头的行是注释。请将 你的服务器公网IPyour.domain.com 替换为你的实际信息。user 字段的用户名和密码可以自定义。

启用 Coturn 服务

默认情况下,Coturn 服务可能不会自动启动。你需要编辑 /etc/default/coturn 文件来启用它。

sudo nano /etc/default/coturn

找到 TURNSERVER_ENABLED 这行,将其从 1 修改为 1 并保存:

TURNSERVER_ENABLED=1

现在,你可以启动 Coturn 服务了:

sudo service coturn start

为了确保服务已经成功启动,你可以查看其状态:

sudo service coturn status

使用一个在线的 ICE 测试工具来验证你的服务器是否工作正常。

  1. 打开 Trickle ICE 网站。

  2. STUN or TURN URI 框中,输入:

    • 如果你配置了域名:turn:your.domain.com:3478

    • 如果你只使用IP:turn:你的服务器公网IP:3478

  3. TURN username 中输入:testuser

  4. TURN password 中输入:testpass

  5. 点击 Add Server,然后点击 Gather candidates

如果你的配置正确,你会在结果中看到 srflxrelay 类型的候选地址,这表明 STUN 和 TURN 服务都已成功工作。

在你的应用程序中,你需要配置ICE服务器信息。通常,这会是一个 iceServers 数组,其中包含你的 Coturn 服务器信息,例如:

const iceServers = {iceServers: [{urls: 'stun:你的服务器公网IP:3478'},{urls: 'turn:你的服务器公网IP:3478',username: 'testuser',credential: 'testpass'}]
};

通过以上步骤,你就成功搭建了一个功能完整的 P2P/TURN/STUN 服务器,为你的实时通信应用提供了可靠的连接支持。

http://www.xdnf.cn/news/17786.html

相关文章:

  • 图论Day3学习心得
  • 无脑整合springboot2.7+nacos2.2.3+dubbo3.2.9实现远程调用及配置中心
  • 计算机网络 THU 考研专栏简介
  • L2 级别自动驾驶 硬件架构设计
  • LeetCode 922.按奇偶排序数组2
  • ElasticSearch不同环境同步索引数据
  • Spring Ai 如何配置以及如何搭建
  • Jmeter自定义脚本
  • 零基础学会制作 基于STM32单片机智能加湿系统/加湿监测/蓝牙系统/监测水量
  • 探索无人机图传技术:创新视野与无限可能
  • 在 macOS 上顺利安装 lapsolver
  • OpenCV Python——VSCode编写第一个OpenCV-Python程序 ,图像读取及翻转cv2.flip(上下、左右、上下左右一起翻转)
  • 死锁总结及解决方案
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • 用GPT解释“GPT-5”是什么,有什么优势
  • python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
  • Flink Stream API 源码走读 - map 和 flatMap
  • KNN(k近邻算法)
  • Chrome插件开发实战:从架构到发布全流程
  • 准备用Qt6 重写音视频会议系统服务端
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • 开源 Arkts 鸿蒙应用 开发(十六)自定义绘图控件--波形图
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 前端css学习笔记6:盒子模型
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • liteflow
  • Vue3中的ref与reactive全面解析:如何正确选择响应式声明方式
  • Java List 集合详解(ArrayList、LinkedList、Vector)
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • 传输层协议TCP(3)