本文简介了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服务器中转。

Turn and Stun server · J的更多相关文章

  1. 在Ubuntu上部署一个基于webrtc的多人视频聊天服务

    最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...

  2. WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建

    WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建 四月 4, 2019 作者:李超,音视频技术专家.本文首发于 RTC 开发者社区,欢迎在社区留言与作者交流. htt ...

  3. (转)WebRTC信令控制与STUN/TURN服务器搭建

    转:https://rtcdeveloper.com/t/topic/13742 本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了 ...

  4. webrtc进阶-信令篇-之三:信令、stun、turn、ice

    webRTC支持点对点通讯,但是webRTC仍然需要服务端:  . 协调通讯过程中客户端之间需要交换元数据,    如一个客户端找到另一个客户端以及通知另一个客户端开始通讯.  . 需要处理NAT(网 ...

  5. STUN和TURN技术浅析

    转自:http://blog.csdn.net/yu_xiang/article/details/9227023 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分 ...

  6. [转]STUN和TURN技术浅析

    [转]STUN和TURN技术浅析 http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/ ...

  7. NAT类型与穿透 及 STUN TURN 协议

    STUN : Simple Traversal of User Datagram Protocol [UDP] Through Network Address Translators [NATs] S ...

  8. stun/turn/ice学习笔记

    stun基本只是用于client探测NAT之后靠近stun server的外网地址,本身不包含应用数据通信的功能,其底层STUN协议通信多是基于UDP的.多个端点之间相互通过信令通道拿到彼此的NAT外 ...

  9. P2P技术详解(三):P2P技术之STUN、TURN、ICE详解

    1.内容概述 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P ...

随机推荐

  1. gcc -c xx.c 选项讲解

    -c选项表示编译.汇编指定的源文件(也就是编译源文件),但是不进行链接.使用-c选项可以将每一个源文件编译成对应的目标文件. 目标文件是一种中间文件或者临时文件,如果不设置该选项,gcc 一般不会保留 ...

  2. KeyError: 'xxx does not support field: _id'

    Scrapy存储爬取的数据时,提示不支持某些字段 在Item文件中,添加对应的字段即可

  3. 最大连续子序列(DP)

    Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...

  4. Codeforces Round #603 (Div. 2)E

    http://codeforces.com/contest/1263/problem/E 题意:求合法的括号序列 #include<bits/stdc++.h> using namespa ...

  5. regex(python)

    正则表达式 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/26 16:39 # @Author : jackendoff ...

  6. Hardy-Weinberg laws

    I.3 Diploids with two alleles: Hardy-Weinberg laws 假设子代是Aa,AA,aa的概率分别是PAa,PAA,Paa,A的基因概率是P1,a的基因概率是P ...

  7. [一般图最大匹配]Bimatching

    10566 Bimatching 题意:一个男生必须跟两个女生匹配,求最大匹配 思路:一般的二分图匹配做不了,网络流也不会建图,这题采用的是一般图匹配 首先在原来二分图的基础上,将一个男生拆成两个点 ...

  8. Mysql_常规操作

    001.数据库 全局操作 # 连接数据库: # mysql -h主机地址 -u用户名 -p(登陆用户密码)     ​# 修改用户密码 mysqladmin # mysqladmin -u root ...

  9. 一、Shell脚本高级编程实战第一部

    Shell脚本语言是实现linux系统自动化管理的重要且必要的工具,几乎每一个合格的linux系统管理员或者高级运维工程师都要熟练shell脚本语言的编写,只有这样才能提升工作效率,解决工作中的重复劳 ...

  10. 腾讯云 Serverless 首发 1ms 计费粒度,立省 70% 费用

    云函数 SCF 采用按需付费的方式,并首次发布 1ms 计费粒度,真正实现按使用多少计算能力来计费. 云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的 ...