欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

STUN/TURN服务器搭建

程序员文章站 2023-04-05 16:52:39
STUN/TURN服务器搭建 [toc] 编译安装 1. 编译安装 OpenSSL; 2. 编译安装 libevent 最新版; 3. coturn 可以选择使用多种数据库,这里使用的是 SQLite ,使用命令 (or sqlite3) 和 (or sqlite3 dev) 安装; 4. 编译co ......

stun/turn服务器搭建

编译安装

  1. 编译安装 openssl;
sudo apt-get install libssl-dev
  1. 编译安装 libevent 最新版;
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
make
sudo make install
  1. coturn 可以选择使用多种数据库,这里使用的是 sqlite ,使用命令sudo apt-get install sqlite (or sqlite3) 和 sudo apt-get install libsqlite3-dev (or sqlite3-dev) 安装;
  2. 编译coturn;
    下载coturn
tar xvfz turnserver-<...>.tar.gz
./configure
make
sudo make install

执行 ./configure 命令时没有使用 --prefix=/opt 参数,因为 openssl 是通过 apt-get 安装在默认位置,如果安装到其他位置 libevent 会找不到 openssl 库文件。

安装完成后在 bin 目录下生成六个可执行文件:

  • turnserver - stun/turn 服务器
  • turnadmin - 用于配置、管理账户
  • turnutils_stunclient - 用于测试 stun 服务
  • turnutils_uclient 用于测试 turn 服务,模拟多个udp、tcp、tls 或 dtls 类型的客户端
  • turnutils_peer
  • turnutils_rfc5769check

配置使用

添加用户

$ sudo turnadmin -a -u you_name -p you_password -r you_realm

这里默认使用了 sqlite 数据库,其中 -a 表示添加一个 long-term 用户,-u <user> 为用户名,-p <password> 为密码,-r <realm> 为该用户所属的 realm。在启动 turnserver 时需要指定 realm ,只有该 realm 下的用户才能登录。

注意一定要使用 root 权限配置,否则会配置失败,但是还没有错误提示。

启动server

配置完用户后就可以启动 turnserver 了,第一次启动前需要一个配置文件,这是使用模板生成,然后就可以启动 turnserver 了。

sudo cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
sudo turnserver -a -f -v -r lynky

其中 -a 表示使用 long-term 机制, -r 为指定的 realm ,只有该 realm 下的用户可以使用服务器。

测试

可以使用 trickle ice 测试

stun

使用下面的命令即可测试 stun 服务使用可用,唯一此参数是 stun 服务器的 ip地址或域名。

turnutils_stunclient 132.232.100.103

turn

使用下面的命令即可测试 turn 服务使用可用,值得注意的是必须使用 turnserver 启动时指定 realm 下的用户。

turnutils_uclient -u lynky -w lynky123 132.232.100.103

开机启动

修改/etc/turnserver.conf

listening-ip=127.0.0.1
listening-ip=172.16.0.99    # 内网ip
external-ip=221.208.117.45  # 公网ip,如果服务器在nat后需要指定该参数
fingerprint
lt-cred-mech
realm=<you_realm_name>

添加/etc/systemd/system/turnserver.service

[unit]
description=coturn
documentation=man:coturn(1) man:turnadmin(1) man:turnserver(1)
after=syslog.target network.target

[service]
type=forking
pidfile=/var/run/turnserver.pid
execstart=/usr/local/bin/turnserver --daemon --pidfile /var/run/turnserver.pid -c /etc/turnserver.conf
execstoppost=/usr/bin/rm -f /var/run/turnserver.pid
restart=on-abort

limitcore=infinity
limitnofile=999999
limitnproc=60000
limitrtprio=infinity
limitrttime=7000000
cpuschedulingpolicy=other

然后执行以下命令

# 使服务自动启动
sudo systemctl enable turnserver.service
# 启动服务
sudo systemctl start turnserver
# 停止服务
sudo systemctl stop turnserver

参考

[1] webrtc下的网络连接: stun, turn, ice, tcp
[2] 自己动手搭建 webrtc turn&stun 服务器
[3] coturnconfig