WebRTCを使ってみよう! で紹介されている rfc5766-turn-server は既に更新が終わり、別のプロジェクトになっています。
coturn を代わりに使用します。 https://github.com/coturn/coturn/wiki/Downloads から最新バージョンをダウンロードしてビルドします。
※ダウンロードページに turnserver-*-amazon-aws-ec2-x86_64.txt というファイルあり! EC2 ではこの内容にも注意すること
$ sudo -s
# cd
# yum -y install openssl openssl-devel sqlite sqlite-devel libevent libevent-devel
# yum -y install make gcc
# wget http://turnserver.open-sys.org/downloads/v4.5.0.3/turnserver-4.5.0.3.tar.gz
# tar xzf turnserver-4.5.0.3.tar.gz
# cd turnserver-4.5.0.3
# ./configure
# make
# make install
# cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
# vi /usr/local/etc/turnserver.conf
設定ファイルの変更点は以下の通り: WebRTCを使ってみよう! とは似ていても異なるので注意
- listening-port=80
- tls-listening-port=443
- listening-ip=xxx.xx.x.xx … サーバのプライベートIP
- relay-ip=xxx.xx.x.xx … サーバのプライベートIP
- external-ip=xx.xx.xx.xx … サーバのパブリックIP
- lt-cred-mech … コメントを外して有効化
- userdb=/usr/local/var/db/turndb … ローカルでビルドした場合は場所が異なる
- realm=example.com … 使用したい名前に変える
- cert=/usr/local/etc/turn_server_cert.pem … コメントを外して有効化(実際にこのファイルも用意する必要あり)
- pkey=/usr/local/etc/turn_server_pkey.pem … 同上
サーバ証明は Let's Encrypt で取得しました:
# cp /etc/letsencrypt/live/turn.example.com/fullchain.pem /usr/local/etc/turn_server_cert.pem
# cp /etc/letsencrypt/live/turn.example.com/privkey.pem /usr/local/etc/turn_server_pkey.pem
https://github.com/coturn/coturn/wiki/CoturnConfig を参考にしてください。
# export PATH=$PATH:/usr/local/bin
# turnadmin -a -u ninefingers -p youhavetoberealistic -r example.com
ユーザ情報の管理に SQLite データベースを使用する設定になっているので、以下のコマンドで内容を確認してみてください。
# sqlite3 /usr/local/var/db/turndb "SELECT * FROM turnusers_lt"
最初は手で起動して機能することを確かめます:
# /usr/local/bin/turnserver -v -c /usr/local/etc/turnserver.conf
機能することが分かったらデーモンスクリプトを書きます: EC2 向けにアドレスを書き換える処理が入れてあります
#!/bin/bash
### BEGIN INIT INFO
# Provides: STUN/TURN
# Required-Start: $local_fs $network $remote_fs
# Should-Start:
# Required-Stop: $local_fs $network $remote_fs
# Should-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: a TURN relay server
# Description: a TURN relay server implementation.
### END INIT INFO
. /etc/init.d/functions
PID_FILE="/var/run/turnserver.pid"
case $1 in
start)
echo -n "Starting turnserver "
LOCAL=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
EXTERNAL=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
/bin/sed -i "s/^relay-ip=[0-9.]*/relay-ip=${LOCAL}/" /usr/local/etc/turnserver.conf
/bin/sed -i "s/^listening-ip=[0-9.]*/listening-ip=${LOCAL}/" /usr/local/etc/turnserver.conf
/bin/sed -i "s/^external-ip=[0-9.]*/external-ip=${EXTERNAL}/" /usr/local/etc/turnserver.conf
/usr/local/bin/turnserver --daemon --pidfile "$PID_FILE" -c /usr/local/etc/turnserver.conf > /dev/null
RETVAL=$?
if [ $RETVAL = 0 ]; then
echo_success
else
echo_failure
fi
echo
;;
stop)
echo -n "Shutting down turnserver "
killproc -p "$PID_FILE" turnserver
RETVAL=$?
echo
;;
status)
status -p "$PID_FILE" turnserver
RETVAL=$?
;;
*)
echo "Usage: $(basename "$0") { start | stop | status }"
;;
esac
exit $RETVAL
後はサービス登録すればいつも通り使えます。
# chmod +x /etc/init.d/turnserver
# chkconfig --add turnserver
2016年1月に書いたものです。
ちょっと古いので、あまりあてにしないでくださいね...