こんにちは。CCアーキテクトのカスタマーサクセス部です。
今回のブログはSTUNについて説明します。少し技術よりな記事となります。VoIPについて勉強したい方にはお役に立てればと思います。
STUNって何ですか?
STUN は Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NAT’s) の略称です。一般的に、これはいくつかの異なるネットワーク実装とシナリオで使用され、そのうちの1つがVoIP実装です。
SIPベースのVoIP通話で使用されるプロトコルは、ルーターやファイアウォールなどのNATデバイス(家庭および企業ネットワークでよく見られるシナリオ)の背後で動作する2つのSIPエンティティ間で通話するため、ユーザーは通常、通話中の片方向音声や、同じネットワーク上に存在しないVoIPプロバイダまたはIP PBXに登録しようとした場合の電話登録障害などの問題に直面することがあります。
STUNは、このようなVoIP実装の問題を解決するのに役立つプロトコルです。v10以降、3CX電話システムはポート5060でSTUNサーバーのように動作します。
STUNプロトコルの目的
STUN プロトコルの主な目的は、NAT デバイスの背後で動作するデバイスが、そのパブリック IP と、接続先のゲートウェイで実行されている NAT の種類を検出できるようにすることです。また、ゲートウェイの背後に接続されたデバイスが、ゲートウェイ自身によって行われたポート変換(NAT)、つまり他のデバイスがネットワークの外側から接続するために使用できるポートを発見することもできます。
ゲートウェイとルーターは、常にポート変換を行うわけではないことに注意してください。例えば、フルコーンNATの構成では、ポートの変換は行われません。
STUN は NAT バインディングのリフレッシュに使用することもできます。このようなNAT設定を介してトラフィックを渡す場合、内部アドレスとポートは、特定の外部アドレスとポートにマッピングされます。
STUNプロトコル
STUN はサーバー・クライアント・プロトコルです。STUNサーバーは通常、TCPとUDPの両方で動作し、ポート3478でリッスンします。
クライアントは通常、特定のIPとポート(3478)でSTUNサーバーに接続しますが、サーバーはクライアントに別のIPアドレスとポート番号でテストを実行するよう指示することができ、そのようなポートとIPは任意であるため、クライアントがテストを実行することもできます。
しかし、そのようなアドレス変換が特定の時間(デバイスの設定による)後に使用されない場合、そのようなアドレスマッピングは破棄されます。
したがって、内部デバイスが同じ内部IPとポートを使用して外部エンティティ(以前に接続したのと同じエンティティである可能性があります)に再度接続しようとすると、ルーターは異なるアドレスマッピング、つまり、以前に割り当てられたものとは異なるIPとポートを割り当てます。
STUNのリクエストとレスポンスのシナリオ
以下の図では、典型的なSTUNのリクエストとレスポンスがどのように動作するかを示しています:
・フェーズ1:コンピュータAは、ゲートウェイ192.168.1.1を介して、ソースポート5060を使用して64.25.58.65でリスンしているネットワーク外のSTUNサーバにSTUN要求を送信します。
・フェーズ2:ゲートウェイ(192.168.1.1)はリクエストをSTUNサーバー(64.25.58.65)に転送し、ポート5060をポート15060に変更します。
・フェーズ3:STUNサーバー(64.25.58.65)は、リクエストがIP 212.128.56.125とポート15060から受け取ったことを指定するパブリックIP 212.128.56.125のゲートウェイを介してコンピューターAに応答を送り返します。
コンピュータAが外部のエンティティとのSIPベースのVoIPコールなどのセッションを確立すると、IP 212.128.56.125とポート15060で応答を送り返すように外部のエンティティに通知することができます。上記のように、STUNプロトコルは、NATで構成されたネットワークゲートウェイの後ろで動作する2つのデバイスがUDP接続を確立するのを支援する上で、非常に重要な役割を担っています。
なぜなら、Symmetric NATは内部ホストが外部ホストに接続しようとするたびに新しいアドレスとポートのマッピングを作成するからで、STUNはこのようなシナリオのための良いソリューションではありません。
今回はこの辺で終わりしたいと思います。次回は、VoIPデバイスからのSTUNリクエストのキャプチャのサンプルを見て、VoIP環境における接続確立の問題を解決するためにSTUNがどのように役立つかを説明します。