#author("2025-08-11T12:12:15+00:00","default:iseki","iseki")
#author("2025-09-08T05:23:45+00:00","default:iseki","iseki")

* Coturn
- STUN (Session Traversal Utilities for NAT): クライアントが自分の外部 IP/ポートを知るための軽量プロトコル
- TURN (Traversal Using Relays around NAT): NAT を超えてリレー通信を行うためのプロトコル(STUN の拡張)
- ICES (Interactive Connectivity Establishment): TURNサーバやTURNサーバを使いP2Pで接続を行う技術
- STUN/TURN サーバ
-- STUN (Session Traversal Utilities for NAT): クライアントが自分の外部 IP/ポートを知るための軽量プロトコル
-- TURN (Traversal Using Relays around NAT): NAT を超えてリレー通信を行うためのプロトコル(STUN の拡張)
-- ICES (Interactive Connectivity Establishment): TURNサーバやTURNサーバを使いP2Pで接続を行う技術

- [[Janus]] で使用する. 
*** Install

 dnf -y install coturn  coturn-utils
*** MariaDB の設定
**** coturn 用のDBを作る.

<pre>
# mariadb -u root -p
MariaDB [(none)]> create database coturn_db default character set utf8mb4;
MariaDB [(none)]> grant all on coturn_db.* to coturn_user identified by 'coturn_pass';
MariaDB [(none)]> flush privileges;
</pre>

**** Table を作る
<pre>
# mariadb coturn_db -u root -p < /usr/share/coturn/schema.sql
</pre>

**** User アカウントを作る
<pre>
# turnadmin -k -u webrtc_user -r janus.jogrid.net -p webrtc_pass
0xc8cb60c783b7c68533b9e15f1983f341

# mariadb -u root -p
MariaDB [coturn_db]> INSERT INTO turnusers_lt ( realm, name,hmackey) VALUES ('janus.jogrid.net', 'webrtc_use', '0xc8cb60c783b7c68533b9e15f1983f341');
Query OK, 1 row affected (0.000 sec)
MariaDB [coturn_db]> select *  from turnusers_lt;
+------------------+---------------+------------------------------------+
| realm            | name          | hmackey                            |
+------------------+---------------+------------------------------------+
| janus.jogrid.net | webrtc_user   | 0xc8cb60c783b7c68533b9e15f1983f341 |
+------------------+---------------+------------------------------------+
</pre>

<pre>
# 既存を削除
turnadmin -d -u webrtc_user -r janus.jogrid.net -M "host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS"

# 正しく追加(hmackey を自動生成して DB 登録)
turnadmin -a -u webrtc_user -p webrtc_pass -r janus.jogrid.net -M "host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS"

# 登録確認
turnadmin -l -u webrtc_user -r janus.jogrid.net -M "host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS"
</pre>
**** DB 確認
 # turnadmin -l -u webrtc_user -r janus.jogrid.net -p webrtc_pass -M "host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS"



*** 設定ファイル 
- /etc/coturn/turnserver.conf

<pre>
# 通信ポート
listening-port=3478
tls-listening-port=5349
fingerprint

# 認証方式(Long-term credentials)
lt-cred-mech
realm=janus.jogrid.net

# MariaDB 接続設定
#   host     : データベースサーバ(同一サーバなら localhost)
#   dbname   : GRANT 文で指定したデータベース名(coturn_db)
#   user     : GRANT 文で指定したユーザー(coturn_USER)
#   password : GRANT 文で指定したパスワード(coturn_PASS)
userdb="mysql"
mysql-userdb="host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS"
#userdb="mysql:host=localhost dbname=coturn_db user=coturn_USER password=coturn_PASS" # 間違い!

# NAT 環境の場合は外部IPと内部IPを指定
# external-ip=203.0.113.10/192.168.0.10

# TLS 証明書(Let's Encrypt の場合)
cert=/etc/letsencrypt/live/janus.jogrid.net/fullchain.pem
pkey=/etc/letsencrypt/live/janus.jogrid.net/privkey.pem

# セキュリティ
no-sslv3
cipher-list="ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS"
#cipher-list="TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"

#
cli-password=qwerty

#
min-port=50000
max-port=50999

</pre>

*** 起動
 systemctl start coturn
*** Fire Wall
- STUN/TURN(UDP/TCP):3478
- TURN over TLS:5349(必要な場合)


** 動作確認
- dnf install coturn-utils
*** STUN 動作(UDP 3478)
<pre>
# turnutils_stunclient -p 3478 janus.jogrid.net
0: (71074): INFO: IPv4. UDP reflexive addr: 202.26.150.72:35841

</pre>
*** TURN 動作(UDP/TCP 3478, TLS 5349)
**** peer
 turnutils_peer -L 0.0.0.0 -p 5000


**** TURN(UDP 3478)
- peer を使ったテスト
 turnutils_uclient -u webrtc_user -w webrtc_pass -p 3478 -e janus.jogrid.net -r 5000 -v janus.jogrid.net

- 自己完結型テスト
 turnutils_uclient -v -X -u webrtc_user -w webrtc_pass -p 3478 -e 202.26.150.72 -r 3480 janus.jogrid.net

- INFO: channel bind: error 403 (Forbidden IP)
-- -e で指定した IP が許可されていない

**** TURN/TLS(5349)
- peer を使ったテスト
 turnutils_uclient -u webrtc_user -w webrtc_pass -p 5349 -S -e 127.0.0.1 -r janus.jogrid.net -X 202.26.150.72 -P 5000 -v janus.jogrid.net
-- INFO: errno=32, err=0, error:00000000:lib(0)::reason(0) (5) このエラーは問題ない.

- 自己完結型テスト
 turnutils_uclient -u webrtc_user -w webrtc_pass -p 5349 -S -y -v janus.jogrid.net

- coturn がTLSの証明書を読めなくて,結構ハマった!
-- group を coturn にして rwxr-s--- に!

#br
#br

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS