【WebRTC - STUN/TURN服务 - COTURN配置】
在WebRTC中,对于通信的两端不在同一个局域网的情况下,通信两端往往无法P2P直接连接,需要一个TURN中继服务,而中继服务可以选用 COTURN 构建。
注:COTURN 是一个开源的 TURN(Traversal Using Relays around NAT)和 STUN(Session Traversal Utilities for NAT)服务器项目
配置
先附上一个 自己部署使用,调试过可用的COTURN 配置。
# 服务器 ip 相关信息
listening-ip=0.0.0.0 # 服务器监听的IP地址,`0.0.0.0`表示监听所有可用的网络接口。
listening-port=3000 # 服务器监听的端口号,用于非TLS连接
tls-listening-port=5349 # 服务器监听的端口号,用于TLS连接
cert=/etc/turn_cert.pem # TLS证书文件路径
pkey=/etc/turn_key.pem # TLS私钥文件路径
cipher-list="DEFAULT" # TLS 加密套件列表
no-sslv3 # 禁用SSLv3
no-tlsv1 # 禁用TLSv1
external-ip=123.56.56.123/172.22.14.243 # 服务器的外部IP地址,用于客户端连接, 注意 / 后跟内网IP地址
realm=123.56.56.56.123 # 服务器的域名或IP地址,用于STUN和TURN协议
min-port=49152 # TURN服务器的最小端口号
max-port=65535 # TURN服务器的最大端口号# 权限认证 相关信息
fingerprint # 启用指纹机制,用于消息完整性检查。
lt-cred-mech # 启用长期凭证机制,用于用户认证。
user=username:password # 用户名和密码,用于用户认证。
# 在Coturn配置中,`nonce`是一个用于防止重放攻击的随机数。`stale-nonce`配置项用于设置`nonce`的过期时间,单位为秒。`nonce`机制确保每个请求都有一个唯一的标识符,从而提高安全性。
stale-nonce=600 # Nonce的过期时间,单位为秒。
no-cli # 禁用CLI客户端# 日志
log-file=/var/log/turn.log
simple-log
verbose # 输出详细日志
踩坑 - 连不上的原因
在部署 COTURN 的时候,踩了些坑 ,这里记录下 ,
- 连接串的写法 : “stun:123.56.56.123”,stun后面没有 // ,stun://123.56.56.123 ❌ 是不对的。
- external-ip 的设置, 内网ip跟在外网ip后面,映射起来。 (refs: why-my-turn-server-doesnt-work/67180626#67180626)
- 防火墙 ,除了端口和ip的放行,注意对应协议udp的也要放行,连接时有些是udp的。tcp 、 udp、 ipv4、ipv6 这些都要配置放行。
- 连接鉴权:虽然有中继服务器,但是仍然无法打通, 常见报错401, 403等 这些都是鉴权有些问题。
如果在调试时除了上述问题,还是有些问题 ,导致无法通过TURN服务器打通,甚至无法确认是否已经脸上了TURN服务器,需要进一步调试,则可以参考下面的,
如何调试
- ICE 调试工具 :https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

填入信息后,点击Gather candidates,可以看到返回不同类型的candidate信息,host,srfix,relay。如果不符合预期 ,比如没有relay类型的,可以继续使用浏览器中的信息进行debug,浏览器的一些RTCConnetion信息会输出到浏览器里,类似下图
- 使用浏览器查看

如何使用浏览器debug 详见这篇:【浏览器 - Chrome调试模式,如何输出浏览器中的更多信息】
相关文章:
【WebRTC - STUN/TURN服务 - COTURN配置】
在WebRTC中,对于通信的两端不在同一个局域网的情况下,通信两端往往无法P2P直接连接,需要一个TURN中继服务,而中继服务可以选用 COTURN 构建。 注:COTURN 是一个开源的 TURN(Traversal Using Relays around…...
【HuggingFace项目】:Open-R1 - DeepSeek-R1 大模型开源复现计划
项目链接:https://github.com/huggingface/open-r1 概述 Open-R1 是由 HuggingFace 发布的一个完全开放的项目,旨在通过三个主要步骤复现 DeepSeek-R1 的完整训练流程。这个项目的目标是让更多人能够理解和使用 DeepSeek-R1 的技术方案,从而…...
On to OpenGL and 3D computer graphics
2. On to OpenGL and 3D computer graphics 声明:该代码来自:Computer Graphics Through OpenGL From Theory to Experiments,仅用作学习参考 2.1 First Program Square.cpp完整代码 /// // square.cpp // // OpenGL program to draw a squ…...
计算机毕设【开题报告】怎么写?
本文将围绕如何编写计算机专业的开题报告展开,结合具体的步骤、方法技巧,并提供一个基于SpringBoot系统的完整示例,帮助大家顺利完成开题报告。 一、开题报告的核心结构 开题报告通常包括以下几个部分: 选题背景及意义 说明项目研…...
【数据分享】2014-2025年我国水系数据(免费获取/全国/分省)
水系数据是我们在各项研究中经常使用的数据!水系数据虽然很常用,但是却基本没有能下载最近年份水系数据的网站,所以很多人不知道如何获得水系数据。 本次我们给大家分享的是2014-2025年的全国范围的水系数据,包括水系线数据和水系…...
学习数据结构(2)算法复杂度+顺序表
1.空间复杂度 (1)概念 空间复杂度也是一个数学表达式,表示一个算法在运行过程中根据算法的需要额外临时开辟的空间。 空间复杂度不是指程序占用了多少bytes的空间,因为常规情况每个对象大小差异不会很大,所以空间复杂…...
MyBatis和JPA区别详解
文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis:半自动化的ORM框架1.1、代码示例 2、JPA:全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis:灵活的SQL控制1.1、适用场景 2、JPA:开发效率…...
DeepSeek明确学术研究方向效果如何?
明确学术研究方向 在学术写作中,选择一个出色的研究主题至关重要,因为它直接关系到论文是否能登上高级别的学术期刊。不少学者在这个过程中走入了误区,他们往往将大把的时间花在写作本身,而忽略了对选题的深入思考,这…...
牛客周赛round78 B,C
B.一起做很甜的梦 题意:就是输出n个数(1-n),使输出的序列中任意选连续的小序列(小序列长度>2&&<n-1)不符合排列(例如如果所选长度为2,在所有长度为2 的小序列里不能出…...
基于语义-拓扑-度量表征引导的大语言模型推理的空中视觉语言导航
1. 摘要翻译及主要贡献点 摘要: 空中视觉语言导航(VLN)是一项新兴任务,它使无人机能够通过自然语言指令和视觉线索在户外环境中导航。由于户外空中场景中复杂的空间关系,这项任务仍然具有挑战性。本文提出了一种端到…...
如何在Spring Boot项目中高效集成Spring Security
1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...
React 前端框架实战教程
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 React 是由 Facebook 开发的前端 JavaScript 库,旨在构建高效、灵活的用户界面,尤其适用于单页应用…...
c语言中的数组(上)
数组的概念 数组是⼀组相同类型元素的集合; 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…...
Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
目录 前言1. 基本知识2. Demo3. 实战代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&am…...
java.math 包 中的 BigDecimal 类(详细案例拆解)
前言: 小编打算近期更俩三期类的专栏,一些常用的专集类,给大家分好类别总结和详细的代码举例解释。 今天是第五个 java.lang.Math 包中的 BigDecimal 类 我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念,…...
【记录】日常|从零散记录到博客之星Top300的成长之路
文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章,加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300,这个排名在我之前的所有年份…...
定时器按键tim_key模版
低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内,会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…...
Swing使用MVC模型架构
什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…...
ui-automator定位官网文档下载及使用
一、ui-automator定位官网文档简介及下载 AndroidUiAutomator:移动端特有的定位方式,uiautomator是java实现的,定位类型必须写成java类型 官方地址:https://developer.android.com/training/testing/ui-automator.html#ui-autom…...
gitee——报错修改本地密码
有时候当我们向远端push本地的仓库时会有一些报错的行为。 如下: 这是因为我们在gitee修改了密码时,本地还没有更新提交,总是报错 解决修改密码报错 如下: 1.在本地点击搜索栏找到控制面板 步骤如下...
C++/CLI(Common Language Runtime)关键点详解
C++/CLI(Common Language Runtime)是 Microsoft Visual C++ 的一个扩展,允许使用 .NET Framework 的功能,同时保留对本机 C++ 代码的访问。当您需要在 C++ 和 C# 之间进行互操作时,C++/CLI 是一种常见的选择,因为它可以作为桥梁,将托管代码(如 C#)与非托管代码(如 C+…...
小盒科技携手体验家,优化智能教育服务体验,打造在线教育新高度
北京小盒科技有限公司(简称“小盒科技”,由“作业盒子”更名而来)是一家专注于教育科技的公司,致力于利用人工智能、大数据等先进技术,为中小学教育提供创新的解决方案和产品。 近日,「小盒科技」携手体…...
Docker 在Linux 系统中的使用说明
目录 一:Docker 容器介绍1、容器技术的发展2、容器的关键技术3、Docker 发展历程4、容器的运行效率 二:Docker 安装方式1、在线安装 Docker2、离线安装 Docker 二:Docker 数据目录1、数据存储路径2、子目录的作用 三:Docker 配置文…...
Docker Hub 全面解析及应对策略
在现代 DevOps 和容器化应用开发中,Docker Hub 是一个不可或缺的工具。然而,一些地区或企业对 Docker Hub 的访问受到限制,甚至全面禁止。这种现象引发了开发者和运维人员的广泛关注。那么,为什么 Docker Hub 会被禁用?…...
关于pygame窗口输入法状态异常切换现象的分析报告
一、问题描述 1.1 需求说明 我们准备使用Pygame开发一个键盘输入测试程序,需要确保输入时窗口始终处于英文输入模式,也就是禁止中文输入; 1.2 现象描述 控制台种显示,程序在初始化时,会有两次IMM状态切换操作&…...
基于新年视角下的城市人流数据分析
2025年新年~~~ 旅游消费似乎又成为城市活力的动力话题。 透过话题看数据,透过数据看结果,无非是从--人流量--到--人留量,能不能留下人,能否因人而产生消费。 基于这个角度,地方政府经营城市的商业模式本质则是为城市…...
分布式理解
分布式 如何理解分布式 狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统:**多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任…...
macOS使用LLVM官方发布的tar.xz来安装Clang编译器
之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。 笔者2015款MBP笔记本,CPU是intel的,出厂…...
ppp综合实验
IP地址 r1 r2 r3 r4 hdlc封装 pap认证 r2 r3 chap认证 r2 r4 MGRE 主认证 [r1]int Tunnel 0/0/0 [r1-Tunnel0/0/0]ip add 192.168.4.1 24 [r1-Tunnel0/0/0]tunnel-protocol gre p2mp [r1-Tunnel0/0/0]source 12.1.1.1 [r1-Tunnel0/0/0]nhrp entry multicast dynamic [r1-Tu…...
C#实现SQL Server数据血缘关系生成程序
要在现有的C#程序中添加功能,输出SQL Server数据血缘关系的三张表到Excel文件,我们需要进行以下几个步骤: 分析存储过程、视图和函数中的引用关系,构建数据血缘关系。 按依赖性从小到大排序表的顺序。 找出对应生成表的数据的存储…...
