STUN/TURN伺服器搭建 [toc] 編譯安裝 1. 編譯安裝 OpenSSL; 2. 編譯安裝 libevent 最新版; 3. coturn 可以選擇使用多種資料庫,這裡使用的是 SQLite ,使用命令 (or sqlite3) 和 (or sqlite3 dev) 安裝; 4. 編譯co ...
目錄
STUN/TURN伺服器搭建
編譯安裝
- 編譯安裝 OpenSSL;
sudo apt-get install libssl-dev
- 編譯安裝 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
- coturn 可以選擇使用多種資料庫,這裡使用的是 SQLite ,使用命令
sudo apt-get install sqlite
(or sqlite3) 和sudo apt-get install libsqlite3-dev
(or sqlite3-dev) 安裝; - 編譯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