STUNサーバーとTURNサーバーの役割
WebRTCは、ビデオ通話、画面共有、ブラウザ間のファイル転送を支える技術です。2台のデバイスが直接通信するには、まず互いにどのアドレスで到達できるかを知る必要があります。しかし、ほとんどのデバイスは家庭用ルーターや企業のファイアウォールの内側にあり、NATによって変換されるプライベートアドレスを使用しています。STUNサーバーとTURNサーバーはこの問題を解決します。
- STUNは、デバイスがインターネットからどう見えるか、つまりグローバルIPアドレスとポートを教えてくれます。この情報があれば、2つのピアは多くの場合、直接接続できます。
- TURNは、シンメトリックNAT、厳しいファイアウォール、TCPしか許可されないネットワークなど、直接接続が不可能な場合に中継役を務めます。
テストの実行方法
- stun:、turn:、turns: のいずれかで始まるサーバーURLを入力します(例:stun:server.example.com:3478 や turn:server.example.com:3478?transport=tcp)。
- TURNサーバーの場合は、ユーザー名とクレデンシャルを入力します。有効期限付きのクレデンシャルを使用している場合は、期限切れになっていないことを確認してください。
- 必要に応じてサーバーを追加し、テストを実行します。ブラウザがICE候補を収集し、各候補をタイプ、アドレス、プロトコル、到着までにかかった時間とともに一覧表示します。
ご自身のサーバーをお持ちでない場合は、当サイトのサーバーをテストするオプションを使って、正常な結果がどのようなものかを確認できます。
候補タイプの見方
結果の各行はICE候補です。その意味はタイプによって異なります。
- host:デバイス自身のローカルアドレスです。最近のブラウザはプライバシー保護のため、ランダムな .local 名で隠します。
- srflx:STUNサーバーが報告したグローバルアドレスです。これが表示されればSTUNは正常に動作しています。
- relay:TURNサーバーが割り当てた中継アドレスです。これが表示されればTURNと認証は正常に動作しています。
- prflx:接続確認の過程で発見されたアドレスです。片側だけのテストではめったに表示されません。
時間の列は、開始から各候補が届くまでに何ミリ秒かかったかを示します。サーバーの距離や負荷の目安になります。数百ミリ秒かかる場合、通話の接続確立が目に見えて遅れることがあります。
よくある問題
- relay候補が出ない:ユーザー名やパスワードの誤り、サーバー側のstatic-auth-secretの不一致、ファイアウォールによるTURNポートのブロックなどが考えられます。
- UDPでしか動作しない:制限の厳しいネットワークの利用者向けに、?transport=tcp やポート443でのturns:(TLS)を追加してください。
- turns:は失敗するがturn:は動作する:TLS証明書が無効、期限切れ、またはホスト名と一致していない可能性があります。
- 予期しないsrflxアドレス:CGNATやVPNを使用している場合、グローバルアドレスはプロバイダやVPN事業者のものになります。
テストはすべてブラウザ内で実行され、入力したクレデンシャルは、指定したサーバーへの接続にブラウザが使用するだけです。グローバルIPとWebRTCリークの状況を確認するには自分のIPアドレス確認をご覧ください。WebRTCデータチャネル上の実際のパケットロスを測定するにはパケットロステストを、ご自身のアプリで通話品質を調整する前の基本的な遅延の確認にはPingテストをお試しください。