TURN(Traversal Using Relays around NAT)は、Network Address Translator(NAT)やファイアウォールを通過し、ピアツーピア通信を助けるプロトコルです。STUN(Session Traversal Utilities for NAT)プロトコルの拡張で、RFC 8656 ↗ で定義されています。
HTTP プロトコルを使うときに Web ブラウザーや cURL を使うのと同様に、アプリケーションで TURN プロトコルを使うには、ツールまたはライブラリが必要です。
TURN の利用者の多くは、ブラウザー内のライブラリや、Pion ↗、webrtc-rs ↗、libwebrtc ↗ など、WebRTC ライブラリの一部として使います。
アプリケーションから TURN を直接使うこともできます。Pion ↗ は Golang の TURN クライアントライブラリを提供しており、webrtc-rs ↗ は Rust で同様のライブラリを提供しています。
-
NAT(Network Address Translation): ルーターが複数のプライベート IP アドレスを 1 つのパブリック IP アドレスに対応付ける方式です。家庭用インターネットルーターがよく使い、同じネットワーク内の複数のコンピューターが 1 つのパブリック IP アドレスを共有できます。
-
TURN サーバー: NAT の背後にいるクライアント間のトラフィックを中継するリレーサーバーです。Cloudflare Realtime TURN サービスは、TURN サーバーの一例です。
-
TURN クライアント: TURN プロトコルを使い、TURN サーバー経由で通信するアプリケーションまたはデバイスです。これが皆さんのアプリケーションです。WebRTC API を使う Web アプリケーションでも、モバイルやデスクトップ上のネイティブアプリケーションでも構いません。
-
Allocation(割り当て): TURN サーバーが allocation を作成すると、そのクライアント専用の IP とポートを予約します。
-
Relayed Transport Address(中継用トランスポートアドレス): TURN サーバー上で予約された IP アドレスとポートです。インターネット上の他者は、このアドレスを使って TURN クライアントへデータを送れます。
- TURN クライアントは、TURN サーバーへ Allocate リクエストを送信します。
- TURN サーバーは allocation を作成し、中継用トランスポートアドレスをクライアントに返します。
- クライアントは、この中継アドレスをピアに渡せます。
- ピアが中継アドレスへデータを送ると、TURN サーバーはそれをクライアントへ転送します。
- クライアントがピアへデータを送りたいときは、TURN サーバー経由で送り、サーバーがピアへ転送します。
TURN の動きは VPN(Virtual Private Network)に似ています。ただし、TURN サーバーと VPN は目的も動作も異なります。
VPN は、デバイスからのすべてのインターネットトラフィックを暗号化し、VPN サーバー経由でルーティングして、プライバシー、セキュリティ、匿名性を高める汎用ツールです。ネットワーク層で動作し、すべてのインターネット利用に影響します。地理的な制限を回避したり、公衆 Wi-Fi 上の接続を保護したりする用途でもよく使われます。
TURN サーバーは、特定のアプリケーション、とくにリアルタイム通信向けの専用ツールです。アプリケーション層で動作し、利用するアプリケーションのトラフィックだけに影響します。ピア間の直接接続ができないときに、NAT やファイアウォールを通過するための中継として働きます。VPN はインターネット全体の速度に影響し、匿名性を提供します。TURN サーバーは、それを使う特定のアプリケーションの性能にだけ影響します。
TURN は、NAT やファイアウォールの制限でピアツーピア通信が直接できない場面で、よく役立ちます。主な利点は次のとおりです。
-
NAT トラバーサル: どちらも NAT の背後にいるピア同士の接続を確立できます。通常は難しいか、不可能なケースです。
-
ファイアウォールの回避: ファイアウォールポリシーが厳しい環境でも、通常はブロックされる通信を可能にします。
-
安定した接続: 直接接続や NAT 支援の接続が失敗したときの、信頼できるフォールバックです。
-
プライバシー: TURN サーバー経由でトラフィックを中継すると、通信当事者の実際の IP アドレスを互いに隠せます。
-
VoIP とビデオ会議: Voice over IP(VoIP)やビデオ会議では、ネットワーク構成にかかわらず安定した接続を確保するために TURN が重要です。
-
オンラインゲーム: 種類の異なる NAT の背後にいるプレイヤー同士のピアツーピア接続を、TURN が助けることがあります。
-
IoT デバイス間の通信: Internet of Things(IoT)デバイスは、NAT やファイアウォールの背後にいるときに、TURN で通信できます。