SIP プロトコルのアプリケーション層ゲートウェイ
SIP メッセージには SIP ヘッダーと SIP 本文に IP アドレスが含まれているため、大規模な NAT(LSN)とセッション開始プロトコル(SIP)の使用は複雑です。LSN を SIP とともに使用すると、SIP ヘッダーには発信者と受信者の情報が含まれ、デバイスはこの情報を変換して外部ネットワークから隠します。SIP 本体には、セッション記述プロトコル(SDP)情報が含まれています。この情報には、メディアを送信するための IP アドレスとポート番号が含まれます。
SIP ALG は、次の RFC に準拠しています。
- RFC 3261
- RFC 3581
- RFC 4566
- RFC 4475
注
SIP ALGは、Citrix ADCスタンドアロンアプライアンス、Citrix ADC高可用性セットアップ、およびCitrix ADCクラスタセットアップでサポートされています。
SIP ALG のしくみ
IP アドレス変換の実行方法は、メッセージのタイプと方向によって異なります。メッセージには、次のいずれかを指定できます。
- インバウンドリクエスト
- アウトバウンド応答
- アウトバウンドリクエスト
- インバウンド応答
送信メッセージの場合、SIPクライアントのプライベートIPアドレスとポート番号は、LSN構成時に指定されたCitrix ADCが所有するパブリックIPアドレスとポート番号( LSNプールのIPアドレスとポート番号と呼ばれます)に置き換えられます。着信メッセージの場合、LSN プール IP アドレスとポート番号は、クライアントのプライベートアドレスに置き換えられます。メッセージにパブリックIPアドレスが含まれている場合、Citrix ADC SIP ALGはそのアドレスを保持します。また、次の項目にピンホールが作成されます。
- プライベートクライアントに代わって LSN プール IP アドレスおよびポート。パブリックネットワークからこの IP アドレスおよびポートに到着するメッセージは SIP メッセージとして扱われます。
- パブリッククライアントに代わってパブリック IP アドレスおよびポート。プライベートネットワークからこの IP アドレスおよびポートに到着するメッセージは SIP メッセージとして扱われます。
SIP メッセージがネットワーク経由で送信されると、SIP アプリケーション層ゲートウェイ(ALG)はメッセージから情報を収集し、次のヘッダー内の IP アドレスを LSN プールの IP アドレスに変換します。
- Via
- Contact
- Route
- Record-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 | ||
Via | ||
Request-URI | ||
Contact | ||
Record-Route | ||
Route | ||
アウトバウンド応答(プライベートからパブリックへ) | 変更後: | なし |
From | ||
Call-ID | ||
Via | ||
Request-URI | ||
Contact | ||
Record-Route | ||
Route | ||
アウトバウンドリクエスト(プライベートからパブリックへ) | 変更後: | なし |
From | ||
Call-ID | ||
Via | ||
Request-URI | ||
Contact | ||
Record-Route | ||
Route | ||
インバウンド応答(パブリックからプライベートへ) | 変更後: | なし |
From | ||
Call-ID | ||
Via | ||
Request-URI | ||
Contact | ||
Record-Route | ||
Route |
SIP ALG の制限事項
SIP ALG には、次の制限があります。
- SDP ペイロードだけがサポートされます。
- 以下はサポートされていません:
- マルチキャスト IP アドレス
- 暗号化 SDP
- SIP TLS
- 完全修飾ドメイン名変換
- SIP レイヤ認証
- TD/パーティショニング
- マルチパートボディ
- IPv6 ネットワーク経由の SIP メッセージ
- 折り畳み
テスト済みの SIP クライアントとプロキシサーバ
次の SIP クライアントとプロキシサーバは、SIP ALG を使用してテストされています。
- SIPクライアント: X-Lite、Zoiper、Ekiga。Avaya
- プロキシサーバー: openSIPS
LSN SIP シナリオ:プライベートネットワーク外の SIP プロキシ(パブリックネットワーク)
SIP クライアント登録
通常の SIP コールの場合、SIP クライアントは、REGISTER 要求を作成し、SIP レジストラに送信することによって、SIP レジストラに登録する必要があります。Citrix ADCアプライアンスのSIP ALGは要求を代行受信し、要求内のIPアドレスとポート番号を、LSN構成で提供されているLSNプールIPアドレスとポート番号に置き換え、要求をSIPレジストラに転送します。次に、SIP ALGがCitrix ADC構成にピンホールを開き、SIPクライアントとSIPレジストラ間のさらなるSIP通信を可能にします。SIP レジストラは、LSN プールの IP アドレスとポート番号を使用して、SIP クライアントに 200 OK 応答を送信します。Citrix ADCアプライアンスは、この応答をピンホールにキャプチャし、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はCitrix ADC構成で個別のピンホールを開き、SDPヘッダーとSIPヘッダーで指定された動的に割り当てられたポート上のCitrix ADCアプライアンスを介して、SIPとメディアを許可します。200 OKメッセージがCitrix ADCに到着すると、作成されたピンホールの1つによってそのメッセージがキャプチャされます。SIP ALG は SIP ヘッダーを置き換え、元の Contact、Via、Route、および Record-Route SIP フィールドを復元し、メッセージを内部 SIP クライアントに転送します。
着信コール
SIP 着信コールは、外部クライアントから内部ネットワークへの SIP INVITE メッセージによって開始されます。SIP レジストラは、内部 SIP クライアントが SIP レジストラに登録したときに作成されたピンホールを使用して、内部ネットワーク内の SIP クライアントに INVITE メッセージを転送します。
SIP ALG は、Via、Contact、Route、および Record-Route SIP ヘッダーフィールドの LSN IP アドレスおよびポート番号に対して NAT を実行し、内部 SIP クライアントの IP アドレスおよびポート番号に変換し、要求を SIP クライアントに転送します。内部SIPクライアントから送信された200 OK応答メッセージがCitrix ADCアプライアンスに届くと、SIP ALGは、Via、Contact、Route、およびレコードルートSIPヘッダーフィールドのIPアドレスとポート番号に対してNATを実行し、これらをLSNプールのIPアドレスとポート番号に変換し、応答を転送します。メッセージを SIP レジストラに送信し、送信方向にピンホールを開いて、さらの SIP 通信を行います。
コール終了
BYE メッセージは、コールを終了します。デバイスは BYE メッセージを受信すると、他のメッセージの場合と同様に、メッセージ内のヘッダーフィールドを変換します。しかし、BYE メッセージは 200 OK で受信側によって確認応答されなければならないため、ALG は、200 OK の送信時間を許容するために 15 秒間コールティアダダウンを遅延させます。
同じネットワーク内のクライアント間の呼び出し
同じネットワーク内のクライアント A とクライアント B の両方がコールを開始すると、SIP メッセージは外部ネットワークの SIP プロキシを介してルーティングされます。SIP ALG は、クライアント A からの INVITE を通常の発信コールとして処理します。クライアントBは同じネットワーク内にあるため、SIPプロキシはINIVITEをCitrix ADCアプライアンスに送り返します。SIP ALGは、INIVITEメッセージを調べ、クライアントAのNAT IPアドレスが含まれていると判断し、クライアントBにメッセージを送信する前に、そのアドレスをクライアントAのプライベートIPアドレスに置き換えます。クライアント間で通話が確立されると、Citrix ADCはメディア転送に関与しません。クライアント間で。
その他の LSN SIP シナリオ:プライベートネットワーク内の SIP プロキシ
プライベートネットワーク内でSIPプロキシサーバーをホストする場合は、以下のいずれかを実行することをお勧めします:
- プライベート 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マッピングを使用してCitrix ADCアプライアンスに送信され、アプライアンスはさらにSIP操作のためのピンホールを作成します。
- シナリオ 3:SIP 着信コールフロー。SIP 着信コールは、外部ネットワークから内部ネットワークへの SIP INVITE メッセージによって開始されます。Citrix ADCアプライアンスは、外部ネットワークにあるSIPクライアントC2から、Citrix ADCアプライアンスで設定された静的LSNマップを介して、INVITEメッセージを受信します。
アプライアンスはピンホールを作成し、INVITE メッセージを SIP プロキシに転送します。次に、SIP プロキシは INVITE メッセージを内部ネットワークの SIP クライアント C1 に転送します。その後、SIPクライアントC1は180および200のOKメッセージをSIPプロキシに送信します。SIPプロキシは、Citrix ADCアプライアンスを介してSIPクライアントC2にメッセージを転送します。 内部 SIP クライアント C1 から送信された 200 OK 応答メッセージが Citrix ADC に到着すると、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 プーリング = 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-->