- STUN (Session Traversal Utilities for NAT): ペイロードとのIPを比べてNATの存在を確認する.
- TURN NATが存在する場合にP2P通信を端末間でリレー
- ICES (Interactive Connectivity Establishment): TURNサーバやTURNサーバを使いP2Pで接続を行う技術
- Janus で使用する.
Install[edit]
dnf -y install coturn coturn-utils
MariaDB の設定[edit]
coturn 用のDBを作る.[edit]
# 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;
Table を作る[edit]
# mariadb coturn_db -u root -p < /usr/share/coturn/schema.sql
User アカウントを作る[edit]
# 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 |
+------------------+---------------+------------------------------------+
# 既存を削除
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"
# 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
# 通信ポート
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
systemctl start coturn
Fire Wall[edit]
- STUN/TURN(UDP/TCP):3478
- TURN over TLS:5349(必要な場合)
STUN 動作(UDP 3478)[edit]
# turnutils_stunclient -p 3478 janus.jogrid.net
0: (71074): INFO: IPv4. UDP reflexive addr: 202.26.150.72:35841
TURN 動作(UDP/TCP 3478, TLS 5349)[edit]
turnutils_peer -L 0.0.0.0 -p 5000
TURN(UDP 3478)[edit]
- INFO: channel bind: error 403 (Forbidden IP)
TURN/TLS(5349)[edit]
- coturn がTLSの証明書を読めなくて,結構ハマった!
- group を coturn にして rwxr-s--- に!