在debian中使用Coturn创建和配置自己的STUN/TURN服务器

在debian中使用Coturn创建和配置自己的STUN/TURN服务器

关键词:coturn,stun,turn

安装Coturn一般分为两步。

第一步要查看安装的openssl版本,然后安装libevent

第二步是安装Coturn。

安装libevent

相关地址:

  • https://github.com/libevent/libevent
  • https://codechina.csdn.net/mirrors/libevent/libevent

注意

libevent与openssl的版本对应关系如下:

libevent openssl
2.1.x 1.1
2.0.x 1.0

如果你的openssl是1.1版本及以上,请安装2.1.x版本的libevent;

如果你的openssl是1.0版本及以上,请安装2.0.x版本的libevent。

查看openssl版本

1
openssl version
1
2
root@iZuf68ohfhdne8i8wsvd1tZ:~# openssl version
OpenSSL 1.1.1f 31 Mar 2020

这里使用2.1.12的版本进行安装。

下载2.1.12版本libevent

1
wget https://codechina.csdn.net/mirrors/libevent/libevent/-/archive/release-2.1.12-stable/libevent-release-2.1.12-stable.tar.gz

安装openssl依赖

1
sudo apt update && sudo apt install libssl-dev -y

编译

1
2
3
4
5
tar xvf libevent-release-2.1.12-stable.tar.gz
cd libevent-release-2.1.12-stable
./autogen.sh
./configure
make

打包

1
2
sudo apt install checkinstall -y
sudo checkinstall

这里需要把3 - Version: [ stable ] 修改成版本号,否则后面安装不成功。

安装成功

安装Coturn

1
sudo apt install coturn -y

可参考:https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html#coturn

TURN数据库配置

增加用户:增加普通long-term TURN用户,用于WebRTC的登陆。

1
sudo turnadmin -a -u <username> -r <realm> -p <password>

注意:

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

安装sqlite

1
sudo apt install sqlite3 libsqlite3-dev

如果报错:turnadmin: error while loading shared libraries: libmysqlclient.so.21

需要安装libmysqlclient-dev:

1
sudo apt-get install libmysqlclient-dev

查看当前的普通用户

1
turnadmin -l

删除普通用户

1
turnadmin -d -u <username> -r <realm>

修改TURN服务配置文件

配置文件路径为/etc/turnserver.conf

先将原来的默认配置复制一份,然后在添加新的配置文件。

1
2
sudo mv /etc/turnserver.conf /etc/turnserver.conf.bak
sudo vim /etc/turnserver.conf

一些常用的配置:

其中cert和pkey的文件地址请根据下一步使用openssl生成证书和密钥的文件路径来修改你的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 本地监听外网的网卡设备,默认eth0
listening-ip=172.17.62.224
listening-device=eth0
# TURN服务器UDP/TCP监听端口,默认:3478,同时根据协议会自动开启3479
# 应该需要防火墙开放端口
listening-port=3478
# TURN服务器TLS监听端口,默认5349,自动开启5350
tls-listening-port=5349
#本地用于转发的网卡设备,默认eth0
relay-device=eth0
# UDP中继端口范围,用于UDP转发,注意安全组放通
# (default values are 49152 and 65535)
min-port=49152
max-port=65535

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

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

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

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

# 启用DH密钥交换算法
dh2066
# 认证文件和私钥,用户TLS加密传输。
cert=/root/ssl/cert.pem
pkey=/root/ssl/certs/key.pem

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

使用openssl生成证书和密钥

tls加密通信需要密钥,可以用openssl工具生成:

1
sudo mkdir ssl && cd ssl
1
2
3
4
5
6
7
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 对生成的私钥不加密

重启服务

配置文件修改完毕以后需要重启一下服务以便使配置文件生效。

1
sudo service coturn restart

配置docker

1
2
3
4
5
6
7
docker run -it --user $(id -u):$(id -g) \
--restart=always --name=my-turnserver \
--network=host \
-v $(pwd)/my.cnf:/etc/coturn/turnserver.conf \
-v $(pwd)/cert.pem:/cert.pem \
-v $(pwd)/key.pem:/key.pem \
coturn/coturn:alpine

测试是否成功搭建

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/