[webrtc 入门系列] centos搭建coturn服务器

发布时间 2023-05-08 13:44:58作者: lcyw163

1. coturn的搭建过程

1.1. 找一台有公网IP的主机

我的云服务器:华为云主机,操作系统:CentOS

1.2. 安装需要的环境

yum install git
yum install openssl
yum -y install openssl-devel
yum install libevent
yum install libevent2
yum install libevent-devel
  • 安装openssl
    yum install openssl-devel
    如果yum安装的openssl版本比较低,可以下载源码编译高版本的openssl

  • 编译安装libevent(手动安装)

wget https://github.com/libevent/libevent/releases/download/release-2.1.10-stable/libevent-2.1.10-stable.tar.gz
tar -zxvf libevent-2.1.10-stable.tar.gz
cd libevent-2.1.10-stable./configure
make & make install
  • 安装sqlite或mysql
    yum install sqlite libsqlite3-dev

注:coturn的用户信息等,默认是持久化保存在sqlite中,如果想保存到mysql中,把上面的sqlite安装选项改成mysql相关的依赖项。

yum -y install mysql-server	 #可选(安装mysql)
yum -y install mysql-client
yum -y install libmysqlcppconn-dev libmysqlclient-dev libmysql++-dev 

1.3. 下载coturn源码并编译

使用 wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz 下载安装包,
或是使用 git clone https://github.com/coturn/coturn 下载源码:

wget https://github.com/coturn/coturn/archive/4.5.1.2.tar.gz
tar -zxvf 4.5.1.1.tar.gz

cd coturn-4.5.1.1
./configure  --prefix=/localDev/turnserver // 指定安装的目录
make & make install

注意:一定要在./configure前,把sqlite或mysq依赖项安装好,否则./configure时无法识别出sqlite或mysql,

出现以下信息即为安装成功:
image

也可以使用如下命令检验coturn是否安装成功,出现turnserver程序的详细路径则表示安装成功。

1.4. 使用openssl创建证书

openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes

openssl req -x509 -newkey rsa:2048 -keyout turn_server_pkey.pem -out  turn_server_cert.pem -days 99999 -nodes

1.5. turnadmin设置用户名和密码

turnadmin -a -u ytest -p qqq123 -r realmtest
创建用户ytest,密码为123,同时指定realm为realmtest,请根据实际情况修改。

turnadmin -k -u ytest -p qqq123 -r realmtest

执行命令后会显示一串加密的密码字符串,在/etc目录下新建turnuserdb.conf文件,用于保存用户名和密码。

1.6.修改turnserver.conf配置文件

将默认配置模式文件复制一份到/usr/local/etc/下
cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf

修改下面几个关键项:

listening-port=3478     # 监听端口
listening-device=eth0   # 监听的网卡
relay-device=eth0       # 中转网卡
listening-ip=10.2.6.47  # 内网IP
tls-listening-port=5349 
relay-ip=10.2.6.47               #内网IP
external-ip=45.90.208.43         #公网IP
relay-threads=50 
lt-cred-mech 
cert=/etc/turn_server_cert.pem    # 证书文件
pkey=/etc/turn_server_pkey.pem    # 私钥文件
min-port=49152 
max-port=65535
userdb=/etc/turnuserdb.conf
#turnuserdb.conf中的用户名和密码,可以有多个
user=admin:qqq123    #账号密码

#一般与turnadmin创建用户时指定的realm一致,不指定realm时,默认为: 外网地址:3478
#realm=realmtest

pidfile="/var/run/turnserver.pid"    #存储进程pid的文件名

#打开密码验证
lt-cred-mech

1.7.启用coturn并验证

turnserver -v -r realmtest -a -o -c turnserver.conf

1.8.网站检测穿透效果

webrtc-samples官网还提供了一个检测ice穿透的在线工具:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
参考下图,把stun和turn地址设置好,然后点击最下面的“Gather candidates”(收集候选链路)

image

注意:

如果看到最后的reply那一行,address里的ip与turn服务器的公网ip相同,说明中继成功。
如果访问不了,可能是服务器防火墙没有开启3478端口。如果开启了防火墙的3478端口还不能访问,则考虑云服务的安全组策略是否同样开启了3478的tcp和udp端口。

如果 coturn log 中提示类似 9: session 001000000000000001: realm user <>: incoming packet message processed, error 401: Unauthorized 的提示,其实是没问题的,可以忽略。

1.9.停止turnserver

ps -ef | grep turnserver 
kill -9 xxxx