Turn and Stun server · J

本文简介了Turnserver(Turn + Stun)服务器的搭建。Turnserver主要提供了stun服务,支撑NAT、防火墙穿透,turn服务器,支撑打洞失败时的数据中转。使用场景上类似于前端使用的WEBRTC音视频数据服务,在不同网络环境下可通过stun服务器进行打洞以及turn服务器进行中转,最终实现web前端上的音视频通信。

Turnserver 搭建


简介

webrtc的p2p穿透部分,一般都需要借助于turnserver,步骤大概是这样的

  1. 尝试直连
  2. 通过stun服务器进行NAT、防火墙穿透
  3. 穿透失败则依赖于turn服务器中转

一、安装turnserver(CentOS)

  1. 下载安装依赖库(依赖于libevent,最好也安装下mysql)

    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    yum install -y make automake gcc cc gcc-c++ wget #一般系统都带了gcc4,无需升级
    
    yum install -y openssl-devel libevent libevent-devel mysql-devel mysql-server
    
    wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
    
    tar -zxvf libevent-2.0.21-stable.tar.gz #解压缩
    
    cd libevent-2.0.21-stable.tar.gz
    
    sudo ./configure
    
    sudo make
    
    sudo make install
    
    cd ..
    
  2. 下载turnServer安装包
    这里使用都是4.4.5.2版本。也可以到http://turnserver.open-sys.org/downloads/ 下载你想要的版本。
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    wget http://turnserver.open-sys.org/downloads/v3.2.3.95/turnserver-4.4.5.2.tar.gz
    
    tar -zxvf turnserver-4.4.5.2.tar.gz
    
    cd turnserver-4.4.5.2.tar.gz
    
    sudo ./configure
    
    sudo make
    
    sudo make install
    
    cd ..
    
  3. 接下来是配置turnserver.conf文件
    可以到[your turnserver path]/examples/etc/下找到默认的turnserver.conf文件,建议拷贝到系统/etc/turnserver.conf。编辑该文件:
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    12
    
    13
    
    14
    
    15
    
    16
    
    # 配置为你服务器的外网ip地址
    
    external-ip=106.74.23.11
    
    # 由于WEBRTC默认需要使用long-term认证机制(中转服务器需要),所以必须添加-a(--lt-cred-mech)配置。使用该配置后,需要指定-r(realm)并且配置账号密码。修改turnserver.conf文件的
    
    user=ghost:password
    
    realm=demo
    
    # 配置你的数据库连接,如果你想使用tu 大专栏  Turn and Stun server · Jrn中转服务器,需要配置上一步的账号密码和realm值,只时候需要经由turnadmin工具往数据库添加用户记录。因此需要用到数据落地工具,WEBRTC提供了mysql、sqlite、mongoDB等方式,你只需要选一个你熟悉的方式即可。如以下的mysql配置:
    
    mysql-userdb="host=localhost dbname=turnserver user=root password=root connect_timeout=30"
    
    # 当然,你也可以修改turnServer默认监听的端口3478,以及需要监听的内网ip(内网ip可配置多个,全部注释时系统自动获取所有网卡ip):
    
    listening-port=3478
    
    listening-ip=127.0.0.1
    
    listening-ip=0.0.0.0
    
    # 还有其他非常多的配置项,包括中转服务器线程数、中转服务器地址等等,有兴趣的可以详细阅读turnserver.conf配置文件
    
  4. 创建并导入数据库
    简单配置过turnserver.conf后,我们需要做的还有是导入数据库文件。否则启动时会提示连接数据库超时或找不到指定数据库。数据库结构文件在[your turnserver path]/turndb/下,例如mysql的schema.sql。
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    mysql -u root -p
    
    ******
    
    $ create Database turnserver;
    
    $ use turnserver
    
    $ [copy schema.sql into here, and database tables will be created automatic.]
    
  5. 新增用户到数据库
    1
    
    turnadmin -a -u root -r demo -p root -M "host=localhost dbname=turnserver user=root password=root connect_timeout=30"
    
  6. 启动turnserver服务
    1
    
    turnserver -a -o #-o 后台运行
    
  7. 配置客户端
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    12
    
    13
    
    const servers = {
    
    iceServers: [
    
    {
    
    url: 'stun:106.74.23.11:3478'
    
    }, {
    
    url: 'turn:106.74.23.11:3478',
    
    username: 'root',
    
    credential: 'root'
    
    }
    
    ]
    
    }
    
    let rtc = new RTCPeerConnection(servers);
    
  8. 简单测试
    两个手机同时连入移动4g网络,在打开turn服务器情况下可通过stun实现打洞并数据p2p;
    其中一个手机切换到联通网络,stun服务器无法打通,转由turn服务器中转。

原文地址:https://www.cnblogs.com/lijianming180/p/12247613.html

时间: 2024-11-09 01:54:42

Turn and Stun server · J的相关文章

webrtcclient与TURN和信令server通讯流程图

WebRTC是HTML5支持的重要特性之中的一个.有了它,不再须要借助音视频相关的client.直接通过浏览器的Web页面就能够实现音视频对聊功能.并且WebRTC项目是开源的.我们能够借助WebRTC源代码高速构建自己的音视频对聊功能.不管是使用前端JS的WebRTC API接口,还是在WebRTC源代码上构建自己的对聊框架.都须要遵循下面运行流程: 上述序列中,WebRTC并不提供Stunserver和Signalserver.server端须要自己实现.Stunserver可以用googl

stun server list

比较快的(实测ping值50ms左右) stun.iptel.org stun.fwdnet.net:3478stun01.sipphone.com 慢的: stunserver.org 测试是OK的stun.xten.com stun.l.google.com:19302

STUN和TURN协议解析

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信.这种技术通常称为NAT穿透(NAT Traversal).最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议. STUN,首先在RFC

[转]STUN和TURN技术浅析

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我

真实场景中WebRTC 用到的服务 STUN, TURN 和 signaling

FQ收录转自:WebRTC in the real world: STUN, TURN and signaling WebRTC enables peer to peer communication. BUT... WebRTC still needs servers: For clients to exchange metadata to coordinate communication: this is called signaling. To cope with network addre

STUN, TURN, ICE介绍

STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的.STUN协议是典型的Client-Server协议,各种具体应用通过嵌入STUN客户端与STUN Server端通讯来完成交互. 在典型的运用STUN进行NAT穿透的场景中,STUN客户端首先向位于公网上的STUN服务器 发送Binding Request消息,STUN服务器接收到请求消息后识别出经过NAT转换后的公网地址60.1.1.1:12345,将其附加在Bin

ICE协议下NAT穿越的实现(STUN&TURN)

正文: 一. 首先来简单讲讲什么是NAT? 原来这是因为IPV4引起的,我们上网很可能会处在一个NAT设备(无线路由器之类)之后.NAT设备会在IP封包通过设备时修改源/目的IP地址. 对于家用路由器来说, 使用的是网络地址端口转换(NAPT), 它不仅改IP, 还修改TCP和UDP协议的端口号, 这样就能让内网中的设备共用同一个外网IP. 举个例子, NAPT维护一个类似下表的NAT表: NAT映射 NAT设备会根据NAT表对出去和进来的数据做修改, 比如将192.168.0.3:8888发出

stun/turn服务器部署

一.简介 本文通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器. coturn 简介:是一个免费的开源的 TURN/STUN 服务器.coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙. STUN 服务器用于检测NAT类型. TURN 服务器是在点对点失败后用于通信中继. coturn的Github源码: https://github.com/coturn/coturn coturn的wiki使用说明: https://gi

CWMP开源代码研究——stun的NAT穿透

原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:[email protected] 参考: http://www.cnblogs.com/myblesh/p/6259765.html http://www.cnblogs.com/myblesh/p/6225651.html 开篇我就计划stun的高级部分,现在终于理清楚实现的原理和CPE侧代码实现.要做一个言而有信的人. 一. 协议规范 TR111 二. 执行流程 在TR111中,CPE设备穿透NAT的策略是STUN,但