Skip to content

Instantly share code, notes, and snippets.

@uemuraj
Last active December 27, 2020 00:47
  • Star 15 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save uemuraj/1909514059a056f3a024 to your computer and use it in GitHub Desktop.
TURNサーバの構築

TURNサーバの構築

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 向けにアドレスを書き換える処理が入れてあります

/etc/init.d/turnserver
#!/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
@uemuraj
Copy link
Author

uemuraj commented Dec 27, 2020

2016年1月に書いたものです。
ちょっと古いので、あまりあてにしないでくださいね...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment