coturn服务器配置(从编译到测试)201907

重点!

  • 按照官方指导进行配置;
    官方指导:https://github.com/coturn/coturn/wiki/CoturnConfig ,以及INSTALL、README文件;
  • 仔细看每个步骤中出现的提示。

ps.完整官方demo apprtc项目部署见:https://blog.csdn.net/ts_dchs/article/details/97402024

作者: 花果山の香蕉

SETP1:安装依赖库——libevent library

:libevent是一个异步事件处理软件库,coturn使用该库需要预先安装。
服务器处理大量连接时它们往往会产生问题,因为它们使用的内存或 CPU 太多,或者达到了某个操作系统限制。主要方法有:

  • 循环,循环遍历打开的网络连接的列表,判断是否有要读取的数据。效率低;

  • poll、epoll 和变体,使用回调机制处理,poll结构很大添加新连接影响性能;

  • 利用多线程,为每个链接启动一个线程,OS进行调度,但会引起CPU、RAM、上下文切换的损失,不适合大量活跃线程;

  • libevent ,事件机制,对于不同平台的上述实现加一个包装器,简化链接添加,降低底层IO。
    参考:https://www.ibm.com/developerworks/cn/aix/library/au-libev/index.html

    下载库,最新版本在release(https://github.com/libevent/libevent/releases/ ) 中查看

$ wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
解压与编译
$ tar xvfz libevent-2.0.21-stable.tar.gz
$ cd libevent-2.0.21-stable
$ ./configure
生成Makefile文件,注意configure的提示,安装缺少的依赖,如openssl开发库
  $ sudo apt install libssl-dev
$ ./configure
$ sudo make
$ sudo make install
安装libevent和openssl开发库完毕

SETP2:安装coturn

获取Coturn源码,从https://github.com/coturn/coturn/wiki/Downloads 查阅版本
$ wget https://coturn.net/turnserver/v4.5.0.8/turnserver-4.5.0.8.tar.gz
解压并cd到目录,注意阅读 INSTALL和README文件。
$ ./configure
生成Makefile文件,注意configure的提示,安装缺少的依赖库,如需要一个数据库可以用sqlite

	sqlite安装
	$ sudo apt install sqlite3
	sqlite开发库安装
	$ sudo apt install libsqlite3-dev

$ ./configure
$ sudo make
$ sudo make install
编译安装成功结果 在这里插入图片描述
*注:sqlite数据库地址如上提示

SETP3:TURN数据库配置

增加用户:增加普通long-term TURN用户(还有管理员用户),用于WebRTC的登陆。

格式:$ turnadmin -a -u  -r  -p 
$ sudo turnadmin -a -u ts -p 12345678 -r testrealm
添加用户名为ts,密码为12345678,realm域为testrealm的用户。

注意:

  • 如果不用默认db也可以通过命令行配置需要使用的db文件路径
  • 需要sudo否则无法写入db文件,查询为空,或者给db文件改权限。
  • 如果没有安装sqlite并不会报错,只是查询为空。

查看当前的普通用户

$ turnadmin -l
# 输出:ts[testrealm] 

删除普通用户

格式:$ turnadmin -d -u  -r 

命令参考:https://github.com/coturn/coturn/wiki/turnadmin,详细见man turnadmin

SETP4:TURN服务配置文件

turnserver默认搜索位置:/etc/turnserver.conf或/usr/local/etc/turnserver.conf
参考该conf文件以及设置解释:/usr/local/etc/turnserver.conf.default,大部分可以保持默认配置,参考解释进行修改。

生成加密传输需要的私钥、证书

证书和私钥用于加密传输,可信机制。证书表明身份,私钥是自己留用的解密方法。
私钥只需自身保管,丢失需要重新生成,让就证书失效。证书中含有密钥用于进行加密通信。往往非对称加密获得对称加密密钥再进行通讯。HTTPS的S为SSL/TLS(用于TCP)。
自签名证书生成:

# openssl req -x509 -days 1000 -newkey rsa:2048 -keyout ./key.pem -out ./cert.pem -nodes 
	得到两个文件,拷贝到/cert/目录下备用
	The `req` command primarily creates and processes certificate requests in PKCS#10 format
	-x509 请求签名,输出一个自签名证书,自己充当CA认证
	-days 1000 默认30天,用于-x509天数设置
	-newkey rsa:2048 生成新的认证和私钥
	-nodes 对生成的私钥不加密

openssl req详见:man openssl
其他参考:https://blog.csdn.net/jiangshouzhuang/article/details/52730442
配置文件turnserver.conf

# 本地监听外网的网卡设备,默认eth0
listening-device=eth0
# TURN服务器UDP/TCP监听端口,默认:3478,同时根据协议会自动开启3479
# 应该需要防火墙开放端口
listening-port=8101
# TURN服务器TLS监听端口,默认5349,自动开启5350
#本地用于转发的网卡设备,默认eth0
relay-device=eth0
# UDP中继端口范围,用于UDP转发,注意安全组放通
# (default values are 49152 and 65535)
min-port=8110
max-port=8120

# 日志输出级别,turnserver 启动时加上 -v,可以得到更清晰的日志输出,默认关闭
# Verbose
# 消息验证,WebRTC 的消息里会用到,默认关闭
fingerprint

# long-term验证机制,webrtc 通过 TURN中继使用的验证方式,默认关闭即不需要认证机制。
lt-cred-mech

# 默认域Realm
# 当在数据库中没有显示的域关系定义时,或没有使用任何db时使用。
# 配合long-term认证机制或者TURN REST API使用,需要设置。
realm=realm.me

# TURN REST API 认证标记。
# 但无法同时使用lt-cred-mech和use-auth-secret两种方式,保持注释
# use-auth-secret
# REST API 加密所需的'静态' KEY,同保持注释
# static-auth-secret

# 认证文件和私钥,用户TLS加密传输。
cert=/cert/cert.pem
pkey=/cert/key.pem

#屏蔽multicast IP地址(224.0.0.0 and above)的 转发
no-multicast-peers

SETP5:启动和测试

启动turn服务器
sudo turnserver -c /etc/turnserver.conf
查看是否打开设置端口(8101),正确加载配置:

$ netstat -nap | grep 8101
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 172.21.0.9:8101         0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:8101          0.0.0.0:*               LISTEN      -
tcp        0      0 172.21.0.9:8101         0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:8101          0.0.0.0:*               LISTEN      -
udp        0      0 172.21.0.9:8101         0.0.0.0:*                           -
udp        0      0 172.21.0.9:8101         0.0.0.0:*                           -
udp        0      0 127.0.0.1:8101          0.0.0.0:*                           -
udp        0      0 127.0.0.1:8101          0.0.0.0:*                           -

测试
使用 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 测试如图:
认证配置
成功如下图:
认证成功
认证失败如图:
认证失败

认证失败的几个原因(不完全欢迎补充):

  • 没有正确创建数据库,turnadmin -l为空;
  • 用户名密码输入错误;
  • realm错误:如果使用默认realm,它和turnadmin添加用户对应的realm不同,则无法通过认证。可以通过turnserver -r new.realm来覆盖默认设置;
  • 证书问题?(未验证)

*可以将turnserver输出重定向保存log搜索error或者其他错误,常会有收获。

你可能感兴趣的:(WebRTC,WebRTC)