Coturn打洞服务器

* 概念理解:

1. SDP协议:会话描述协议,视频通话的双方通过交换SDP信息进行媒体协商,从而选择使用某一相同的媒体协议进行通信;

    TLS协议:基于TCP的安全层传输协议

    DTLS协议:基于UDP的安全层传输协议

2. NAT网络地址转换:如下,不知道对方地址,所以通过向对方发探测包,向索引服务器转发反馈包的方式获取目标地址的过程;但由于国内网络环境复杂,如电信、联通、移动、安卓、IOS等区分,有时候NAT不通,如路由器便具备NAT功能;

    

3. candidate:存储候选网络信息,将其通过服务器发送给另一端,彼此交换candidate进行网络协商;

4. STUN(srflx):由RFC 5389定义的一种网络协议,允许位于各自NAT之后的客户端双方分别找出自己的公网地址、NAT类型、映射端口,使用这些信息使两个同时位于NAT路由器后的客户端之间创建UDP通信;局域网内不需要STUN服务器,因为客户端在同一个NAT下;

STUN的优势:

    a. STUN服务器在通信过程中的作用是分别获取两客户端的公网地址、端口、NAT类型等,然后使两客户端直接通过自己的公网地址建立连接,传输媒体时,STUN服务器不参与;

STUN的缺陷:

    a. 国内网络环境复杂,有时NAT类型的不同会导致STUN无法成功;

    b. 如下图,通过STUN协议建议的UDP通信是端对端的直连, 传输媒体流时使用的是双方各自自己的带宽,若进行多人视频通话,则受本地带宽影响,STUN或可能无法成功建立连接;

    

5. TURN(relay):对STUN进行扩展的网络协议,主要添加了Relay功能,即当STUN无法顺利建立UDP通讯连接时,使用公网服务器作为中继,对来往服务器进行转发,该转发协议即为TURN;

TURN的优势:

    a. 如下图,STUN协议通讯失败后,通过请求TURN服务器获取其公网地址作为中继地址,互相转发媒体流给对方客户端,由于TURN服务器参与其中,带宽压力主要由服务端承担,因此多人通讯时受本地带宽影响小;

    b. TURN协议可以在所有网络环境下使用;

  

6. coturn:coturn 是对 STUN 和 TURN 的整合,主服务是 turnserver;

7. 监听端口、协议及开放规则:

        STUN:3478(UDP)

        TURN:3478(TCP/UDP)、5349(TLS/DTLS)、49152–65535(UDP)

        a. iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3478 -j ACCEPT

        b. iptables -I INPUT -p udp --destination-port 3478 -j ACCEPT

        c. iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 5349 -j ACCEPT

        d. iptables -I INPUT -p udp --destination-port 5349 -j ACCEPT

        e. iptables -I INPUT -p udp --destination-port 49152:65535 -j ACCEPT

    注:TLS/DTLS 协议需要使用其支持的证书 /etc/turn_server_cert.pem、/etc/turn_server_pkey.pem

* 搭建:192.168.1.109 (xxx.xxx.49.99)

    # 开放本地端口

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3478 -j ACCEPT

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 5349 -j ACCEPT

iptables -I INPUT -p udp --destination-port 3478 -j ACCEPT

iptables -I INPUT -p udp --destination-port 5349 -j ACCEPT

    # 搭建过程

cd /usr/local &&

yum install -y git make gcc gcc-c++ &&

yum install -y libevent-devel.x86_64 openssl openssl-libs libevent2 &&

wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz &&

tar xvfz libevent-2.1.8-stable.tar.gz &&

rm -rf libevent-2.1.8-stable.tar.gz &&

cd libevent-2.1.8-stable && ./configure && 

make && make install && cd .. &&

ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1 &&

ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 &&

openssl version

    附件:coturn.zip           (  下载地址:git clone https://github.com/coturn/coturn  )

unzip coturn.zip &&

cd coturn &&

yum install openssl-devel -y &&

./configure &&

make &&

make install &&

cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf &&

mkdir -p /var/log/turnserver/ &&

cd /usr/local/etc &&

    # 生成专属密钥文件

openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes

    (一路回车)

    # 在 hefu 用户域中添加用户 hefu01  hefu02

turnadmin -a -u hefu01 -p hefu123 -r hefu

turnadmin -a -u hefu02 -p hefu123 -r hefu

    # 加密密码(MD5密码)

turnadmin -k -u hefu01 -p hefu123 -r hefu

turnadmin -k -u hefu02 -p hefu123 -r hefu

vi  /etc/turnuserdb.conf

    hefu01:0x6bc278d081f5342c54f63f3c1852e1e6

    hefu02:0x317d350a92623178603620504b0ec707

vi  /usr/local/etc/turnserver.conf

    附件:turnserver配置内容.txt      turnserver.conf

    # 启动与自启

vi /etc/init.d/coturn_start.sh

#!/bin/bash

#chkconfig:2345 89 15

#description:turn-start

turnserver -o -a -f -r hefu

echo "turnserver started success. If you want to stop it,please kill it."

cd /etc/init.d/ &&

chmod +x coturn_start.sh &&

chkconfig coturn_start.sh on &&

./coturn_start.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915617.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python flusk 监控

# 创建虚拟环境目录 python3 -m venv /sda1/xunjian/venv # 激活虚拟环境 source /sda1/xunjian/venv/bin/activate # 激活后终端会显示 (venv)创建虚拟环境(在当前目录):bashpython3 -m venv venv激活虚拟环境:bashsource venv/b…

VUE2 项目学习笔记 ? 语法 v-if/v-show

?语法页面渲染的时候,需要服务器传过来的对象中的一个属性,然后根据这个属性用v-for渲染标签,这里写的v-for".... in dataList.goodsList"但是当解析到这行语法的时候,dataList还没返回,因此控制台会报错找…

使用qemu命令启动虚拟机

1. 安装相关软件 yum install qemu edk2* libvirt -y 启动libvirt服务 systemctl start libvirtd systemctl status libvirtd2. 创建虚拟机 2.1. qemu启动命令示例 /usr/bin/qemu-system-loongarch64 \-machine virt,accelkvm \-nodefaults \-m 2048 \-smp 2,maxcpus4,co…

大模型系统化学习路线

人工智能大模型系统化学习路线一、基础理论筑基(1-2个月) 目标:建立大模型核心认知框架 核心内容: 深度学习基础:神经网络原理、CNN/RNN结构、梯度下降算法大模型本质:Transformer架构(重点掌握注意力机制、…

LLaMA-Factory 微调可配置的模型基本参数

LLaMA-Factory 微调可配置的模型基本参数 flyfish 基本参数 一、模型加载与路径配置参数名类型描述默认值model_name_or_pathOptional[str]模型路径(本地路径或 Huggingface/ModelScope 路径)。Noneadapter_name_or_pathOptional[str]适配器路径&#xf…

Ubuntu 22 安装 ZooKeeper 3.9.3 记录

Ubuntu 22 安装 ZooKeeper 3.9.3 记录 本文记录在 Ubuntu 22.04 系统上安装 ZooKeeper 3.9.3 的过程,包含 Java 环境准备、配置文件调整、启动与停机操作、以及如何将 ZooKeeper 注册为系统服务。 一、准备环境 ZooKeeper 3.9.x 要求 Java 11 或更高版本&#xff…

FreeSwitch通过Websocket(流式双向语音)对接AI实时语音大模型技术方案(mod_ppy_aduio_stream)

FreeSwitch通过WebSocket对接AI实时语音大模型插件技术方案1. 方案概述 基于FreeSWITCH的实时通信能力,通过WebSocket协议桥接AI大模型服务,实现低延迟、高并发的智能语音交互系统。支持双向语音流处理、实时ASR/TTS转换和动态业务指令执行。 1753095153…

航班调度优化策略全局概览

在机场关闭场景下的航班恢复工作,是将机场关闭期间所有的航班进行取消然后恢复还是将机场关闭期间航班全部延误而后调整呢?简单来说,在实际操作中,既不是无差别地全部取消,也不是无差别地全部延误。这两种“一刀切”的…

spring boot 异步线程@Async 传递 threadLocal数据

将父类的 threadLocal 的数据 在线程池时&#xff0c;可以转给子线程使用。 Async 的使用。 第一步在启动服务加上 EnableAsync 注解。 EnableAsync public class NetCoreApplication {... ... }第二步&#xff1a;导入阿里 线程工具类<dependency><groupId>com.a…

AI产品经理成长记《零号列车》第一集 邂逅0XAI列车

《零号列车》绝非传统意义上的 AI 产品经理教程 —— 它是我沉淀二十多年跨行业数字化转型与工业 4.0 实战经验后,首创的100集大型小说体培养指南。那些曾在千行百业验证过的知识与经验,不再是枯燥的文字堆砌,而是化作一场沉浸式的学习旅程。​ 这里没有生硬的理论灌输,而…

[C++11]范围for循环/using使用

范围for循环 范围for循环&#xff08;Range-based for loop&#xff09;是 C11 引入的一种简洁的循环语法&#xff0c;用于遍历容器中的元素或者其他支持迭代的数据结构。 范围for循环可以让代码更加简洁和易读&#xff0c;避免了传统for循环中索引的操作。 下面是范围for循环的…

简单了解下npm、yarn 和 pnpm 中 add 与 install(i) 命令的区别(附上两图带你一目明了)

目录 pnpm 中 add 和 i 的区别 npm 中 add 和 i 的区别 yarn 中 add 和 i 的区别 附上两图带你一目明了&#xff1a; npm、yarn和pnpm的三者区别图&#xff1a; i 和 add 的核心区别图&#xff1a; 个人建议&#xff1a;在项目中保持命令使用的一致性&#xff0c;选择一种…

ESP32-S3学习笔记<2>:GPIO的应用

ESP32-S3学习笔记&#xff1c;2&#xff1e;&#xff1a;GPIO的应用1. 头文件包含2. GPIO的配置2.1 pin_bit_mask2.2 mode2.3 pull_up_en和pull_down_en2.4 intr_type3. 设置GPIO输出/获取GPIO输入4. 中断的使用4.1 gpio_install_isr_service4.2 gpio_isr_handler_add4.3 gpio_…

得物视觉算法面试30问全景精解

得物视觉算法面试30问全景精解 ——潮流电商 商品鉴别 视觉智能&#xff1a;得物视觉算法面试核心考点全览 前言 得物App作为中国领先的潮流电商与鉴别平台&#xff0c;持续推动商品识别、真假鉴别、图像搜索、内容审核、智能推荐等视觉AI技术的创新与落地。得物视觉算法岗位…

[Linux入门] Linux 账号和权限管理入门:从基础到实践

一、Linux 用户账号&#xff1a;谁能访问系统&#xff1f; 1️⃣超级用户&#xff08;root&#xff09; 2️⃣普通用户 3️⃣程序用户 二、组账号&#xff1a;让用户管理更高效 1️⃣组的类型 2️⃣特殊组 三、用户与组的 “身份证”&#xff1a;UID 和 GID 四、配置文…

阿里云ssl证书自动安装及续订(acme)

目录 一、shell命令安装 二、docker run安装 三、docker compose安装 一、shell命令安装 # 安装acme curl https://get.acme.sh | sh -s emailfloxxx5163.com# 注册zerossl .acme.sh/acme.sh --register-account -m flowxxx25163.com --server zerossl# 获取证书 export Al…

@fullcalendar/vue 日历组件

功能&#xff1a;日程安排&#xff0c;展示日历&#xff0c;可以用来做会议日历&#xff0c;可以跨日期显示日程。 Fullcalendarvue3 日历组件 参考文档&#xff1a;【vue2】一个完整的日历组件 fullcalendar&#xff0c;会议预约功能 中文说明文档&#xff1a;https://www.he…

Dijkstra 算法求解多种操作

一、问题背景与核心需求 需要找到从a到b的最优操作序列&#xff0c;使得总花费最小。三种操作的规则为&#xff1a; 操作 1&#xff1a;x → x1&#xff0c;花费c1&#xff1b;操作 2&#xff1a;x → x-1&#xff0c;花费c2&#xff1b;操作 3&#xff1a;x → x*2&#xff0…

本地项目提交到git教程

创建远程仓库 登录 GitHub&#xff0c;点击右上角 New repository。 填写仓库名称&#xff08;如 my-project&#xff09;、描述&#xff0c;选择公开 / 私有。 不要初始化 README、.gitignore 或 LICENSE&#xff08;保持空仓库&#xff09;&#xff0c;点击 Create repositor…

Linux 密码生成利器:pwgen 命令详解

往期好文&#xff1a;统信 UOS 运行 Windows 应用新利器&#xff01;彩虹虚拟化软件 V3.2 全新上线&#xff0c;限时30天免费体验 在日常运维、安全测试、用户管理等场景中&#xff0c;随机密码的生成是一项常见需求。为了避免人工设置密码带来的重复性弱密码问题&#xff0c;…