Linux部署Coturn以及关于打洞的思考

ops/2024/9/20 1:33:18/ 标签: linux, coturn, stun, turn, webrtc, java, 信令

目录

  1. Coturn介绍
  2. 部署架构图
    2.1 局域网——无NAT映射
    2.2 NAT网
  3. Corturn安装步骤
  4. 验证
    4.1 局域网——无NAT映射
    4.2 NAT网
    4.2.1 Cywin安装步骤
    4.2.2 Coturn安装步骤
    4.2.3 验证

引言

下文部署架构图为Corturn为解决互联网NAT环境下“找朋友”的部署架构,也是Coturn发挥其价值的最佳方案。但是我们好多小白在进行WebRTC自学开发时并没有公网ip,那么应该怎么“打洞”呢?打洞到底是怎么一个过程?我们在开发时应该如何决定candidate?回答这些问题之前首先想一想我们自己能搭建什么样的网络环境吧。下面将自己搭建网络环境并介绍无互联网ip的环境下Coturn应用与部署。通过下面的测试过程,我相信你将充分理解“打洞”。

turn_15">一、Coturn介绍

Coturn(也称为TURN服务器)是一种用于实现Traversal Using Relays around NAT(TURN)协议的开源服务器软件。TURN协议是一种用于在网络地址转换(NAT)环境下实现实时通信的协议。NAT是一种常见的网络部署方式,它允许多个设备共享单个公共IP地址。然而,NAT会导致对等通信(peer-to-peer communication)的困难,特别是在实时通信应用程序(如语音通话、视频通话和实时消息传递)中。

Coturn的作用是作为中继服务器,充当两个位于不同NAT之后的设备之间的中间人。当两个设备无法直接建立对等连接时,它们可以通过Coturn服务器进行通信。Coturn服务器充当中继,接收来自一个设备的数据包,然后将其转发给另一个设备,从而绕过了NAT的限制。

Coturn支持TURN协议的各种功能,包括:

  1. 地址分配:Coturn为设备分配公共IP地址和端口号,以便它们能够进行通信。
  2. 数据包转发:Coturn接收来自一个设备的数据包,并将其转发给另一个设备,确保双方能够进行实时通信。
  3. 安全性:Coturn支持加密和认证机制,以确保通信的安全性和保密性。
  4. 中继模式:Coturn可以在两个设备之间建立可靠的中继连接,即使它们位于不同的NAT之后也能够进行通信。

Coturn是一个开源项目,因此用户可以根据自己的需求自由地使用、修改和分发它。它被广泛应用于实时通信应用程序,如WebRTC(Web实时通信)应用程序,以解决NAT环境下的通信问题。

Coturn(TURN服务器)的工作原理如下:

  1. 客户端发起连接请求:当两个位于不同NAT之后的设备(客户端)希望建立直接通信时,它们无法直接建立对等连接。客户端通过发送连接请求到Coturn服务器来解决这个问题。

  2. 服务器分配地址:Coturn服务器收到连接请求后,为客户端分配一个公共IP地址和端口号。这个地址将作为中继地址用于通信。

  3. 数据包中继:一旦地址分配完成,客户端之间的通信将通过Coturn服务器进行中继。当一个客户端发送数据包时,它会将数据包发送到Coturn服务器,然后Coturn服务器将数据包转发给另一个客户端。

  4. NAT穿越:Coturn服务器的关键功能是允许穿越NAT。由于NAT会修改IP地址和端口号,直接通信变得困难。Coturn服务器作为中间人,通过在NAT之间传递数据包,绕过了NAT的限制,使得两个位于不同NAT之后的设备能够进行通信。

  5. 安全性和加密:Coturn服务器支持安全性和加密功能,以保护通信的安全性和保密性。它可以使用TLS/SSL协议进行加密,并支持认证机制,确保只有经过身份验证的客户端可以使用服务器进行通信。

总体而言,Coturn作为TURN服务器提供了一种中继机制,使得位于不同NAT之后的设备能够在实时通信应用中建立直接的连接。它通过地址分配、数据包中继和NAT穿越等功能,解决了NAT环境下的通信问题。

二、部署架构图

在这里插入图片描述
上图中的Relay server即为TURN中继服务器,而STUN server的作用是通过收集NAT背后peer端(即:躲在路由器或交换机后的电脑)对外暴露出来的ip和端口,找到一条可穿透路由器的链路,俗称“打洞”。STUN/TURN服务器通常要部署在公网上,能被所有peer端访问到,turn>coturn开源项目同时实现了STUN和TURN服务的功能,是WebRTC应用的必备首选。
本人资源&财力有限,一般搭建开发环境采用的是:

  1. 多台WindowsPC连接同一个路由器搭建一个局域网。
  2. 在自己的Windows系统中装虚拟机,虚拟机网卡(桥接、NAT&

http://www.ppmy.cn/ops/9671.html

相关文章

vue e.target.currentSrc 获取图片图片里包含中文名字出现乱码

<div v-html"info.brief" class"content" click"judgeImg($event)"></div> //判断是否为图片并提取当前图片地址judgeImg(e){ let currentSrc decodeURIComponent(e.target.currentSrc) }, 在 Vue 中&#xff0c;当你从 e…

git之常见的license及其适用场景

Git之常用license MIT License 特点 MIT 许可证是一种非常宽松的许可证&#xff0c;允许在几乎所有项目中自由使用、修改和分发源代码或二进制形式。它几乎没有使用限制和责任限制。 适用场景 MIT 许可证非常适合开源项目&#xff0c;尤其是那些希望被广泛使用和采纳的项目…

day03-(docker)

文章目录 DockerDocker和虚拟机的差别docker在linux安装配置镜像命令容器命令介绍Docker-容器&#xff08;基本操作&#xff09;docker基本操作&#xff08;数据卷&#xff09;数据卷挂载直接挂载四.Dockerfile自定义镜像五.Docker-Compose 安装修改权限镜像仓库![在这里插入图…

可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?

在当今的信息化时代&#xff0c;数据已经成为了现代决策的核心。无论是企业战略规划、运营管理&#xff0c;还是个人生活决策&#xff0c;数据都扮演着至关重要的角色。随着数据分析技术和工具的不断进步&#xff0c;数据在决策中的作用将变得更加突出&#xff0c;对组织和个人…

【C++】---STL之vector详解

【C】---STL之vector详解 一、vector的介绍&#xff1a;二、vector的成员函数&#xff1a;1、vector类的构造函数2、vector的元素访问符3、vector的迭代器4、vector的模版5、vector的拷贝构造6、vector的容量&#xff08;1&#xff09;vector的增容机制&#xff08;2&#xff0…

LeetCode669:修剪二叉搜索树

题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代子代关系都应…

QA测试开发工程师面试题满分问答15: 讲一讲InnoDB和MyISAM

InnoDB和MyISAM是MySQL中两种常见的存储引擎&#xff0c;它们在数据存储和处理方面有着显著的区别。让我们逐一来看一下它们的区别、原理以及适用场景。 区别&#xff1a; 事务支持&#xff1a;InnoDB是一个支持事务的存储引擎&#xff0c;而MyISAM不支持事务。事务是一种用于维…

用c++写一个代码解析器需要向哪方面学习?

我以前在中小游戏公司工作的时候&#xff0c;其中一项比较琐碎的工作就是为游戏项目建库建表&#xff0c;主要是为了做数据分析。作为一个职能部门的打杂PHP&#xff0c;对游戏业务并没有什么发言权&#xff0c;但是每次建库建表&#xff0c;却是苦不堪言。 同时部门的基础设施…

线性表的顺序存储如何设计实现?

如何存储 顺序及链式实现 计算机中的状态

Scikit-Learn支持向量机分类

Scikit-Learn 支持向量机分类 1、支持向量机&#xff08;SVM&#xff09;1.1、SVM概述1.2、SVM原理1.3、SVM的损失函数1.4、支持向量机分类的优缺点 2、Scikit-Learn支持向量机分类2.1、Scikit-Learn支持向量机分类API2.2、支持向量机分类初体验&#xff08;手写数字识别&#…

centos安装服务及设置自启动

centos安装redis及设置自启动 centos安装redis及设置自启动redis安装脚本redis启动脚本chkconfig设置开机自启动systemctl设置开机自启动nginx脚本mysql脚本mongodb脚本rabbitmq脚本java服务脚本删除日志定时任务 centos安装redis及设置自启动 redis安装脚本 进入 /opt/redis…

【js】js中将时间戳转化成 YYYY-MM-DD HH:mm:ss的3种办法

方法一&#xff1a;dayjs&#xff08;最推荐&#xff09; npm install dayjs # 或者 yarn add dayjsconst dayjs require(dayjs);// 假设你有一个时间戳 const timestamp 1650000000000; // 示例时间戳// 使用dayjs转换时间戳 const formattedDate dayjs(timestamp).format…

思科 Packet Tracer 实验八 DHCP基本配置(以路由为中继)

一、实验目的 了解思科网络设备的配置基本特点及 IOS 命令基本操作方法 了解DHCP的工作原理及基本配置 二、实验过程 1) 实验拓扑如下&#xff1a; 2&#xff09;由于使用DHCP‘协议动态配置ip&#xff0c;所以除了DHCP服务器和路由器接口外其他的主机&#xff0c;服务器的i…

机器学习预测汽车油耗效率 MPG

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接&#xff1a;https://pan.baidu.com/s/1KeIJykbcVpsfEk0xjhiICA?pwd30oe 提取码&#xff1a;30oe --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

IDEA 2021.3.3最新激活破解教程(可激活至2099年,亲测有效)

1、ja-netfilter-all Windows 系统&#xff0c;点击运行 install-current-user.vbs 脚本&#xff0c;为当前用户安装破解补丁 截图是window环境下的激活方式 运行此补丁大约花费几分钟&#xff0c;点击 确定&#xff0c; 等待 Done 完成提示框出现&#xff0c;到这里&#xf…

JavaScript 函数

函数这里有函数定义和函数调用&#xff0c;函数名称加上小括号这才叫函数调用。 可以先定义使用函数&#xff0c;再去调用函数&#xff0c;因为在真实执行的时候&#xff0c;它会将函数提升到顶部。 return后面不能再去加任何代码&#xff0c;只要return了后面

MySql 安装教程+简单的建表

目录 1.安装准备 1.MySQL官方网站下载 2.安装步骤 3.测试安装 4.简单的建表 1.安装准备 1.MySQL官方网站下载 下载安装包或者压缩包都可以 选择相应版本&#xff0c;点击Download开始通过网页下载到本地&#xff08;压缩包下载快一些&#xff09; 2.安装步骤 双击此.exe…

Leetcode 4.16

1.找两个和为目标值且不重叠的子数组 找两个和为目标值且不重叠的子数组 初始化变量: sum&#xff1a;用于存储当前左边界 l 到右边界 r 之间的子数组和。r&#xff1a;初始化为数组的最后一个元素的索引&#xff0c;表示初始的右边界。ans&#xff1a;用于存储最小的两个子数…

配置 rust国内源

rust crate.io 配置国内源&#xff08;cargo 国内源&#xff09; warning: spurious network error (2 tries remainin..._warning: spurious network error (3 tries remaining-CSDN博客

Linux systemd 定时任务

哈喽大家好&#xff0c;我是咸鱼。 说到 Linux 定时任务&#xff0c;大家用得最多的就是 crond 服务&#xff0c;但其实 systemd 也有类似的功能。我们不但可以通过 systemd 来管理服务&#xff0c;还能设置定时任务&#xff0c;那就是 systemd timer。 与 crond 相比&#x…