coturn符合目前最新RFC关于STUN/TURN/ICE的相关要求。该项目由rfc5766-turn-server进化而来,是原作者Oleg Moskalenko为了应对新的标准重新开发的标准TURN服务器。
本文档描述在虚拟机上搭建coturn服务的详细步骤。
本文所描述的coturn搭建步骤基于以下的操作系统环境:
coturn目前需要安装的gcc版本:
修改当前用户的最大打开描述符数,增加到10万,并保存到默认配置文件 /etc/security/limits.conf
查看:cat /proc/sys/fs/file-max,修改即修改该数值
在搭建coturn之前,请确保如下的软件包/库已经安装到系统标准位置。
sudo yum install openssl-devel
sudo yum install sqlite
sudo yum install sqlite-devel
sudo yum install libevent
sudo yum install libevent-devel
为了使用yum安装以上的软件包,需要先手动安装epel:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
另外,目前在epel中未能找到libevent-devel包,所以需要手动安装。在网上找到一个rpm包仓库,http://www.rpmfind.net/linux/rpm2html/search.php?query=libevent-devel,里面包含本环境下的libevent-devel.
sudo yum install http://www.rpmfind.net/linux/centos/7.6.1810/os/x86_64/Packages/libevent-devel-2.0.21-4.el7.x86_64.rpm
为方便维护,第三方安装的应用不安装到系统标准目录下,而是单独安装到另一个/apprun目录。 创建相关目录的指令如下:
sudo mkdir /apprun
sudo chown ec2-user:ec2-user /apprun/
mkdir /apprun/usr/
mkdir /apprun/usr/log
mkdir /apprun/usr/var/db
mkdir /apprun/usr/var/run
解压coturn源码包,在源码顶层目录执行如下操作
配置:
configure --prefix=/apprun/usr
编译coturn:
make
安装coturn到指定目录
make install
将附件中的turnserver.conf复制到以下目录
/apprun/usr/etc/
附件中的默认turnserver.conf主要对以下几个设置项进行配置,请根据具体部署情况进行修改:
在任意目录键入如下命令,以守护进程方式启动coturn。
/apprun/usr/bin/turnserver -c /apprun/usr/etc/turnserver.conf -o
修改云端防火墙配置,增加如下的放行规则
入站规则:
协议 | 端口范围 | 来源 |
---|---|---|
TCP | 3478 - 3479 | 0.0.0.0/0 |
UDP | 3478 - 3479 | 0.0.0.0/0 |
UDP | 20000 - 29999 | 0.0.0.0/0 |
出站规则: 所有流量
成功启动coturn服务后,我们还需要手动执行测试脚本,确保服务器已经正常运行。
进入已经编译成功的源码目录,在源码目录下执行以下的测试脚本
./examples/scripts/rfc5769.sh # 自测加密签名功能
修改examples/scripts/basic/udp_c2c_client.sh,将其中的127.0.0.1更改为coturn服务器的公网IP, ,增加-u test -w 1234参数(与配置文件中设置的用户密码一致), 然后执行该脚本
./examples/scripts/basic/udp_c2c_client.sh
也可以在另外的主机上执行此脚本,更真实验证turn的连通性。
为了提高可靠性,以及开机自动启动,需要在系统中安装一个检查脚本。当coturn由于意外情况退出时,能够及时重新启动,保证服务可用性。安装方法如下:
将附件中的start.coturn.sh脚本复制到/apprun/usr/bin/目录,修改脚本中的工作路径为/apprun/usr
使用以下命令,打开当前用户crontab,
crontab -e
在crontab 表中加入如下引号中的语句:
" * * * * * /apprun/usr/bin/start.coturn.sh > /dev/null 2>&1 "