当前位置:网站首页>webRTC中的coturn服务安装
webRTC中的coturn服务安装
2022-07-27 14:42:00 【purple.taro】
目录
4.3.1 收集 listening-device 和 listening-ip
1、先准备一台云主机
主要厂商上都有免费的云主机可以申请,也可以自己购买一个来进行测试
本文中所讲示例即在云上的主机配置如下:
| 配置项 | 配置值 |
| CPU | 2核 |
| 内存 | 4G |
| 存储 | 80G |
| OS | CentOS 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++
重点说明:
- 在安装 libevent2 之前必须先安装 OpenSSL,因 libevent2 安装时会检测 OpenSSL是否安装及版本,OpenSSL 版本太低会导致 libevent2 的安装不成功,进一步影响 TURN Server 的 TLS 功能;
- 旧版本的 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 install2.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-devel3、安装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/turnadmin4、 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-ip | listening-device 网卡上的内网IP,中继服务器的监听IP地址,可以配置多个; |
| listening-port | Conturn 监听UDP/TCP端口,默认为3478 |
| relay-device | 同listening-device信息 |
| relay-ip | 同listening-ip信息,中继服务器的IP地址; |
| external-ip | 公网IP,外部IP,当中继服务器在NAT网络内部时指定,此处可以不添加 |
| tls-listening-port | coturn监听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
从以上信息分析如下:
- listening-device 值使用 eth0;
- 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.pem、turn_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”(收集候选链路)

此图为借用文章《》中的图片,图片中的部分信息说明如下:
- 图片中 TURN username 值为 turn:121.1.1.86:3478;
- 图片中 TURN username 值是本文的 neu ;
- 图片中 TURN password 值是本文的 123456;
如果看到最后的reply那一行,address里的ip与turn服务器的公网ip相同,说明中继成功。
--------------------------------
参考博文
1. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建;
2. WebRTC-在阿里云基于coturn搭建STUN\TURN服务器;
3. Turnserver服务器搭建;
4. 官方 INSTALL 文档;
边栏推荐
- Binary Insertion Sort
- C: On function
- Sword finger offer 51. reverse pairs in the array
- 文本截取图片(哪吒之魔童降世壁纸)
- Mapreduce实例(一):WordCount
- ARIMA模型选择与残差
- [tensorboard] oserror: [errno 22] invalid argument processing
- [sword finger offer] interview question 52: the first common node of two linked lists - stack, hash table, double pointer
- 通俗易懂地区分++i和i++
- 网络原理(1)——基础原理概述
猜你喜欢

Scratch crawler framework

Text capture picture (Wallpaper of Nezha's demon child coming to the world)

QT (VI) value and string conversion

剑指 Offer 51. 数组中的逆序对

Openwrt adds support for SD card

Single machine high concurrency model design

Using Lombok results in the absence of parent class attributes in the printed toString

UDP message structure and precautions

Content ambiguity occurs when using transform:translate()
![[sword finger offer] interview question 45: arrange the array into the smallest number](/img/d1/e2e21c95ecf5b8e3854f134cc47228.png)
[sword finger offer] interview question 45: arrange the array into the smallest number
随机推荐
Mapreduce实例(一):WordCount
逗号操作符你有用过吗?
[sword finger offer] interview question 51: reverse pairs in the array - merge sort
ARIMA模型选择与残差
[sword finger offer] interview question 52: the first common node of two linked lists - stack, hash table, double pointer
Baidu picture copy picture address
Embedded development: tips and techniques -- seven techniques to meet the real-time deadline
Under the ban, the Countermeasures of security giants Haikang and Dahua!
C language: data storage
Interview focus - TCP protocol of transport layer
[sword finger offer] interview question 49: ugly number
keil 采用 makefile 实现编译
flink打包程序提交任务示例
The risk of multithreading -- thread safety
Openwrt new platform compilation
线程间等待与唤醒机制、单例模式、阻塞队列、定时器
Taking advantage of 5g Dongfeng, does MediaTek want to fight the high-end market again?
[sword finger offer] interview question 41: median in data flow - large and small heap implementation
突破软硬壁垒,赛灵思面向开发者发布Vitis统一软件平台
判断数据的精确类型