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
英文地址,請注明出處:http://en.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;…