⽬录:⼀、简介⼆、安装三、配置与运⾏四、运⾏检测五、答疑环节
⼀、简介
本⽂通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器。
coturn 简介:是⼀个免费的开源的 TURN/STUN 服务器。coturn 服务器完整的实现了 STUN/TURN/ICE 协议,⽀持 P2P 穿透防⽕墙。
STUN 服务器⽤于检测NAT类型。
TURN 服务器是在点对点失败后⽤于通信中继。
coturn的Github源码:
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-devsudo apt-get install libevent-devsudo apt-get install libpq-devsudo apt-get install mysql-clientsudo apt-get install libmysqlclient-devsudo apt-get install libhiredis-devsudo apt-get install gitsudo apt-get install make
2.下载并安装相关代码cd coturn/./configuremake
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.netstun.schlund.destun.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-TermCredential 。
本⽂以命令⾏举例:
如果你是只⽤来做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 部分参数说明: -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使⽤说明: 或是使⽤man⼿册查看:man turnserver 命令⾏运⾏后会有以下信息,信息很多,⼤部分⽤不到,记住⽇志⽂件的位置信息就好,⼀般会放在/var/log下,以turn+进程号+⽇期命名。 四、运⾏检测 检测⽹址 如果想检测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: 有问题可以留⾔,我会尽⼒回答。 如果写的不好,欢迎任何批评指正,我都会虚⼼接受的!如果写的还⾏,⿇烦赞⼀下,让我知道我写的东西帮到了别⼈^_^
因篇幅问题不能全部显示,请点此查看更多更全内容