次世代サービスアプリケーション層ゲートウェイ
このトピックでは、次世代サービス向けJunos OSでサポートされているアプリケーション層ゲートウェイ(ALG)について説明します。ALGサポートには、サポートされているALGのピンホールと親子関係の管理が含まれます。
RTSP
リアルタイム ストリーミング プロトコル (RTSP) は、オーディオやビデオなどのリアルタイム プロパティを使用してデータの配信を制御します。RTSP によって制御されるストリームは RTP を使用できますが、必須ではありません。メディアは、同じ RTSP 制御ストリームで送信できます。これはHTTPに似たテキストベースのプロトコルですが、クライアントとサーバーがセッション情報を維持します。セッションは SETUP メッセージを使用して確立され、TEARDOWN メッセージを使用して終了します。トランスポート(メディアプロトコル、アドレス、およびポート番号)は、セットアップとセットアップ応答でネゴシエートされます。
ステートフル ファイアウォールと NAT サービスをサポートするには、TCPポート 554 の RTSP ALG を設定する必要があります。
ALG は制御接続を監視し、メディア(RTP/RTSP)ストリームのフローを動的に開き、NAT アドレスとポートの書き換えを実行します。
一口
Session Initiation Protocol(SIP)は、メディアセッションを確立、維持、および終了できるアプリケーション層のプロトコルです。これは、広く使用されているVoice over IP(VoIP)シグナリングプロトコルです。SIP ALGはSIPトラフィックを監視し、シグナリングパスとメディアパスにピンホールを動的に作成および管理します。ALG は、適切な権限を持つパケットのみを許可します。SIP ALG は、次の機能も実行します。
親子セッションの関係を管理します。
セキュリティ ポリシーを適用します。
VoIPトラフィックのピンホールを管理します。
SIP ALG は、次の機能をサポートしています。
ステートフルファイアウォール
静的なソースNAT
動的アドレスのみの送信元 NAT
ネットワーク アドレス ポート変換 (NAPT)
SIP セッションは、MS-MIC および MS-MPC インターフェイス カードでの NAT 処理で 12 時間(720 分)に制限されます。MS-DPC の SIP セッションに時間制限はありません。
SIP の設定
Session Initiation Protocol(SIP)は、テレフォニー、FAX、ビデオ会議、インスタントメッセージング、ファイル交換などのインターネットサービスに関与するエンドポイント間の通信用の汎用プロトコルです。
Junos OSは、RFC 3261、 SIP:セッション開始プロトコルに記載されている標準に従ってALGサービスを提供します。Junos OS での SIP フローは、RFC 3665、 セッション開始プロトコル(SIP)の基本的なコール フローの例に記載されているとおりです。
Junos OS SIP ALGを実装する前に、 Junos OS SIP ALGの制限事項で説明されている特定の制限について理解しておく必要があります
NAT を SIP ALG と組み合わせて使用すると、アドレス変換により SIP ヘッダー フィールドが変更されます。これらの変換の説明については、「 SIP ALG と ネットワークアドレス変換 の相互作用」を参照してください。
適応型サービスインターフェイスにSIPを実装するには、[edit applications application application-name]階層レベルでapplication-protocolステートメントを値sipで設定します。さらに、SIPの実装方法を変更するために設定できる他の2つのステートメントがあります。
ルーターが、NAT ファイアウォールの背後にあるエンドポイントデバイスへの着信 SIP コールを受け入れるようにすることができます。ファイアウォールの背後にあるデバイスが、ファイアウォールの外側にあるプロキシに登録すると、ASまたはマルチサービスPICが登録状態を維持します。
learn-sip-registerステートメントが有効な場合、ルータはこの情報を使用して着信コールを受け入れることができます。このステートメントが設定されていない場合、着信コールは受け入れられません。ファイアウォールの外側にあるデバイスを呼び出すことができるのは、ファイアウォールの内側にあるデバイスだけです。SIP登録を設定するには、
[edit applications application application-name]階層レベルでlearn-sip-registerステートメントを含めます。[edit applications application application-name] learn-sip-register;
手記:learn-sip-registerステートメントは、次世代サービスMX-SPC3には適用されません。また、
show services stateful-firewall sip-registerコマンドを発行して、SIP レジスタを手動で検査することもできます。詳しくは、「 Junos OS System Basics and Services Command Reference」を参照してください。show services stateful-firewall sip-registerコマンドは、次世代サービスではサポートされていません。保留にする SIP コールの期間にタイムアウト期間を指定できます。コールが保留にされると、アクティビティがなく、設定された
inactivity-timeout期間が経過した後にフローがタイムアウトし、コール状態が破棄される可能性があります。これを回避するために、コールが保留になると、フロー タイマーはsip-call-hold-timeoutサイクルにリセットされ、コールの状態とフローをinactivity-timeout期間よりも長く保持します。手記:sip-call-hold-timeoutステートメントは、次世代サービスMX-SPC3には適用されません。タイムアウト時間を設定するには、
[edit applications application application-name]階層レベルでsip-call-hold-timeoutステートメントを含めます。[edit applications application application-name] sip-call-hold-timeout seconds;
デフォルト値は 7200 秒で、範囲は 0 〜 36,000 秒(10 時間)です。
SIP ALGとネットワークアドレス変換の相互作用
ネットワークアドレス変換(NAT)プロトコルを使用すると、プライベート・サブネット内の複数のホストが単一のパブリックIPアドレスを共有してインターネットにアクセスできます。送信トラフィックの場合、NATはプライベート・サブネット内のホストのプライベートIPアドレスをパブリックIPアドレスに置き換えます。受信トラフィックの場合、パブリックIPアドレスはプライベート・アドレスに変換され直し、メッセージはプライベート・サブネット内の適切なホストにルーティングされます。
SIP メッセージには SIP ヘッダーと SIP 本文に IP アドレスが含まれているため、セッション開始プロトコル(SIP)サービスでの NAT の使用はより複雑になります。SIPサービスでNATを使用する場合、SIPヘッダーには発信者と受信者に関する情報が含まれており、デバイスはこの情報を変換して外部ネットワークから隠します。SIP本文には、メディア送信用のIPアドレスとポート番号を含むセッション記述プロトコル(SDP)情報が含まれています。デバイスは、メディアを送受信するためのリソースを割り当てるための SDP 情報を変換します。
SIP メッセージ内の IP アドレスとポート番号がどのように置き換えられるかは、メッセージの方向によって異なります。送信メッセージの場合、クライアントのプライベート IP アドレスとポート番号は、ジュニパーネットワークス ファイアウォールのパブリック IP アドレスとポート番号に置き換えられます。受信メッセージの場合、ファイアウォールのパブリックアドレスはクライアントのプライベートアドレスに置き換えられます。
INVITEメッセージがファイアウォールを越えて送信されると、SIPアプリケーション層ゲートウェイ(ALG)はメッセージヘッダーからコールテーブルに情報を収集し、それを使用して後続のメッセージを正しいエンドポイントに転送します。ACK や 200 OK などの新しいメッセージが到着すると、ALG は "From:、To:、および Call-ID:" フィールドをコール テーブルと比較して、メッセージのコール コンテキストを識別します。既存のコールと一致する新しい INVITE メッセージが到着すると、ALG はそれを REINVITE として処理します。
SDP情報を含むメッセージが到着すると、ALGはポートを割り当て、それらとSDP内のポート間のNATマッピングを作成します。SDPはリアルタイムトランスポートプロトコル(RTP)およびリアルタイム制御プロトコル(RTCP)チャネル用のシーケンシャルポートを必要とするため、ALGは連続する偶奇数ポートを提供します。ポートのペアが見つからない場合は、SIPメッセージを破棄します。
このトピックには、以下のセクションが含まれています。
発信コール
内部ネットワークから外部ネットワークへのSIPリクエストメッセージでSIPコールが開始されると、NATはSDPのIPアドレスとポート番号を置き換え、IPアドレスとポート番号をジュニパーネットワークスのファイアウォールにバインドします。Via、Contact、Route、および Record-Route SIP ヘッダー フィールドも、存在する場合は、ファイアウォール IP アドレスにバインドされます。ALG は、再送信および SIP 応答メッセージに使用するために、これらのマッピングを保存します。
次に、SIP ALGはファイアウォールのピンホールを開き、SDPおよびVia、Contact、およびRecord-Routeヘッダーフィールドの情報に基づいてネゴシエートされた動的に割り当てられたポート上のデバイスを介してメディアを許可します。また、このピンホールにより、着信パケットが Contact、Via、Record-Route の IP アドレスとポートに到達できるようになります。リターントラフィックを処理する際、ALGは元のContact、Via、Route、Record-Route SIPフィールドをパケットに挿入し直します。
着信コール
着信呼び出しは、パブリック ネットワークから、パブリック静的 NAT アドレスまたはデバイス上のインターフェイス IP アドレスに対して開始されます。静的 NAT は、内部ホストを指す静的に設定された IP アドレスです。インターフェイスIPアドレスは、内部ホストからSIPレジストラに送信されたREGISTERメッセージを監視するALGによって動的に記録されます。デバイスが受信SIPパケットを受信すると、セッションを設定し、パケットのペイロードをSIP ALGに転送します。
ALG は SIP リクエスト メッセージ(最初は INVITE)を調べ、SDP の情報に基づいて、発信メディアのゲートを開きます。200 OK 応答メッセージが到着すると、SIP ALG は IP アドレスとポートで NAT を実行し、送信方向にピンホールを開きます。(開いたゲートの有効期間は短く、200 OK 応答メッセージがすぐに受信されないとタイムアウトします)。
200 OK応答が到着すると、SIPプロキシはSDP情報を調べ、各メディアセッションのIPアドレスとポート番号を読み取ります。デバイス上のSIP ALGは、アドレスとポート番号に対してNATを実行し、送信トラフィックのピンホールを開き、受信方向のゲートのタイムアウトを更新します。
ACK が 200 OK に到着すると、SIP ALG も通過します。メッセージにSDP情報が含まれている場合、SIP ALGはIPアドレスとポート番号が以前のINVITEから変更されていないことを確認します。変更されている場合、ALGは古いピンホールを削除し、メディアを通過させるために新しいピンホールを作成します。ALG は Via、Contact、および Record-Route SIP フィールドも監視し、これらのフィールドが変更されたと判断すると、新しいピンホールを開きます。
転送された通話
転送コールとは、たとえば、ネットワーク外のユーザ A がネットワーク内のユーザ B に電話をかけ、ユーザ B がネットワーク外のユーザ C にコールを転送する場合です。SIP ALG は、ユーザー A からの INVITE を通常の着信コールとして処理します。しかし、ALG がネットワーク外の B から C に転送されたコールを調べ、B と C が同じインターフェイスを使用して到達していることに気付いた場合、メディアはユーザー A とユーザー C の間で直接流れるため、ファイアウォールにピンホールは開きません。
通話の終了
BYE メッセージはコールを終了します。デバイスが BYE メッセージを受信すると、他のメッセージの場合と同様にヘッダー フィールドが変換されます。しかし、BYE メッセージは 200 OK で受信側が確認応答する必要があるため、ALG は 200 OK の送信時間を確保するためにコールの破棄を 5 秒間遅らせます。
Call Re-INVITEメッセージ
再招待メッセージは、新しいメディアセッションをコールに追加し、既存のメディアセッションを削除します。新しいメディア セッションがコールに追加されると、ファイアウォールに新しいピンホールが開き、新しいアドレス バインドが作成されます。このプロセスは、元のコール セットアップと同じです。1 つ以上のメディア セッションがコールから削除されると、ピンホールが閉じられ、BYE メッセージと同様にバインディングが解放されます。
コール セッション タイマー
SIP ALG は、Re-INVITE または UPDATE メッセージが受信されない場合、Session-Expires 値を使用してセッションをタイムアウトします。ALG は、INVITE に対する 200 OK 応答から Session-Expires 値 (存在する場合) を取得し、この値をシグナリング タイムアウトに使用します。セッションがタイムアウトする前にALGが別のINVITEを受信すると、すべてのタイムアウト値がこの新しいINVITEまたはデフォルト値にリセットされ、このプロセスが繰り返されます。
予防措置として、SIP ALG はハード タイムアウト値を使用して、コールが存在できる最大時間を設定します。これにより、次のいずれかのイベントが発生した場合にデバイスが確実に保護されます。
通話中にエンドシステムがクラッシュし、BYEメッセージが受信されない。
悪意のあるユーザーは、SIP ALG を攻撃しようとして BYE を送信することはありません。
SIPプロキシの不備な実装は、Record-Routeの処理に失敗し、BYEメッセージを送信しません。
ネットワーク障害が発生すると、BYE メッセージを受信できません。
通話のキャンセル
どちらの当事者も、CANCEL メッセージを送信することで通話を取り消すことができます。CANCEL メッセージを受信すると、SIP ALG はファイアウォールを介したピンホール (開いている場合) を閉じ、アドレス バインディングを解放します。リソースを解放する前に、ALG は制御チャネルのエージングアウトを約 5 秒間遅らせて、最後の 200 OK が通過する時間を確保します。5 秒のタイムアウトが経過すると、487 応答と 200 以外の応答のどちらが到着したかに関係なく、呼び出しは終了します。
フォーク
フォークにより、SIP プロキシは 1 つの INVITE メッセージを複数の宛先に同時に送信できます。1 つのコールに対して複数の 200 OK 応答メッセージが到着すると、SIP ALG は解析しますが、受信した最初の 200 OK メッセージでコール情報を更新します。
SIPメッセージ
SIPメッセージ形式は、SIPヘッダーセクションとSIP本文で構成されています。要求メッセージでは、ヘッダー セクションの最初の行は要求行であり、メソッドの種類、要求 URI、およびプロトコル バージョンが含まれます。応答メッセージでは、最初の行は状況コードを含む状況行です。SIPヘッダーには、シグナリングに使用されるIPアドレスとポート番号が含まれています。ヘッダー・セクションとブランク行で区切られた SIP 本文は、セッション記述情報用に予約されています (これはオプションです)。Junos OS は現在、SDP のみをサポートしています。SIP 本文には、メディアの転送に使用される IP アドレスとポート番号が含まれています。
SIPヘッダー
次のサンプルSIPリクエストメッセージでは、NATはヘッダーフィールドのIPアドレスを置き換えて、外部ネットワークから非表示にします。
INVITE bob@10.150.20.5SIP/2.0 Via: SIP/2.0/UDP10.150.20.3:5434 From: alice@10.150.20.3To: bob@10.150.20.5Call-ID: a12abcde@10.150.20.3Contact: alice@10.150.20.3:5434 Route: <sip:netscreen@10.150.20.3:5060> Record-Route: <sip:netscreen@10.150.20.3:5060>
IP アドレス変換がどのように実行されるかは、メッセージのタイプと方向によって異なります。メッセージは次のいずれかになります。
受信要求
アウトバウンド応答
アウトバウンド要求
受信応答
表 1 は、これらの各ケースで NAT がどのように実行されるかを示しています。いくつかのヘッダー フィールドについて、ALG はメッセージがネットワークの内部から送信されたか外部から送信されたかを判断するだけではありません。また、どのクライアントが呼び出しを開始したか、およびメッセージが要求か応答かを判断する必要もあります。
受信要求 (パブリックからプライベートまで) |
宛先: |
ドメインをローカルアドレスに置き換えます |
差出人: |
何一つ |
|
コールID: |
何一つ |
|
経由: |
何一つ |
|
Request-URI: |
ALGアドレスをローカルアドレスに置き換えます |
|
接触: |
何一つ |
|
Record-Route: |
何一つ |
|
ルート: |
何一つ |
|
アウトバウンド応答 (プライベートからパブリックへ) |
宛先: |
ALGアドレスをローカルアドレスに置き換えます |
差出人: |
何一つ |
|
コールID: |
何一つ |
|
経由: |
何一つ |
|
Request-URI: |
該当なし |
|
接触: |
ローカル アドレスを ALG アドレスに置き換えます |
|
Record-Route: |
ローカル アドレスを ALG アドレスに置き換えます |
|
ルート: |
何一つ |
|
送信要求 (プライベートからパブリックへ) |
宛先: |
何一つ |
差出人: |
ローカル アドレスを ALG アドレスに置き換えます |
|
コールID: |
何一つ |
|
経由: |
ローカル アドレスを ALG アドレスに置き換えます |
|
Request-URI: |
何一つ |
|
接触: |
ローカル アドレスを ALG アドレスに置き換えます |
|
Record-Route: |
ローカル アドレスを ALG アドレスに置き換えます |
|
ルート: |
ALGアドレスをローカルアドレスに置き換えます |
|
アウトバウンド応答 (パブリックからプライベートまで) |
宛先: |
何一つ |
差出人: |
ALGアドレスをローカルアドレスに置き換えます |
|
コールID: |
何一つ |
|
経由: |
ALGアドレスをローカルアドレスに置き換えます |
|
Request-URI: |
該当なし |
|
接触: |
何一つ |
|
Record-Route: |
ALGアドレスをローカルアドレスに置き換えます |
|
ルート: |
ALGアドレスをローカルアドレスに置き換えます |
SIP本文
SIP本文のSDP情報には、ALGがメディアストリームのチャネルを作成するために使用するIPアドレスが含まれています。SDPセクションの変換では、リソース、つまりメディアを送受信するためのポート番号も割り当てられます。
次のサンプル SDP セクションからの抜粋は、リソース割り当てのために変換されるフィールドを示しています。
o=user 2344234 55234434 IN IP410.150.20.3c=IN IP410.150.20.3m=audio43249RTP/AVP 0
SIP メッセージには、複数のメディア ストリームを含めることができます。この概念は、電子メール メッセージに複数のファイルを添付するのと似ています。例えば、SIP クライアントから SIP サーバーに送信される INVITE メッセージには、以下のフィールドがあります。
c=IN IP410.123.33.4m=audio33445RTP/AVP 0 c=IN IP410.123.33.4m=audio33447RTP/AVP 0 c=IN IP410.123.33.4m=audio33449RTP/AVP 0
Junos OS は、各方向で最大 6 つの SDP チャネルをネゴシエートし、1 コールあたり合計 12 チャネルをサポートします。
Junos OS SIP ALGの制限事項
SIP ALG の設定には、次の制限が適用されます。
RFC 3261に記載されている方法のみがサポートされています。
SIP バージョン 2 のみがサポートされています。
TCPはMS-MPCのシグナリングメッセージのトランスポートメカニズムとしてはサポートされていませんが、次世代サービスではサポートされています。
STUN を使用する場合は、SIP ALG を設定しないでください。 クライアントが STUN/TURN を使用して、発信者と応答側またはプロキシ間のファイアウォールまたは NAT デバイスを検出する場合、クライアントは NAT デバイスの動作を推測し、それに応じてコールを発信しようとします。
MS-MPCでは、エンドポイントに依存しないマッピングNAT プールオプションをSIP ALGと組み合わせて使用しないでください。 エラーが発生します。これは次世代サービスには適用されません。
IPv6シグナリングデータは、MS-MPCではサポートされていませんが、次世代サービスではサポートされています。
認証はサポートされていません。
暗号化されたメッセージはサポートされていません。
SIP フラグメント化は MS-MPC ではサポートされていませんが、次世代サービスではサポートされています。
SIP メッセージを含む UDP パケットの最大サイズは 9 KB と仮定します。これより大きい SIP メッセージはサポートされていません。
SIP メッセージ内のメディア チャネルの最大数は 6 と見なされます。
完全修飾ドメイン名 (FQDN) は、重要なフィールドではサポートされていません。
QoS はサポートされていません。SIP は DSCP 書き換えをサポートしています。
高可用性は、ウォーム スタンバイを除き、サポートされていません。
never のタイムアウト設定は、SIP または NAT ではサポートされていません。
マルチキャスト(フォークプロキシ)はサポートされていません。