webRTC中的coturn服务安装

目录

1、先准备一台云主机

2、安装coturn的依赖

2.1 依赖软件准备

2.1 安装依赖组件

2.2 安装coturn的持久化保存用户信息库

3、安装coturn

4、 coturn配置

4.1 创建用户

4.2 配置说明

4.3 收集配置信息

4.3.1 收集 listening-device 和 listening-ip

4.3.2 查看云主机公网IP

4.3.3 收集realm信息

4.3.4 收集user信息

4.3.5 生成 tls 证书

4.4 配置

5、 启动 coturn 并验证

5.1 启动 coturn

5.2 验证

参考博文


1、先准备一台云主机

主要厂商上都有免费的云主机可以申请,也可以自己购买一个来进行测试

本文中所讲示例即在云上的主机配置如下:

配置项配置值
CPU2核
内存4G
存储80G
OSCentOS 7.6

2、安装coturn的依赖

2.1 依赖软件准备

coturn的依赖软件如下:

OpenSSL, SQLite, libevent2, PostgreSQL, MySQL (or MariaDB) and Hiredis
你可以从以下他们的网站直接下载:
 - http://www.openssl.org (required);
 - http://www.libevent.org (required);
 - http://www.sqlite.org (optional);
 - http://www.postgresql.org (optional);
 - http://www.mysql.org (or http://mariadb.org) (optional);
 - https://github.com/mongodb/mongo-c-driver (optional);
 - http://redis.io (optional).

2.1 安装依赖组件

$ yum install -y openssl-devel
$ yum install -y libevent libevent-devel
$ yum install -y gcc gcc-c++

重点说明

  1. 在安装 libevent2 之前必须先安装 OpenSSL,因 libevent2 安装时会检测 OpenSSL是否安装及版本,OpenSSL 版本太低会导致 libevent2 的安装不成功,进一步影响 TURN Server 的 TLS 功能;
  2. 旧版本的 libevent 版本有一定的缺陷,所以请安装 libevent2 ;

如无法安装libevent-devel可下载后安装,如下:

$ wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
$ tar -zxvf libevent-2.1.12-stable.tar.gz
$ cd libevent-2.1.12-stable
$ ./configure
$ make & make install

2.2 安装coturn的持久化保存用户信息库

用于持久化保存用户信息的库支持如下几种:

  • sqlite
  • postgresql
  • mysql
  • hiredis

以上四种选择其一安装即可。

默认是持久化保存在sqlite中,安装如下:

$ yum install -y sqlite 
$ yum install -y libsqlite3-dev

重点说明

            SQLite 必须安装版本 3.x以上。

如安装libsqlite3-dev失败,使用如下命令:

$ yum list | grep sqlite3
dspam-sqlite3.x86_64                     3.10.2-12.el7                 epel     
libsqlite3x.x86_64                       20071018-20.el7               epel     
libsqlite3x-devel.x86_64                 20071018-20.el7               epel     
preludedb-sqlite3.x86_64                 5.2.0-1.el7                   epel     
python-sqlite3dbm.noarch                 0.1.4-6.el7                   epel     
rubygem-sqlite3.x86_64                   1.3.5-4.el7                   epel     
rubygem-sqlite3-doc.noarch               1.3.5-4.el7                   epel     
soci-sqlite3.x86_64                      4.0.0-4.el7                   epel     
soci-sqlite3-devel.x86_64                4.0.0-4.el7                   epel     
sqlite3-dbf.x86_64                       2011.01.24-3.el7              epel     
uwsgi-plugin-sqlite3.x86_64              2.0.18-8.el7                  epel     
zabbix40-dbfiles-sqlite3.noarch          4.0.37-1.el7                  epel     
zabbix40-proxy-sqlite3.x86_64            4.0.37-1.el7                  epel     
zabbix50-dbfiles-sqlite3.noarch          5.0.19-1.el7                  epel     
zabbix50-proxy-sqlite3.x86_64            5.0.19-1.el7                  epel

从以上列表中可见 libsqlite3x.x86_64 和 libsqlite3x-devel.x86_64 ,安装这两个包即可,命令如下:

$ yum install -y libsqlite3x.x86_64
$ yum install -y libsqlite3x-devel.x86_64

如果想保存到mysql中,上面的sqlite安装选项需改成mysql相关的依赖项。

注意:一定要在./configure前,把sqlite或mysq依赖项安装好,否则./configure时无法识别出sqlite或mysql,最后make成功的版本,会显示xxx is not supported。

其他库的安装视你的选择,安装方法如下:

$ sudo yum install postgresql-devel
$ sudo yum install postgresql-server

$ sudo yum install mysql-devel
$ sudo yum install mysql-server

$ sudo yum install hiredis
$ sudo yum install hiredis-devel

3、安装coturn

下载coturn源码并编译,从网址(https://github.com/coturn/coturn/wiki/Downloads)或(Index of /turnserver)中下载需要版本源码。

$ wget https://coturn.net/turnserver/v4.5.2/turnserver-4.5.1.3.tar.gz
$ tar -zxvf turnserver-4.5.1.3.tar.gz
$ cd turnserver-4.5.1.3
$ ./configure --prefix=/usr/local/turnserver
$ make & make install

默认情况下,coturn使用SQLite数据库进行用户和设置。当TurnServer第一次启动时,会自动创建(空)该数据库。

创建软链接

ln -s /usr/local/turnserver/bin/turnserver /usr/bin/turnserver
ln -s /usr/local/turnserver/bin/turnadmin /usr/bin/turnadmin

4、 coturn配置

4.1 创建用户

使用命令turnadmin创建一个用户/密码,并添加到SQLlite数据库中

$ mkdir /var/lib/turn
$ cp /usr/local/turnserver-4.5.1.3/sqlite/turndb /var/lib/turn/turndb
$ turnadmin -k -u neu -p 123456 -r yourRealm
0x9301762d41ad637475d4c41d33a0e3ed
0: : SQLite connection was closed.
0: : log file opened: /var/log/turn_17050_2022-02-23.log

创建用户neu,密码为123456,同时指定realm为yourRealm,大家可根据自己的需求来更改。

执行 turnadmin 后有一串编码 0x9301762d41ad637475d4c41d33a0e3ed这串编码将需添加到配置文件,配置结果见后面的配置信息。

查看刚刚新建的用户信息,命令及结果如下:

$ cd /usr/local/turnserver
$ ./bin/turnadmin -l
neu[yourRealm]
0: : SQLite connection was closed.
0: : log file opened: /var/log/turn_17053_2022-02-23.log

4.2 配置说明

配置项说明
listening-device安装coturn的服务器上网卡名称
listening-iplistening-device 网卡上的内网IP,中继服务器的监听IP地址,可以配置多个;
listening-portConturn 监听UDP/TCP端口,默认为3478
relay-device同listening-device信息
relay-ip同listening-ip信息,中继服务器的IP地址;
external-ip公网IP,外部IP,当中继服务器在NAT网络内部时指定,此处可以不添加
tls-listening-portcoturn监听TLS/DTLS端口,默认为5349
server-name服务器名称,用于OAuth认证,默认和realm相同;
realm域名
userdb用于保存用户信息
cert/pkey自签名证书,cert和pkey配置的自签名证书用Openssl命令生成
lt-cred-mech要有这个配置项,否则不支持webrtc

说明:将TCP/UDP和TLS/DTLS分别定义监听端口是符合RFC5766规范的,但是通过配置两者能使用同一端口,不推荐;

4.3 收集配置信息

4.3.1 收集 listening-device 和 listening-ip

使用命令 ip addr 来查看本机的网卡和IP信息,具体如下:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:1b:6c:a0 brd ff:ff:ff:ff:ff:ff
    inet 172.26.13.148/18 brd 172.26.63.255 scope global dynamic eth0
       valid_lft 315273457sec preferred_lft 315273457sec

从以上信息分析如下:

  1.  listening-device 值使用 eth0;
  2.  listening-ip 值使用 172.26.13.148;

4.3.2 查看云主机公网IP

每个厂商的云主机管理方法不一,此处不作详细示例。

本次测试用云主机的公网IP为 121.1.1.86(非真实IP,自己做时请使用自己的公网IP

4.3.3 收集realm信息

根据前面4.1节中 turnadmin 命令的参数,确定 realm 的值取 yourRealm。

4.3.4 收集user信息

根据前面4.1节中 turnadmin 命令的参数,确定 user 的值取 neu:123456;分号前面是用户名,后面是密码。

4.3.5 生成 tls 证书

1. 运行如下命令生成签名证书 

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

其中,部分参数的意义如下:

  • -days 有效天数
  • -node 不加密密匙

根据上面的命令指定的路径,我们可以知道将在 /usr/local/coturn/etc 目录下生成 turn_server_pkey.pemturn_server_cert.pem 这两个文件。

在我的环境里面openssl命令执行时,会要求录入如下信息:

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Zhejiang
Locality Name (eg, city) [Default City]:shaoxing
Organization Name (eg, company) [Default Company Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:172.26.13.148
Email Address []:

上面信息中,绿色加粗信息是要录入的信息,关键是IP地址这块,测试时,特意做了内网IP和公网IP都测试了下,测试时,未发现问题。

2. 查看证书文件

命令如下:

$ ls -la /usr/local/coturn/etc/turn_*
-rw-r--r-- 1 root root 1326 Feb 21 14:39 /usr/local/turnserver/etc/turn_server_cert.pem
-rw-r--r-- 1 root root 1704 Feb 21 14:39 /usr/local/turnserver/etc/turn_server_pkey.pem

4.4 配置

生成配置文件方法有两种:

方法一:

$ cp /usr/local/turnserver/etc/turnserver.conf.default /usr/local/turnserver/etc/turnserver.conf

方法二:

$ vi /usr/local/turnserver/etc/turnserver.conf

然后将如下配置信息直接粘贴到“方法一”生成的配置文件后面,或者直接粘贴到“方法二”生成空文档中即可,具体配置信息如下:

listening-device=eth0
listening-ip=172.26.13.148
listening-port=3478
tls-listening-port=5349	
relay-device=eth0
relay-ip=172.26.13.148
min-port=49512	
max-port=65535
external-ip=121.1.1.86
fingerprint
lt-cred-mech
realm=yourRealm
userdb=/var/lib/turn/turndb
user=neu:0x9301762d41ad637475d4c41d33a0e3ed
user=neu:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli
cert=/usr/local/coturn/etc/turn_server_cert.pem
pkey=/usr/local/coturn/etc/turn_server_pkey.pem

保存 turnserver.conf 并退出。

5、 启动 coturn 并验证

5.1 启动 coturn

 启动命令如下:

$ cd /usr/local/turnserver
$ ./bin/turnserver -o -a -f -r yourRealm -c /usr/local/turnserver/etc/turnserver.conf

最后的-r yourRealm 意为指定realm,要与创建用户时指定的realm一致。可用lsof -i:3478校验下是否启动成功,如果看到类似下面的输出,说明3478监听正常。

5.2 验证

webrtc-samples官网还提供了一个检测ice穿透的在线工具:Trickle ICE

参考下图,把stun和turn地址设置好,然后点击最下面的“Gather candidates”(收集候选链路)

此图为借用文章《》中的图片,图片中的部分信息说明如下:

  1. 图片中 TURN username 值为 turn:121.1.1.86:3478;
  2. 图片中 TURN username 值是本文的 neu ;
  3. 图片中 TURN password 值是本文的 123456;

如果看到最后的reply那一行,address里的ip与turn服务器的公网ip相同,说明中继成功。

--------------------------------

参考博文

1. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

2. WebRTC-在阿里云基于coturn搭建STUN\TURN服务器

3. Turnserver服务器搭建

4. 官方 INSTALL 文档

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

purple.taro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值