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

devtools/2024/9/19 6:41:13/ 标签: 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/devtools/9891.html

相关文章

【计算机毕业设计】微信小程序:MHK自学平台的设计与实现——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

串联超前及对应matlab实现

串联超前校正它的本质是利用相角超前的特性提高系统的相角裕度。传递函数为:下面将以一个实际的例子,使用matlab脚本,实现其校正后的相位裕度≥60。

quill富文本编辑器中文汉化和高度设置操作

quill文档:Installation - Quill Rich Text Editor quill仓库:GitHub - quilljs/quill: Quill is a modern WYSIWYG editor built for compatibility and extensibility. quill默认是英文的,并且高度也是只有一行,所以想自定义高…

设计模式之适配器模式

1、详细介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口(方法签名)转换为另一种接口,使原本因接口不兼容而无法一起工作的类能够协同工作。适配器模式主要解决接口不匹配的问题…

算法刷题记录 Day48

算法刷题记录 Day48 Date: 2024.04.16 lc 583. 两个字符串的删除操作 class Solution { public:int minDistance(string word1, string word2) {// dp[i][j]表示使word1[0,i]和word2[0,j]相同所需的最小步数。int m word1.size();int n word2.size();vector<vector<…

component-全局透明遮罩层与点击遮罩层关闭

1.创建Overlay.vue的全局组件或子组件&#xff0c;用于显示透明遮罩层。 <template><div class"overlay" click"closeOverlay"></div></template><script>export default {methods: {closeOverlay() {// 子组件调用父组件方…

[python3] 字符串匹配的`多模式匹配`算法

在Python 3中&#xff0c;你可以使用第三方库ahocorasick来实现Aho-Corasick算法。Aho-Corasick算法是一种用于字符串匹配的多模式匹配算法&#xff0c;可以高效地在一个文本中搜索多个关键词。 首先&#xff0c;你需要安装ahocorasick库。你可以使用pip来进行安装&#xff1a…

OpenHarmony实战开发-如何使用弹簧曲线实现抖动动画及手机振动效果案例。

介绍 本示例介绍使用vibrator.startVibration方法实现手机振动效果&#xff0c;用keyframeAnimateTo关键帧动画实现点击后的抖动动画。 效果图预览 使用说明 1.加载完成后显示登录界面&#xff0c;未勾选协议时点击一键登录按钮会触发手机振动效果和提示文本的抖动动画。 实…

设计模式代码实战-中间者模式

1、问题描述 小明正在设计一个简单的多人聊天室系统&#xff0c;有多个用户和一个聊天室中介者&#xff0c;用户通过中介者进行聊天&#xff0c;请你帮他完成这个系统的设计。 输入示例 3 User1 User2 User3 User1 Hello_All! User2 Hi_User1! User3 How_is_everyone? 输出…

一篇文章带您了解面向对象(java)

1.简单理解面向过程编程和面向对象编程 面向过程编程&#xff1a;开发一个一个的方法&#xff0c;有数据需要处理&#xff0c;我们就可以调用方法来处理。 package com.web.quictstart;public class demo1 {public static void main(String[] args) {totalScore("张三&q…

移植speexdsp到OpenHarmony标准系统①

Speexdsp 提到Speexdsp不得不先提到开源语音编解码器Speex 如下是ACM Surveys中收录的标题为《Survey on Application-Layer Mechanisms for Speech Quality Adaptation in VoIP》综述中的一张图表。 它总结了一些常用的可变比特率编解码器&#xff0c;并且做了性能方面的比较…

数组中两个字符串的最短距离---一题多解(贪心/二分)

点击跳转到题目 方法&#xff1a;贪心 / 二分 目录 贪心&#xff1a; 二分&#xff1a; 贪心&#xff1a; 要找出字符串数组中指定两个字符串的最小距离&#xff0c;即找出指定字符串对应下标之差的最小值 思考&#xff1a;如果是直接暴力求解&#xff0c;需要两层for循环…

scipy.sparse.csr_matrix 中的 indptr indices data

# ------------------------------------------------------------------------------- # Description: 分析理解 scipy.sparse.csr_matrix 中的 indptr & indices & data # Reference: https://blog.csdn.net/bymaymay/article/details/81389722 # Author: Sophia…

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个深度神经网络&#xff08;DNN&#xff09;模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

【Linux】线程控制

接口 pthread_create()线程创建 pthread_t* thread&#xff1a;输出型参数&#xff0c;将线程的tid值放入到我们外部创建好的pthread_t 类型的变量中。const pthread_attr_t *attr&#xff1a;用来设置线程属性&#xff0c;一般情况下设置成nullptr&#xff0c;等用到的时候再…

PLC_博图系列☞N=:在信号下降沿置位操作数

、 PLC_博图系列☞N&#xff1a;在信号下降沿置位操作数 文章目录 PLC_博图系列☞N&#xff1a;在信号下降沿置位操作数背景介绍N&#xff1a; 在信号下降沿置位操作数说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 N 背景介绍 这是一篇关于PLC编程的…

RTT设备驱动框架学习(UART)

在serial.h中 struct rt_serial_device {struct rt_device parent;const struct rt_uart_ops *ops;struct serial_configure config;void *serial_rx;void *serial_tx;struct rt_spinlock spinlock;struct rt_device_notify rx_notify; } typedef struct rt_serial_device rt_…

MySQL中InnoDB存储引擎详细介绍

介绍 InnoDB是一种兼顾高可靠性高和高性能的通用存储引擎&#xff0c;在MySQL5.5之后&#xff0c;InnoDB是默认的MySQL存储引擎。 特点 DML(增删改)操作遵循ACID(事务四大特性)模型&#xff0c;支持事务&#xff1b;行级锁&#xff0c;提高并发访问性能支持外链FORELGN KEY约…

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出&#xff0c;包含如下功能&#xff1a; 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制&#xff0c;超过则自动分文件&#xf…

mysql面试题七(集群)

目录 1.mySQL 中有哪些常见日志 错误日志&#xff08;Error Log&#xff09; 二进制日志&#xff08;Binary Log, Binlog&#xff09; 重做日志&#xff08;Redo Log&#xff09; 回滚日志&#xff08;Undo Log&#xff09; 慢查询日志&#xff08;Slow Query Log&#xf…