1 概要
サーバ & AWS 初めましてな初心者がAWS上にSTUN/TURNサーバを構築することになりました。
ここでは、coTurnによるTURNサーバ構築をわかりやすい言葉で紹介します。
2 前提
2.1 TURNサーバって?
TURNサーバ周辺の簡単な説明は【初心者向け】STUN/TURNサーバをざっくり解説してみたをお読みください。
2.2 coTurnって何者?
coTurn: https://github.com/coturn/coturn
簡単にSTUN兼TURNサーバが構築できるOSS。
3 本題
coTurnを使ったTURNサーバ構築方法です。
TURNサーバにフォーカスして記述しますが、同時にSTUNサーバも構築されます。
3.1 EC2インスタンスの作成~設定
- Amazon EC2 でubuntuのインスタンスを作成します。
- (ubuntuだとcoTurnのインストールが簡単です。)
- 作成したインスタンスにssh接続します。
- sudoコマンドを使えるようにします。
sudo vi /etc/hosts
# 「127.0.1.1 ip-10-0-0-76」を追加します。(後半はインスタンスのプライベートIPアドレス)
3.2 coTurnのインストール
# 依存ライブラリをインストール
sudo apt-get update && sudo apt-get install libssl-dev libevent-dev sqlite3 make -y
# coTurnのソースをダウンロード
wget -O turn.tar.gz http://turnserver.open-sys.org/downloads/v4.5.0.3/turnserver-4.5.0.3.tar.gz
# 解凍
tar -zxvf turn.tar.gz
# ビルド
cd turnserver-4.5.0.3
./configure
make && sudo make install
3.3 coTurn設定ファイルの編集
# デフォルトのconfigファイルをコピー
sudo cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
# configファイルの編集
sudo vi /usr/local/etc/turnserver.conf
編集内容
(あくまで例です。詳しい説明はこちらを参考下さい。)
- コメントアウトを外すもの
- verbose
- lt-cred-mech
- no-tls
- no-dtls
- コメントアウトを外し、かつ内容も適宜変更するもの
- userdb=/var/db/turndb
- user=user1:pass1
- realm=mycompany.org
3.4 coTurnを起動
# configファイルを読み込んで起動する
sudo turnserver -o -c /usr/local/etc/turnserver.conf -u user1:pass1 -p 3478 -L 10.0.0.76 -X 0.0.0.0/10.0.0.76
オプション (詳しい説明はこちら)
- -o: デーモン起動ON
- -c: configファイルの指定
- -u: Long-term credentials user account (configファイルに指定したものと同じ組み合わせを指定する)
- -p: UDPとTCPのリスナーポート
- -L: relayサーバのリスナーIPアドレス。今回はEC2のprivateIPを指定する。
- -X: TURNサーバとprivate, publicのIPアドレスマッピング。サーバがNAT内であれば指定が必要。今回はEC2の/を指定する。
(補足)起動時オプションの多くはconfigファイル内でも指定ができる
4 coTurnの動作確認(おまけ)
4.1 インスタンスの外から動作確認する時の注意
- セキュリティグループのインバウンドの設定を、動作確認の接続元のIPアドレスをTCP(もしくはUDP)で許可するように変更してください。
4.2 coTurnが提供するテストコマンド
同じインスタンス上で以下のテストコマンドを実行。
coTurnをインストールした他の環境からでも、テストコマンドで動作確認が取れるはず。
turnutils_uclient -t -p 3478 -u 'user1' -w 'pass1' 10.0.0.76
オプション(詳しい説明はこちら)
-t: TURNサーバへの通信にTCPを指定する(デフォルトはUDP)
-p: TURNサーバのポート番号
-u: STUN/TURNのユーザ名
-w: STUN/TURNのパスワード
4.3 Trickle ICE
ブラウザ上でSTUN, TURNが最低限の動作(接続ルートの候補としてIPアドレスが検出される)をしているか見ることができる
- 使い方
- 以下を入力
- STUN or TURN URI: <インスタンスのグローバルIPアドレス>:3478?transport=tcp
- TURN username: 設定したSTUN/TURNのユーザ名
- TURN password: 設定したSTUN/TURNのパスワード
- Add Serverボタンを押す(ついでにデフォルトのGoogleサーバを消してもOK)
- Gather Candidatesボタンを押す
- 指定したIPアドレスでtypeがrelay(TURNサーバ)、server reflexive(STUNサーバ)などが現れればOK
- 以下を入力
5. 参考文献
- coTurnのREADME, Wikiいろいろ
- 壁を越えろ!WebRTCでNAT/Firewallを越えて通信しよう
- WebRTC関連の記事等へのリンクまとめ