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

server/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.2NAT网

引言

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

turn_12">一、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环境下的通信问题。

二、部署架构图


http://www.ppmy.cn/server/1995.html

相关文章

Linux常用操作命令

1、查询指定目录文件名模糊匹配 #find /home -name "*jelly*" 备注:寻找home目录下面所有文件/文件夹名字有jelly的文件 2、查询指定目录下面所有文件中含有指定字符串的文件,显示行号 #grep -rn "jelly" 备注:查询…

做一个后台项目的架构

后台架构的11个维度 架构1:团队协助基础工具链的选型和培训架构2:搭建微服务开发基础设施架构3:选择合适的RPC框架架构4:选择和搭建高可用的注册中心架构5:选择和搭建高可用的配置中心架构6:选择和搭建高性…

MyBatis 执行流程

加载配置文件:MvBatis 的执行流程从加载配置文件开始。通常,MyBatis 的配置文件是一个 XML 文件,其中包含了数据源配置、SQL 映射配置、连接池配置等信息。构建 SqlSessionFactory:在配置文件加载后,MyBatis 使用配置信息来构建 SqlSessionFa…

区块链知识总结——GHOST协议

背景: ETH将出块时间设置为10几秒可能带来一下问题: 1.出块时间10几秒,由于network layer 的限制,一个新的区块发布到其他节点也需要10几秒的时间,从而分叉成为了常态。 如果ETH按照比特币的最长链原则,如…

共享负载均衡后端的主机健康检查状态是异常的解决

场景:运维同事配置了后端主机,但是健康检查显示异常。其中有一台主机是正常的,权重为1。另外两台健康检查异常的权重为0。 curl 内网地址和端口是可以正常访问业务的,返回的状态码也是200。后端排查日志,可以发现正常…

Windows上构建 Chisel-Bootcamp

windows环境构建本地Chisel-Bootcamp 安装摘要Chisel-boocamp环境搭建安装java安装Anaconda安装scala 下载Chisel-bootcamp 环境Reference 安装摘要 在windows上安装chisel-boocamp,与linux过程类似。 安装java8安装anaconda安装scala下载Chisel-bootcamp环境 Ch…

2024-2025年申报各类科研项目基金撰写及技巧;ChatGPT在基金撰写中的妙用

目录 专题一 国自然项目介绍 专题二 基金的撰写技巧(从申请人的角度,带你一次入门) 专题三 基金的专项技巧(从评审专家的角度,带您逐一突破) 专题四 ChatGPT在基金撰写中的妙用 更多应用 随着社会经济…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型,其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型,Llama拥有7B、13B和70B(700亿)三种版本,满足不同场景和需求。 吴恩…

海外媒体发稿:新加坡 Asia One VS新加坡sg雅虎

海外媒体发稿:新加坡 Asia One VS新加坡sg雅虎 新加坡:雅虎 官网:sy.yahoo.com 官网:asiaone.com/lite 亚洲第一站。是 新加坡的新闻和生活方式网站和新闻聚合器。它是 新加坡第一个纯数字 内容平台,主要为新加坡、…

用html画一个睡觉的熊动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>睡觉的熊动画</title><link rel"stylesheet" href"./style.css"> </head><body><div id"contain…

VMware配置CentOS 7 并实现ssh连接

Vmware 17下载地址 ***永久许可证&#xff1a;***5Y012-8HL8P-0J8U0-032Q6-93KKF CentOS 7 下载地址 一、配置CentOS 如下 创建新的虚拟机&#xff0c;选择典型&#xff0c;点击下一步 选择上述下载镜像存储位置&#xff0c;选择镜像&#xff0c;点击下一步 3.填写相关信息…

Dota2 参议院

题目链接 Dota2 参议院 题目描述 注意点 senate[i] 为 ‘R’ 或 ‘D’假设每一位参议员都足够聪明&#xff0c;会为自己的政党做出最好的策略 解答思路 对于任意一位参议员&#xff0c;如果其有权利&#xff0c;当他后面没有另一方参议员&#xff0c;其会投票&#xff0c;…

Linux/Cronos

Cronos 天热了&#xff0c;什么也不想干&#xff0c;拿以前的来凑个数 Enumeration Nmap 扫描发现对外开放了22&#xff0c;53&#xff0c;80端口&#xff0c;使用nmap详细扫描这几个端口 ┌──(kali㉿kali)-[~/vegetable/HTB/cronos] └─$ nmap -sC -sV -p 22,53,80 -oA…

熟练使用Nacos、GateWay、OpenFeign、Sentinel常用组件

Nacos 面试题&#xff1a; 请简述Nacos是什么&#xff0c;它主要解决了什么问题&#xff1f;Nacos提供了哪些核心功能&#xff1f;Nacos是如何支持服务发现的&#xff1f;如何使用Nacos作为配置中心&#xff1f;Nacos的集群部署是如何实现的&#xff1f; 答案&#xff1a; …

个人练习之-jenkins

虚拟机环境搭建(买不起服务器 like me) 重点: 0 虚拟机防火墙关闭 systemctl stop firewalld.service systemctl disable firewalld.service 1 (centos7.6)网络配置 (vmware 编辑 -> 虚拟网络编辑器 -> 选择NAT模式 ->NAT设置查看网关) vim /etc/sysconfig/network-sc…

实况窗助力美团打造鸿蒙原生外卖新体验,用户可实时掌握外卖进展

自2023年华为宣布全新HarmonyOS NEXT蓄势待发&#xff0c;鸿蒙原生应用全面启动以来&#xff0c;已有金融、旅行、社交等多个领域的企业和开发者陆续宣布加入鸿蒙生态。其中&#xff0c;美团作为国内头部的科技零售企业&#xff0c;是首批加入鸿蒙生态的伙伴&#xff0c;其下的…

[面向对象] 单例模式与工厂模式

单例模式 是一种创建模式&#xff0c;保证一个类只有一个实例&#xff0c;且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则&#xff1a; 单一职责&#xff1a;一个类只有一个职责&#xff08;Game类负责什么时候创建英雄机&#xff0c;而不需要知道创建英雄机要…

vue3 修改路由中的meta属性

有些时候可能需要在路由跳转前修改meta里面的相关属性值&#xff0c;这个时候就需要使用钩子函数beforeEach(); 在Vue Router中&#xff0c;beforeEach是用于注册全局前置守卫的函数。它允许你在路由导航触发之前执行一些逻辑 代码 const router useRouter(); router.before…

Linux:进程调度

Linux&#xff1a;进程调度 进程优先级查看优先级调整优先级 Linux 2.6 内核进程调度队列 进程优先级 查看优先级 在Linux中&#xff0c;进程是有优先级的&#xff0c;我们可以通过指令ps -la来查看&#xff1a; 其中PRI表示priority优先级&#xff0c;在Linux中&#xff0c;…

python前端tkinter

基础窗口展示&#xff1a; import tkinter as tknewWin tk.Tk() newWin.title("Im a new window!") newWin.geometry("400x300500300") #设置窗口的大小以及初始位置lab tk.Label(newWin) #lab tk.Label() lab.config(text "Im a new label!&q…