#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