CoTURN服务配置记录

CoTURN是一种流行的开源TURN服务器

简单介绍


CoTURN是一种流行的开源TURN服务器,而TURN(Traversal Using Relays around NAT)协议是用于帮助位于NAT或防火墙后面的设备建立通信连接

在WebRTC和某些VoIP场景中,当直接对等连接(P2P)由于网络限制无法建立时,CoTURN服务器就可以充当中继服务器,帮助数据在不同网络之间传输

下面分别介绍使用Docker安装和直接安装的两种方式

使用Docker搭建CoTURN


配置docker-compose.yml


直接使用docker compose部署启动,下面是docker-compose.yml文件的内容

注意:提前申请好SSL证书并挂载到容器里

version: "3.4"
services:
  coturn_server:
    image: coturn/coturn:latest
    restart: always
    container_name: coturn
    network_mode: host
    volumes:
      - /docker/coturn/turnserver.conf:/etc/coturn/turnserver.conf
      - /etc/letsencrypt/live/your.domain/fullchain.pem:/etc/letsencrypt/live/your.domain/fullchain.pem
      - /etc/letsencrypt/live/your.domain/privkey.pem:/etc/letsencrypt/live/your.domain/privkey.pem

其中网络模式设置为host,是因为考虑到CoTURN服务需要占用很多端口,需要进行较多的映射,host模式让容器服务可以直接使用宿主机的网络,这也是官方推荐的做法

配置turnserver.conf


turnserver.conf包含了CoTURN服务器所需的全部配置,详细的配置选项可以参考官方Github提供的示例内容

下面是我目前使用的配置:

listening-port=3478
tls-listening-port=5349
listening-ip=0.0.0.0
external-ip=your_public_ip
server-name=your.domain
realm=your.domain
fingerprint
use-auth-secret
static-auth-secret=your_secret
cert=/etc/letsencrypt/live/your.domain/fullchain.pem
pkey=/etc/letsencrypt/live/your.domain/privkey.pem
log-file=/var/tmp/turnserver.log
min-port=49152
max-port=65535
total-quota=0
bps-capacity=0
stale-nonce
no-multicast-peers

这里面certpkey设为自己的证书和私钥,这里我是用certbot申请后挂载到容器里的,应该也可以使用openssl req -x509 -newkey rsa:2048 -keyout /docker/coturn/turnserver_pkey.pem -out /docker/coturn/turnserver_cert.pem -days 99999 -nodes生成自签名证书和私钥。PS:这里有一点很坑,就是一定要确保证书和私钥对所有人都有可读的权限(chmod 644 xxx.pem),不然CoTURN无法读取就不会监听TLS端口

static-auth-secret建议使用pwgen -s 64 1openssl rand -hex 32生成认证密码

启动CoTURN服务


执行docker-compose up -d启动服务,顺利的话可以通过netstat -antp看到3478和5349端口都已被监听

可以使用turn:your.domainturns:your.domain来连接CoTURN服务器

小结


不出意外的话,这套turnserver.conf配置是没有问题的,我在配置好后第一时间用Matrix Synapse连接进行语音和视频通话测试是很顺利的,但是后来有一次发现莫名其妙的连接不上了,折腾了半天最后放弃了Docker直接在服务器上装了CoTURN,并调整了配置,一开始也是无法连接,最后退出重新登录了一下Matrix用户后发现竟然又行了

所以这套Docker方案应该还是可以使用的,如果出现像我一样的问题可以先尝试重新登陆一下Matrix

正是因为这样,所以有了下面这套直接在服务器安装的方案,同样是可行的

直接在服务器搭建CoTURN


安装


Debian系统直接apt install coturn就完成了

然后通过systemctl status coturn可以查看到coturn服务已经启动了,但是默认情况下coturn服务是由安装时创建的turnserver用户运行的,如果后面要配置SSL证书和密钥,那么turnserver用户可能由于无法读取导致TLS无法启动

所以可以考虑修改coturn服务配置为root用户,也就是修改/lib/systemd/system/coturn.service中的用户和组为root

配置turnserver.conf


这里的配置是采用了Matrix官方的建议,与之前Docker部署时的配置不同,但应该都可以使用

use-auth-secret
static-auth-secret=your_secret
realm=your.domain
syslog
no-tcp-relay
no-multicast-peers
user-quota=12
total-quota=1200
cert=/etc/letsencrypt/live/your.domain/fullchain.pem
pkey=/etc/letsencrypt/live/your.domain/privkey.pem

重启服务


执行systemctl restart coturn,不出意外的话就可以顺利连通了

写在最后


TURN服务器建议使用一台线路好的机器,因为要尽可能保证语音和视频通话的质量

我目前使用的是一台三网优化的香港服务器,测试连通性和通话质量都较好

发表了43篇文章 · 总计78.96k字
·
Built with Hugo
主题 StackJimmy 设计