目录:

一、简介

二、安装

三、配置与运行

四、运行检测

五、答疑环节

一、简介

本文通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器。

coturn 简介:是一个免费的开源的 TURN/STUN 服务器。coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙。

STUN 服务器用于检测NAT类型。

TURN 服务器是在点对点失败后用于通信中继。

coturn的Github源码:

https://github.com/coturn/coturn

coturn的wiki使用说明:

https://github.com/coturn/coturn/wiki

Q:

stun服务器和turn服务器在部署步骤上,有什么区别?

A:

因为TURN是STUN的扩展,所以TURN服务器可以当作STUN服务器来用。

在软件配置上没有区别。

在硬件配置上,stun服务器需要1台服务器上有2个公网IP,turn服务器只需要有1个公网IP。

所以,如果你想:

只配置stun服务器:按照本文步骤来,还需要有1台用2个公网IP的服务器。

只配置turn服务器:按照本文步骤来。

1台服务器同时配置stun和turn服务器:按照本文步骤来,还需要有1台用2个公网IP的服务器。

二、安装

安装过程分为2部分

  1. 镜像不带有coturn的源,此处以ubuntu14.04 LTS 64位为例
  2. 镜像自带有coturn的源(推荐使用,这个比较方便),此处以ubuntu16.04 LTS 64位为例

1. 镜像不带有coturn的源,此处以ubuntu14.04 LTS 64位为例

1.安装相关环境

  

sudo apt-get install libssl-dev

sudo apt-get install libevent-dev

sudo apt-get install libpq-dev

sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

sudo apt-get install libhiredis-dev

sudo apt-get install git

sudo apt-get install make

2.下载并安装相关代码

git clone https://github.com/coturn/coturn

cd coturn/

./configure

make

sudo make install

看到下图,就说明已经安装好了,这个是一些说明事项,如果想要将其设置成守护进程,可以看看

2. 镜像带有coturn的源,此处以ubuntu16.04 LTS 64位为例

输入apt-get install coturn

三、配置与运行

stun服务器和turn服务器的默认端口都是3478。

stun服务器需要一台服务器,并且服务器上绑定有2个公网IP(如果只有1个公网IP,会出现NAT类型检测不准确的情况!)。

turn服务器需要一台服务器,并且服务器上绑定有1个公网IP。

stun服务器搭建:

stun服务器需要一台服务器,并且服务器上绑定有2个公网IP。

性能要求应该不高,毕竟一个用户创建一个通话请求,只需要与stun服务器沟通一次,此后不再沟通,而沟通一次只需要发几个数据包验证能否通信。

现在有2种解决方案:

1.用别人现成的stun服务器(推荐使用)

2.自己搭一个stun服务器(2个公网IP的资金花销太大,而换来的只是一个NAT类型检测的功能,性价比不高,不推荐使用)

1.用别人现成的stun服务器

以下三个亲测可用:

stun.ekiga.net

stun.schlund.de

stun.voxgratia.org

怎么测试是否可用呢?

搜索NAT类型检测工具,然后下载

再找几个可用的服务器

框框里填入服务器地址

这个是可用的

这个是用不了的

2.自己搭一个stun服务器

硬件方面,腾讯云和阿里云有个叫弹性网卡的技术可以让一台服务器绑定2个ip,如果服务器只有1个IP,会出现NAT类型检测不准确的情况!

软件方面,服务器安装了coturn后,既是stun服务器,也是turn服务器,所以stun服务器的配置步骤与turn服务器的配置步骤是一样的。

turn服务器搭建:

coturn 支持三种配置:命令行、conf文件和数据库(据网上说是有数据库这种方式,但所有的例子都是前两种,所以我也不知道怎么用数据库去配置)。

数据库支持sqlite,mysql,postgresql,MongoDB,redis。这里的数据库指的应该是存用户信息的数据库,而不是配置coturn用的数据库。

STUN 定义了两种验证方式:Long-Term Credential 和 Short-Term Credential 。但是对于 WebRTC 而言,仅支持 Long-Term Credential 。

本文以命令行举例:

如果你是只用来做turn服务器:

turnserver -o -v -f -a -m 2 --max-bps=100000 --min-port=32355 --max-port=65535 --user=phz:1 -r phzled.cn -L your.ip

如果你既当作stun服务器,又当作turn服务器(因为stun需要双公网ip,所以要把-L参数变成-X参数):

turnserver -o -f -v -a -m 2 --max-bps=100000 --min-port=32355 --max-port=65535 --user=phz:1 -r phzled.cn -X <public ip/ private ip> -X <public ip/ private ip>

部分参数说明:

-o 以守护进程模式运行(后台运行)

-v 日志会以“适度详细”的程度来记录

-f  增加指纹机制。

-a 长期验证机制

-m 以x个进程来处理中继请求

--max-bps 带宽

--min-port   起始用的最小端口

--max-port   最大端口号

--user=帐号:密码    (随便写啥都行,记得住就行,turn服务的用户验证机制要用)

-r  领域(随便写啥都行)。如果turn服务器没有使用任何数据库/命令行/conf文件进行配置,就需要加这个选项,并且要配合long-term  credentials(-a选项)使用

-L 监听IP(turn服务器的ip)这个ip是你ifconfig查到的ip,不是你的公网ip

-X   后面加 public ip/ private ip       多IP情况下使用,有几个ip就用几次

注意:turn服务器是需要有用户验证机制的,由账户,密码,领域三部分构成一个完整的账户。

看上图,如果想要在代码中使用turn服务器,需要输入正确的账户和密码,才可以正常使用turn服务器,而领域是给turn服务器使用的,不需要输入。

所以,如果想以命令行的方式配置turn服务器,--user  -r  -a 这三个选项必不可少。

如果想更详细的了解,请自行查阅wiki使用说明:

https://github.com/coturn/coturn/wiki

或是使用man手册查看:

man turnserver

命令行运行后会有以下信息,信息很多,大部分用不到,记住日志文件的位置信息就好,一般会放在/var/log下,以turn+进程号+日期命名。

四、运行检测

检测网址

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

如果想检测stun服务器,只用填写你的公网IP

如果想检测turn服务器,就填写你的公网IP,还有当时配置时填写的用户名和密码,因为turn是需要认证的,(--user选项填的那个信息)

填好相关信息后,点击按钮,进行验证

如果想要设置成开机自启动

写一个脚本,将你的脚本复制到 /etc/init.d目录下

脚本开头要加这几行字

### BEGIN INIT INFO

# Provides:          scriptname

# Required-Start:    $remote_fs $syslog

# Required-Stop:     $remote_fs $syslog

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: Start daemon at boot time

# Description:       Enable service provided by daemon.

### END INIT INFO

就像这样

然后设置脚本文件的权限(这里假设脚本名字为test)

sudo chmod 755 /etc/init.d/test

将脚本设置为启动脚本

sudo update-rc.d test defaults 95

注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。

卸载启动脚本的方法:

sudo update-rc.d -f test remove

五、答疑环节

Q1:

我的服务器成功运行后,在检测用的网址上检测不到。

A1:

可以看看是不是因为这2个原因:

1.-L选项的ip地址需要填的是ifconfig查到的ip地址

2.检查服务器的安全策略,如果是腾讯云或者阿里云,查看一下安全组的端口是否开放

stun服务器和turn服务器的默认端口都是3478。

以腾讯云为例,把端口打开

Q2:

怎么实现在ubuntu上配置双网卡双ip?

A2:

https://cloud.tencent.com/developer/article/1472051

有问题可以留言,我会尽力回答。

如果写的不好,欢迎任何批评指正,我都会虚心接受的!

如果写的还行,麻烦赞一下,让我知道我写的东西帮到了别人^_^

stun/turn服务器部署的更多相关文章

  1. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

    webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器 ...

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

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

  3. STUN/TURN服务器搭建

    目录 STUN/TURN服务器搭建 编译安装 配置使用 添加用户 启动server 测试 开机启动 参考 STUN/TURN服务器搭建 编译安装 编译安装 OpenSSL: sudo apt-get ...

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

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

  5. WebRTC信令控制简介与STUN, TURN服务器搭建

    本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了如何构建信令服务器.但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中 ...

  6. (译)WebRTC实战: STUN, TURN, Signaling

    http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/ 原文:WebRTC in the real world: STUN, TURN and s ...

  7. STUN, TURN, ICE介绍

    STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的.STUN协议是典型的Client-Server协议,各种具体应用通过嵌 ...

  8. [转]webrtc学习: 部署stun和turn服务器

    [转]webrtc学习: 部署stun和turn服务器 http://www.cnblogs.com/lingdhox/p/4209659.html webrtc的P2P穿透部分是由libjingle ...

  9. webrtc学习: 部署stun和turn服务器

    webrtc的P2P穿透部分是由libjingle实现的. 步骤顺序大概是这样的: 1. 尝试直连. 2. 通过stun服务器进行穿透 3. 无法穿透则通过turn服务器中转. stun 服务器比较简 ...

随机推荐

  1. [Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条

    第十三条 使类和成员的可访问性最小化 总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发.测试和优化都能够更加独立. 对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问 ...

  2. 获取页面form表单对象的方式

    w3c并没有提供标准的这种使用方式,所以各浏览器实现会有差异,还是使用标准的w3c标准,getElement的方式. 记录下,老是忘记 使用documen对象的方法 getElementxxx 方式, ...

  3. Unity 编辑器开发SceneView GUI控制

    前几天项目需要就做了个类似于Collider EditCollider的功能 下面是我做的效果 基础代码如下: public class ExportCFGInputWindow : EditorWi ...

  4. Javascript 基础学习(七)常用内置对象

    Array 定义 数组也是一个对象,是一个用来存储数据的对象.和Object类似,但是它的存储效率比普通对象要高.数组中保存的内容我们称为元素.数组使用索引(index)来操作元素.索引指由0开始的整 ...

  5. hive内置方法一览

    引用 https://www.cnblogs.com/qingyunzong/p/8744593.html#_label0 官方文档 https://cwiki.apache.org/confluen ...

  6. RMAN中MAXSETSIZE和MAXPIECESIZE的用法

    MAXSETSIZE跟MAXPIECESIZE用法 区别:maxpiecesize设置的是备份完成后的备份片大小,对备份整体的大小没有影响,比如一个G的备份完成文件,maxpiecesize设置为10 ...

  7. Linux系统的安装和常用命令

    (1)切换到目录 /usr/bin: (2)查看目录/usr/local 下所有的文件: (3)进入/usr 目录,创建一个名为 test 的目录,并查看有多少目录存在: (4)在/usr 下新建目录 ...

  8. Eclipse 如何添加 更换字体(转载)

    1. 打开eclipse-->Window-->Preferences-->General-->appearance-->Colors and Fonts, 点开后选择B ...

  9. Bringing up interface eth0: Device eth0 does not seem to be presen

    在公司的电脑虚拟机上安装了centos 6.5 ,然后我把他克隆下来用在家里电脑的虚拟机上,打开后查看ip,发现只有回环地址lo,没有eth0, 于是重启网络 输入 service network r ...

  10. 根据ip列表模拟输出redis cluster的主从对应关系

    需求:给点一批ip列表,一个数组或者一个文件,每行一个ip,模拟输出redis cluster的组从关系,前者是master_ip:master_port -> slave_ip:slave_p ...