前言
笔者在几年前就搞过webrtc,对于turn服务器这块没有做过记录,最近又要搞这个。做个记录。网上有搭建turn服务器的问题,期间遇到很多文章,我写下自己的成功案例吧。
以下的搭建过程是经过测试,可以使用的。
coturn 是一个免费的开源的 TURN/STUN 服务器。coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙。
- STUN 服务器用于获取设备的外部网络地址
- TURN 服务器是在点对点失败后用于通信中继。
WebRTC 建立连接的步骤大概是这样的:
- 客户端(浏览器)直接尝试直连;
- 如果如果直连则通过 STUN 服务器进行穿透;
- 如果无法穿透则通过 TURN 服务器进行中转。
环境
搭建环境是阿里云的centos服务器。
下载coturn源码
可以去github上下载,https://github.com/coturn/coturn
在centos的opt目录操作
wget https://github.com/coturn/coturn/archive/master.zip
下载后解压,使用unzip命令,没有安装unzip需要去安装一下
yum install -y unzip zip
这块注意不要下载到windows上,解压后在拷贝到centos上,因为window解压后的格式跟linux解压后的文件是有一些格式区别的,后续执行命令可能会报错。尽量在centos下解压。
unzip master.zip
然后进入目录
cd coturn-master/
编译coturn
在编译coturn之前,先确认几个lib是否存在
比如:libevent2、gcc。如果不安装 后续可能会报错。
安装libevent2
1.在http://libevent.org/下载libevent-2.1.8-stable.tar.gz
2.tar -zxvf libevent-2.1.8-stable.tar.gz
3.cd libevent-2.1.8-stable
4./configure --prefix=/usr --libdir=/usr/lib64
5.make
6.make install
安装gcc
yum install gcc-c++
安装openssl-devel
yum -y install openssl-devel
编译
进入到coturn-master源码目录后,执行如下命令
./configure 或者 sh configure
make
make install
以上3个命令执行后,要注意是否有错误信息,正常来说应该没什么问题,假如有报错信息自行去百度搜索。总之我这块没遇到其他问题。
使用如下命令看下是否安装成功:
which turnserver
安装成功后,初始化数据库的用户名密码
turnadmin -a -u 用户名(test) -p 密码(123456) -r 区域(beijing)
到如下目录修改配置文件
/usr/local/etc
默认情况下,该目录下会有turnserver.conf.default文件,复制一份turnserver.conf,修改该文件
cp turnserver.conf.default turnserver.conf
生成秘钥
生成指令:
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
执行后,会在/etc下生成2个文件
然后vim修改turnserver.conf文件
listening-port=3478 #监听端口
listening-device=eth0 #监听的网卡
external-ip=xx.xx.xx.xx #公网ip
listening-ip=172.xx.xx.xxx #内网地址
user=username:password
realm=haha #一般与turnadmin创建用户时指定的realm一致
cli-password=123456 #不加这个运行会报错,随便写
tls-listening-port=5349 #tls端口
relay-ip=172.xx.xx.xxx #内网地址
relay-threads=50
lt-cred-mech
pidfile=”/var/run/turnserver.pid”
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
这里重点注意user=username:password后边千万别家注释,否则会报error 401:Unauthorized!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!笔者的惨痛经历
把以上内容复制到文件头部即可。
网卡名称,内网地址通过ifconfig去查询
外网地址通过
curl https://myip.ipip.net
去查询外网地址
阿里云端口配置
需要开通阿里云安全组,udp、tcp的3478和5349端口,切记!
启动服务
执行如下命令,启动服务
turnserver -o -a -f -v -r beijing
使用如下命令,查看进程是否启动
ps -ef|grep turn
使用如下命令,监听端口
lsof -i:3478
假如没有lsof可以通过如下命令安装
yum install lsof
查看日志
可以到var/log目录查看日志:
测试是否可用
到https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/网站测试,
在如图地方添加server,然后点击下边的Gather candidates。
列表中Address出现你的公网ip,Type为relay时,代表你的服务是公网能访问的。
否则保证存在问题,检查端口映射,防火墙,配置等原因。
一定要切记一定要出现relay 后边跟你的公网ip,才代表测试通过,否则都是有问题的,我之前这块没测通过,内网能跑通,公网跑不通,后来测试通过,公网也可以了。!!!!!!!!!!!!!
客户端配置
客户端的地址修改为【turns:公网ip:3478】即可访问,当然别忘记配置用户名和密码
更多使用说明参考github。 https://github.com/coturn/rfc5766-turn-server/blob/v3.2/README.turnserver
以上。