SIPプロトコル用のアプリケーションレイヤーゲートウェイ
セッション開始プロトコル(SIP)で大規模NAT(LSN)を使用するのは複雑です。SIP メッセージには SIP ヘッダーと SIP 本文に IP アドレスが含まれるためです。SIP で LSN を使用する場合、SIP ヘッダーには発信者と受信者に関する情報が含まれ、デバイスはこの情報を変換して外部ネットワークから隠します。SIP本体には、メディア送信用のIPアドレスとポート番号を含むセッション記述プロトコル(SDP)情報が含まれています。
SIP ALG は次の RFC に準拠しています。
- RFC 3261
- RFC 3581
- RFC 4566
- RFC 4475
注
SIP ALGは、NetScalerスタンドアロンアロンアプライアンス、NetScaler高可用性セットアップ、およびNetScalerクラスターセットアップでサポートされています。
SIP ALG の仕組み
IP アドレス変換の実行方法は、メッセージのタイプと方向によって異なります。メッセージには次のいずれかを使用できます。
- インバウンドリクエスト
- アウトバウンドレスポンス
- アウトバウンドリクエスト
- インバウンドレスポンス
送信メッセージの場合、SIPクライアントのプライベートIPアドレスとポート番号は、LSN構成時に指定されたNetScaler所有のパブリックIPアドレスとポート番号( LSNプールIPアドレスとポート番号と呼ばれる)に置き換えられます。受信メッセージでは、LSN プール IP アドレスとポート番号がクライアントのプライベートアドレスに置き換えられます。メッセージにパブリックIPアドレスが含まれている場合、NetScaler SIP ALGはそれらを保持します。また、次の場所にピンホールが作成されます。
- LSN プールの IP アドレスとポートはプライベートクライアントに代わって行われます。これにより、パブリックネットワークからこの IP アドレスとポートに到着したメッセージは SIP メッセージとして扱われます。
- パブリッククライアントに代わってパブリック IP アドレスとポート。これにより、プライベートネットワークからこの IP アドレスとポートに到着したメッセージは SIP メッセージとして扱われます。
SIP メッセージがネットワーク経由で送信されると、SIP アプリケーション層ゲートウェイ (ALG) はメッセージから情報を収集し、次のヘッダーの IP アドレスを LSN プール IP アドレスに変換します。
- 経由
- 連絡
- Route
- レコードルート
次の SIP 要求メッセージの例では、LSN がヘッダーフィールドの IP アドレスを置き換えて外部ネットワークから隠しています。
INVITE adam@10.102.185.156 SIP/2.0 Via: SIP/2.0/UDP 192.170.1.161:62914 From: eve@10.120.210.3 To: adam@10.102.185.156 Call-ID: a12abcde@10.120.210.3 Contact: adam@10.102.185.156 Route: <sip:netscreen@10.150.20.3:5060> Record-Route: <sip:netscreen@10.150.20.3:5060>
<!--NeedCopy-->
SDP 情報を含むメッセージが到着すると、SIP ALG はメッセージから情報を収集し、次のフィールドの IP アドレスを LSN プール IP アドレスとポート番号に変換します。
-
c= (接続情報)
このフィールドは、セッションレベルまたはメディアレベルで表示できます。次の形式で表示されます。
c=
<network-type><address-type><connection-address>
宛先 IP アドレスがユニキャスト IP アドレスの場合、SIP ALG は m= フィールドで指定された IP アドレスとポート番号を使用してピンホールを作成します。
-
m= (メディアアナウンス)
このフィールドはメディアレベルで表示され、メディアの説明が含まれます。次の形式で表示されます。
m=
<media><port><transport><fmt list>
-
a=
(information about the media field)
このフィールドは、セッションレベルまたはメディアレベルで、次の形式で表示できます。
a=
<attribute>
a=
<attribute>:<value>
次の SDP セクションのサンプルを抜粋すると、リソース割り当てのために変換されるフィールドが示されています。
o=user 2344234 55234434 IN IP4 10.150.20.3
C=IN IP4 10.150.20.3
m=audio 43249 RTP/AVP 0
次の表は、SIP ペイロードがどのように変換されるかを示しています。
インバウンドリクエスト (パブリックからプライベートへ) | 変更後: | なし |
From | ||
Call-ID | ||
経由 | ||
Request-URI | ||
連絡先 | ||
レコードルート | ||
ルート | ||
アウトバウンドレスポンス(プライベートからパブリックへ) | 変更後: | なし |
From | ||
Call-ID | ||
経由 | ||
Request-URI | ||
連絡先 | ||
レコードルート | ||
ルート | ||
アウトバウンドリクエスト (プライベートからパブリックへ) | 変更後: | なし |
From | ||
Call-ID | ||
経由 | ||
Request-URI | ||
連絡先 | ||
レコードルート | ||
ルート | ||
インバウンドレスポンス (公開から非公開へ) | 変更後: | なし |
From | ||
Call-ID | ||
経由 | ||
Request-URI | ||
連絡先 | ||
レコードルート | ||
ルート |
SIP ALG の制限事項
SIP ALG には次の制限があります。
- SDP ペイロードのみがサポートされます。
- 以下はサポートされていません:
- マルチキャスト IP アドレス
- 暗号化された SDP
- SIP TLS
- FQDN トランスレーション
- SIP レイヤー認証
- TD/partitioning
- マルチパートボディ
- IPv6 ネットワーク経由の SIP メッセージ
- ラインフォールディング
テスト済みの SIP クライアントとプロキシサーバー
次の SIP クライアントとプロキシサーバーは SIP ALG でテストされています。
- SIPクライアント: エックスライト、ゾイパー、エキガ。Avaya
- プロキシサーバー:OpenSIPS
LSN SIP シナリオ:プライベートネットワーク (パブリックネットワーク) 外の SIP プロキシ
SIP クライアント登録
一般的な SIP コールでは、SIP クライアントは REGISTER 要求を作成して SIP レジストラに送信することによって SIP レジストラに登録する必要があります。NetScalerアプライアンスのSIP ALGは要求をインターセプトし、要求内のIPアドレスとポート番号をLSN構成で提供されたLSNプールのIPアドレスとポート番号に置き換え、要求をSIPレジストラに転送します。次に、SIP ALGはNetScaler構成のピンホールを開き、SIPクライアントとSIPレジストラ間のさらなるSIP通信を可能にします。SIP レジストラは、LSN プール IP アドレスとポート番号を使用して 200 OK 応答を SIP クライアントに送信します。NetScalerアプライアンスはこの応答をピンホールでキャプチャし、SIP ALGがSIPヘッダーを置き換え、元の連絡先、経路、ルート、およびレコードルートのSIPフィールドをメッセージに戻します。次に、SIP ALG はメッセージを SIP クライアントに転送します。次の図は、SIP ALG が SIP コール登録フローで LSN を使用する方法を示しています。
発信コール
SIP コールは、内部ネットワークから外部ネットワークに送信される SIP INVITE メッセージで開始されます。SIP ALG は、Via、Contact、Route、Record-Route の SIP ヘッダーフィールドの IP アドレスとポート番号で NAT を実行し、それらを LSN プールの IP アドレスとポート番号に置き換えます。LSN は、後続の SIP メッセージ用に SIP コールでこれらのマッピングを保存します。次に、SIP ALGはNetScaler構成に個別のピンホールを開き、SDPヘッダーとSIPヘッダーで指定されている動的に割り当てられたポート上のNetScalerアプライアンスを介してSIPとメディアを経由できるようにします。200 OK のメッセージがNetScalerに到着すると、作成されたピンホールの1つによってキャプチャされます。SIP ALG は SIP ヘッダーを置き換え、元の Contact、Via、Route、Record-Route の SIP フィールドを復元してから、メッセージを内部 SIP クライアントに転送します。
着信コール
SIP 着信コールは、外部クライアントから内部ネットワークへの SIP INVITE メッセージで開始されます。SIP レジストラは、内部 SIP クライアントが SIP レジストラに登録されたときに作成されたピンホールを使用して、INVITE メッセージを内部ネットワークの SIP クライアントに転送します。
SIP ALG は、Via、Contact、Route、Record-Route の SIP ヘッダーフィールドの LSN IP アドレスとポート番号で NAT を実行し、それらを内部 SIP クライアントの IP アドレスとポート番号に変換して、要求を SIP クライアントに転送します。内部SIPクライアントから送信された200 OK応答メッセージがNetScalerアプライアンスに届くと、SIP ALGはVia、Contact、Route、およびRecord-RouteのSIPヘッダーフィールドのIPアドレスとポート番号に対してNATを実行し、それらをLSNプールのIPアドレスとポート番号に変換して、応答メッセージをSIPレジストラに転送し、さらにSIP送信方向にピンホールを開きます。Pコミュニケーション。
通話終了
BYE メッセージはコールを終了します。デバイスは BYE メッセージを受信すると、他のメッセージと同様にメッセージ内のヘッダーフィールドを変換します。ただし、BYE メッセージは 200 OK で受信側が確認する必要があるため、ALG は 200 OK の送信時間を考慮して、コールティアダウンを 15 秒間遅延させます。
同じネットワーク内のクライアント間のコール
同じネットワーク内のクライアント A とクライアント B の両方がコールを開始すると、SIP メッセージは外部ネットワークの SIP プロキシを介してルーティングされます。SIP ALG は、クライアント A からの INVITE を通常の発信コールとして処理します。クライアントBは同じネットワークにあるため、SIPプロキシはINIVITEをNetScalerアプライアンスに送り返します。SIP ALGはINIVITEメッセージを調べ、そのメッセージにクライアントAのNAT IPアドレスが含まれていることを確認し、クライアントBにメッセージを送信する前に、そのアドレスをクライアントAのプライベートIPアドレスに置き換えます。クライアント間で呼び出しが確立されると、NetScalerはクライアント間のメディア転送に関与しません。
その他の LSN SIP シナリオ:プライベートネットワーク内の SIP プロキシ
プライベートネットワーク内でSIPプロキシサーバーをホストする場合、Citrixでは次のいずれかを行うことをお勧めします。
- プライベート SIP プロキシのスタティック LSN マッピングを設定します。詳細については、 スタティック LSN マップの設定を参照してください。NAT ポートが SIP ALG プロファイルで設定されているポートと同じであることを確認します。
- 非武装地帯 (DMZ) 内に SIP プロキシサーバを設定します。
図1:SIP コール登録
図2:SIP 着信コールフロー
図1と図2は、次のシナリオを示しています。
- シナリオ 1:プライベートネットワークの SIP クライアントは、同じネットワーク内の SIP プロキシサーバに登録されます。SIP クライアントと SIP プロキシサーバは同じネットワークにあるため、ALG 操作は実行されません。
- シナリオ 2:パブリックネットワークの SIP クライアントは、プライベートネットワークの SIP プロキシサーバに登録されます。パブリックSIPクライアントからのREGISTERメッセージは、アプライアンス上で構成された静的LSNマッピングを使用してNetScalerアプライアンスに送信され、アプライアンスはさらにSIP操作を行うためのピンホールを作成します。
- シナリオ 3:SIP 着信コールフローSIP 着信コールは、外部ネットワークから内部ネットワークへの SIP INVITE メッセージで開始されます。NetScalerアプライアンスは、NetScalerアプライアンスで構成された静的LSNマップを介して、外部ネットワークにあるSIPクライアントC2からINVITEメッセージを受信します。
アプライアンスはピンホールを作成し、INVITE メッセージを SIP プロキシに転送します。次に、SIP プロキシは INVITE メッセージを内部ネットワークの SIP クライアント C1 に転送します。次に、SIPクライアントC1は180件と200件のOKメッセージをSIPプロキシに送信し、SIPプロキシはそのメッセージをNetScalerアプライアンスを介してSIPクライアントC2に転送します。 内部SIPクライアントC1から送信された200 OK応答メッセージがNetScalerに到着すると、SIP ALGはVia、Contact、Route、Record-RouteのSIPヘッダーフィールドとSDPフィールドのIPアドレスとポート番号にNATを実行し、それらをLSNプールのIPアドレスとポート番号に置き換えます。次に、SIP ALG は応答メッセージを SIP クライアント C2 に転送し、送信方向にピンホールを開いてさらにの SIP 通信を行います。
監査ログのサポート
LSN 監査ログ構成で ALG を有効にすると、LSN ログの一部としてALG 情報をログに記録できます。LSN ロギングの詳細については、「LSN のロギングとモニタリング」を参照してください。LSN ログの ALG エントリのログメッセージは、次の情報で構成されます。
- タイムスタンプ
- SIP メッセージのタイプ (SIP 要求など)
- SIP クライアントの送信元 IP アドレスとポート
- SIP プロキシの宛先 IP アドレスとポート
- NAT IP アドレスとポート
- SIP メソッド
- シーケンス番号
- SIP クライアントが登録されているかどうか
- 発信者のユーザー名とドメイン
- 受信者のユーザー名とドメイン
監査ログのサンプル:
リクエスト:
07/19/2013:09:49:19 GMT Informational 0-PPE-0 : default ALG ALG_SIP_INFO_PACKET_EVENT 169 0 : Infomsg: "SIP request" - Group: g2 - Call_ID: NTY0YjYwMTJmYjNhNDU5ZjlhMmQxOTM5ZTE3Zjc3NjM. - Transport: TCP - Source_IP: 192.169.1.165 - Source_port: 57952 - Destination_IP: 10.102.185.156 - Destination_port: 5060 - Natted_IP: 10.102.185.191 - Natted_port: 10313 - Method: REGISTER - Sequence_Number: 3060 - Register: YES - Content_Type: - Caller_user_name: 156_pvt_1 - Callee_user_name: 156_pvt_1 - Caller_domain_name: - Callee_domain_name: -
<!--NeedCopy-->
応答:
07/19/2013:09:49:19 GMT Informational 0-PPE-0 : default ALG ALG_SIP_INFO_PACKET_EVENT 170 0 : Infomsg: "SIP response" - Group: g2 - Call_ID: NTY0YjYwMTJmYjNhNDU5ZjlhMmQxOTM5ZTE3Zjc3NjM. - Transport: TCP - Response_code 200 - Source_IP: 10.102.185.156 - Source_port: 5060 - Destination_IP: 192.169.1.165 - Destination_port: 57952 - Natted_IP: 10.102.185.191 - Natted_port: 10313 - Sequence_Number: 3060 - Content_Type: - Caller_user_name: 156_pvt_1 - Callee_user_name: 156_pvt_1 - Caller_domain_name: - Callee_domain_name: -
<!--NeedCopy-->
SIP ALG の設定
LSN 設定の一部として SIP ALG を設定する必要があります。LSN の設定手順については、「LSN の設定手順」を参照してください。LSN の設定時には、次のことを確認してください。
- LSN アプリケーションプロファイルを追加する際に、次のパラメータを設定します。
- IP Pooling = PAIRED
- アドレスとポートのマッピング = エンドポイントに依存しない
- フィルタリング = エンドポイントに依存しない
重要:SIP ALG が機能するためには、フルコーン NAT の設定が必須です。
例:
add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
<!--NeedCopy-->
- SIP ALG プロファイルを作成し、送信元ポート範囲または宛先ポート範囲のいずれかを定義していることを確認します。
例:
add lsn sipalgprofile sipalgprofile_tcp -sipsrcportrange 1-65535 -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP
<!--NeedCopy-->
- LSN グループの作成時に、SIP ALG = ENABLED に設定します。
例:
add lsn group g1 -clientname c1 -sipalg ENABLED
<!--NeedCopy-->
- SIP ALG プロファイルを LSN グループにバインドします。
SIP ALG 設定の例:
次の設定例は、単一の加入者ネットワーク、単一の LSN NAT IP アドレス、SIP ALG 固有の設定を使用して単純な LSN 設定を作成し、SIP ALG を設定する方法を示しています。
add lsn pool p1
Done
bind lsn pool p1 10.102.185.190
Done
add lsn client c1
Done
bind lsn client c1 -network 192.170.1.0 -netmask 255.255.255.0
Done
add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
Done
add lsn appsprofile app_udp UDP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
Done
bind lsn appsprofile app_tcp 1-65535
Done
bind lsn appsprofile app_udp 1-65535
Done
add lsn sipalgprofile sipalgprofile_tcp -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP
Done
add lsn sipalgprofile sipalgprofile_udp -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED -sipTransportProtocol UDP
Done
add lsn group g1 -clientname c1 -sipalg ENABLED
Done
bind lsn group g1 -poolname p1
Done
bind lsn group g1 -appsprofilename app_tcp
Done
bind lsn group g1 -appsprofilename app_udp
Done
bind lsn group g1 -sipalgprofilename sipalgprofile_tcp
Done
bind lsn group g1 -sipalgprofilename sipalgprofile_udp
Done
<!--NeedCopy-->