ADC

SIPサーバーのグループを負荷分散する

セッション開始プロトコル (SIP) は、マルチメディア通信セッションを開始、管理、および終了するように設計されています。インターネットテレフォニー(VoIP)の標準として登場しました。SIP メッセージは TCP または UDP 経由で送信できます。SIP メッセージには、要求メッセージと応答メッセージの 2 種類があります。

SIPベースの通信システムのトラフィックは、専用のデバイスとアプリケーション(エンティティ)を介してルーティングされます。マルチメディア通信セッションでは、これらのエンティティはメッセージを交換します。次の図は、基本的な SIP ベースの通信システムを示しています。

図1:SIPベースの通信システム

SIP

Citrix ADCを使用すると、UDPまたはTCP(TLSを含む)経由でSIPメッセージを負荷分散できます。NetScalerは、SIPリクエストをSIPプロキシサーバーのグループに負荷分散するように構成できます。そのためには、負荷分散方法と永続性のタイプを次の組み合わせのいずれかに設定した負荷分散仮想サーバーを作成します。

  • パーシスタンス設定なしのCall-IDハッシュ負荷分散方式
  • 最小接続またはラウンドロビン負荷分散方式によるコール ID ベースのパーシスタンス
  • 最小接続またはラウンドロビン負荷分散方式によるルールベースのパーシステンス

また、デフォルトでは、Citrix ADCはSIP要求のヘッダーを介してRPORTを追加し、サーバーがリクエストの送信元IPアドレスとポートに応答を返信します。

注:ロードバランシングが機能するには、プライベート IP アドレスまたはプライベートドメインが SIP ヘッダー/ペイロードに追加されないように SIP プロキシを設定する必要があります。SIP プロキシは、SIP 仮想サーバーの IP アドレスに対応するドメイン名を SIP ヘッダーに追加する必要があります。また、SIP プロキシは共通のデータベースと通信して登録情報を共有する必要があります。

サーバー開始トラフィック

SIPサーバーから開始されるアウトバウンドトラフィックの場合は、クライアントが使用するプライベートIPアドレスがパブリックIPアドレスに変換されるように、NetScalerでRNATを構成します。

RNAT 送信元ポートまたは宛先ポートを含む SIP パラメータを設定した場合、アプライアンスは要求パケットの送信元ポートと宛先ポートの値を RNAT 送信元ポートおよび RNAT 宛先ポートと比較します。いずれかの値が一致すると、アプライアンスは VIA ヘッダーを RPORT で更新します。その後、クライアントからの SIP 応答は要求と同じパスを通過します。

サーバーから開始されるSSLトラフィックの場合、NetScalerは組み込みの証明書とキーのペアを使用します。 カスタムの証明書とキーのペアを使用する場合は、カスタム証明書とキーのペアをnsrnatsip-127.0.0.1-5061という名前のNetScaler内部サービスにバインドします。

ポリシーと式のサポート

NetScaler デフォルト式言語には、セッション開始プロトコル(SIP)接続で動作するいくつかの式が含まれています。これらの式は、SIP ベース (sip_udp、sip_tcp、sip_ssl) 仮想サーバーおよびグローバルバインドポイントにのみバインドできます。これらの表現は、コンテンツスイッチング、レート制限、レスポンダー、およびリライトポリシーで使用できます。

TCP または UDP 経由の SIP シグナリングトラフィックのロードバランシングの設定

NetScalerは、TLSで保護されたTCPトラフィックを含め、UDPまたはTCPを介してリクエストを送信するSIPサーバーの負荷分散を行うことができます。ADCは、SIPサーバーの負荷分散用に次のサービスタイプを提供します。

  • SIP_UDP — SIP サーバーが UDP 経由で SIP メッセージを送信する場合に使用されます。
  • SIP_TCP — SIP サーバーが TCP 経由で SIP メッセージを送信する場合に使用されます。
  • SIP_SSL — SSL または TLS を使用して TCP 経由の SIP シグナリングトラフィックを保護するために使用されます。NetScalerは以下のモードをサポートしています。
    • クライアント、ADC、SIP サーバー間のエンドツーエンド TLS 接続。
    • クライアントとADC間のTLS接続、およびADCとSIPサーバー間のTCP接続。
    • クライアントとADC間のTCP接続、およびADCとSIPサーバー間のTLS接続。

次の図は、TCPまたはUDPを介してSIPメッセージを送信するSIPサーバーのグループを負荷分散するように構成されたセットアップのトポロジを示しています。

図2:SIP ロードバランシングトポロジ

SIP LB トポロジ

エンティティタイプ 名前 IPアドレス ポート サービスタイプ/プロトコル
仮想サーバー Vserver-LB-1 10.102.29.65 80 SIP_UDP /SIP_TCP /SIP_SSL
Services Service-SIP-1 192.168.1.6 80 SIP_UDP /SIP_TCP /SIP_SSL
  Service-SIP-2 192.168.1.5 80 SIP_UDP /SIP_TCP /SIP_SSL
モニター デフォルト なし 80 SIP_UDP /SIP_TCP /SIP_SSL

SIP トラフィックの基本的なロードバランシング設定の概要は次のとおりです。

  1. サービスを構成し、負荷分散するSIPトラフィックの種類ごとに仮想サーバーを構成します。

    • SIP_UDP — UDP 経由で SIP トラフィックの負荷分散を行う場合。
    • SIP_TCP — TCP 経由で SIP トラフィックの負荷分散を行う場合。
    • SIP_SSL — TCP 経由で SIP トラフィックのロードバランシングとセキュリティ保護を行う場合。

    注:SIP_SSL を使用する場合は、必ず SSL 証明書とキーのペアを作成してください。詳細については、「証明書キーペアの追加」を参照してください。

  2. サービスを仮想サーバーにバインドします。

  3. デフォルト (tcp-default) 以外のモニターでサービスの状態を監視する場合は、カスタムモニターを作成してサービスにバインドします。NetScalerには、 **SIPサービスを監視するためのSIP-UDPとSIP-TCPの2種類のカスタムモニタータイプが用意されています**。

  4. SIP_SSL 仮想サーバーを使用する場合は、SSL 証明書とキーのペアを仮想サーバーにバインドします。

  5. 展開環境内のSIPサーバーのゲートウェイとしてNetScalerを使用している場合は、RNATを構成します。

  6. SIP サーバから送信される SIP メッセージに RPORT を追加する場合は、SIP パラメータを設定します。

コマンドラインインターフェイスを使用して SIP トラフィックの基本的な負荷分散設定を構成するには

1 つ以上のサービスを作成します。コマンドプロンプトで入力します。

add service <name> <serverName> (SIP_UDP | SIP_TCP | SIP_SSL) <port>
<!--NeedCopy-->

例:

add service Service-SIP-UDP-1 192.0.2.5 SIP_UDP 80
<!--NeedCopy-->

作成したサービスを処理するために必要な数の仮想サーバーを作成します。仮想サーバのタイプは、バインドするサービスのタイプと一致する必要があります。コマンドプロンプトで入力します。

add lb vserver <name> <serverName> (SIP_UDP | SIP_TCP | SIP_SSL) <port>
<!--NeedCopy-->

例:

add lb vserver Vserver-LB-1 SIP_UDP 10.102.29.60 80
<!--NeedCopy-->

各サービスを仮想サーバーにバインドします。コマンドプロンプトで入力します。

bind lb vserver <name> <serverName>
<!--NeedCopy-->

例:

bind lb vserver Vserver-LB-1 Service-SIP-UDP-1
<!--NeedCopy-->

(オプション) SIP-UDP または SIP-TCP タイプのカスタムモニターを作成し、そのモニターをサービスにバインドします。コマンドプロンプトで入力します。

add lb monitor <monitorName> <monitorType> [<interval>]

bind lb monitor <monitorName> <ServiceName>
<!--NeedCopy-->

例:

add lb monitor mon1 sip-UDP -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200

bind monitor mon1 Service-SIP-UDP-1
<!--NeedCopy-->

SIP_SSL 仮想サーバーを作成した場合は、SSL 証明書キーペアを仮想サーバーにバインドします。コマンドプロンプトで、次のように入力します。コマンドプロンプトで、次のように入力します。

bind ssl vserver <vServerName> -certkeyName <certificate-KeyPairName> -CA –skipCAName
<!--NeedCopy-->

例:

bind ssl vserver Vserver-LB-1 -certkeyName CertKey-SSL-1
<!--NeedCopy-->

ネットワークトポロジの必要に応じて RNAT を設定します。コマンドプロンプトで、次のコマンドのいずれかを入力して、ネットワークアドレスを条件として、SNIP を NAT IP アドレスとして使用する RNAT エントリ、条件としてネットワークアドレスを使用し、NAT IP アドレスとして固有の IP アドレスを使用する RNAT エントリ、条件として ACL を使用し、SNIP を NAT IP アドレスとして使用する RNAT エントリ、または ACL を使用する RNAT エントリをそれぞれ作成します。条件として、また固有の IP アドレスを NAT IP アドレスとして指定すると、

add rnat <name> (<network> | (<aclname> [-redirectPort <port>]))

bind rnat <name> <natIP>@ …

show rnat
<!--NeedCopy-->

例:

add rnat RNAT-1 192.168.1.0 255.255.255.0

bind rnat RNAT-1 -natip 10.102.29.50
<!--NeedCopy-->

カスタムの証明書とキーのペアを使用する場合は、カスタム証明書とキーのペアをnsrnatsip-127.0.0.1-5061という名前のNetScaler内部サービスにバインドします。

add ssl certKey <certkeyName> -cert <string> [-key <string>]

bind ssl service <serviceName> -certkeyName <string>
<!--NeedCopy-->

例:

add ssl certKey c1 -cert cert.epm -key key.ky

bind ssl service nsrnatsip-127.0.0.1-5061 -certkeyName c1
<!--NeedCopy-->

SIP サーバーが開始する SIP メッセージに RPORT を追加する場合は、コマンドプロンプトで次のコマンドを入力します。

set lb sipParameters -rnatSrcPort <rnatSrcPort> -rnatDstPort<rnatDstPort> -retryDur <integer> -addRportVip <addRportVip> - sip503RateThreshold <sip503_rate_threshold_value>
<!--NeedCopy-->

UDP 経由の SIP トラフィックのロードバランシングの設定例

add service service-UDP-1 10.102.29.5 SIP_UDP 80

Done

add lb vserver vserver-LB-1 SIP_UDP 10.102.29.60 80

Done

bind lb vserver vserver-LB-1 service-UDP-1

Done

add lb mon mon1 sip-udp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200

Done

bind mon mon1 service-UDP-1

Done

add rnat RNAT-1 192.168.1.0 255.255.255.0

Done

set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000 -addRportVip ENABLED -sip503RateThreshold 1000

Done
<!--NeedCopy-->

TCP 経由の SIP トラフィックのロードバランシングの設定例

add service service-TCP-1 10.102.29.5 SIP_TCP 80

Done

add lb vserver vserver-LB-1 SIP_TCP 10.102.29.60 80

Done

bind lb vserver vserver-LB-1 service-TCP-1

Done

add lb mon mon1 sip-tcp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200

Done

bind mon mon1 service-TCP-1

Done

add rnat RNAT-1 192.168.1.0 255.255.255.0

Done

set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000 -addRportVip ENABLED -sip503RateThreshold 1000

Done
<!--NeedCopy-->

TCP を介した SIP トラフィックのロードバランシングおよびセキュリティ保護の設定例

add service service-SIP-SSL-1 10.102.29.5 SIP_SSL 80

Done

add lb vserver vserver-LB-1 SIP_SSL 10.102.29.60 80

Done

bind lb vserver vserver-LB-1 service-SIP-SSL

Done

add lb mon mon1 sip-tCP -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200

Done

bind mon mon1 service-SIP-SSL

Done

bind ssl vserver Vserver-LB-1 -certkeyName CertKey-SSL-1

Done

add rnat RNAT-1 192.168.1.0 255.255.255.0

Done

set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000 -addRportVip ENABLED -sip503RateThreshold 1000

Done
<!--NeedCopy-->

GUI を使用して SIP トラフィックの基本的なロードバランシング設定を構成するには

  1. [ トラフィック管理] > [負荷分散] > [仮想サーバー] に移動し、タイプ SIP_UDP、SIP_TCP、または SIP_SSL の仮想サーバーを追加します。

  2. [ サービス ] セクションをクリックし、タイプ SIP_UDP、SIP_TCP、または SIP_SSL のサービスを追加します。

  3. (オプション)[ Monitor ] セクションをクリックし、タイプ SIP-UDP または SIP-TCP のモニタを追加します。

  4. モニターをサービスにバインドし、サービスを仮想サーバーにバインドします。

  5. SIP_SSL 仮想サーバーを作成した場合は、SSL 証明書キーペアを仮想サーバーにバインドします。証明書セクションをクリックし、証明書キーペアを仮想サーバーにバインドします。

  6. ネットワークトポロジの必要に応じて RNAT を設定します。RNAT を設定するには:

    1. [ システム] > [ネットワーク] > [ルート] に移動します。
    2. [ルート] ページで、[ RNAT ] タブをクリックします。
    3. 詳細ウィンドウで、[ RNAT の構成] をクリックします。
    4. RNAT の設定ダイアログボックスで、次のいずれかを実行します。
      • RNAT エントリを作成するための条件としてネットワークアドレスを使用する場合は、[ ネットワーク ] をクリックし、次のパラメータを設定します。
        • ネットワーク
        • ネットマスク
      • 拡張 ACL を RNAT エントリを作成するための条件として使用する場合は、[ ACL ] をクリックし、次のパラメータを設定します。
        • ACL 名
        • リダイレクトポート
    5. SNIP アドレスを NAT IP アドレスとして設定するには、ステップ 7 に進みます。
    6. 一意の IP アドレスを NAT IP として設定するには、[使用可能な NAT IP] の一覧で、NAT IP として設定する IP アドレスを選択し、[追加] をクリックします。選択した NAT IP が [構成された NAT IP] リストに表示されます。
    7. [Create] をクリックしてから、[Close] をクリックします。

    カスタムの証明書とキーのペアを使用する場合は、カスタム証明書とキーのペアをnsrnatsip-127.0.0.1-5061という名前のNetScaler内部サービスにバインドします。ペアをバインドするには:

    1. [ トラフィック管理] > [負荷分散] > [サービス ] に移動し、[内部サービス] タブをクリックします。
    2. Select nsrnatsip-127.0.0.1-5061 and click Edit.
    3. Certificates セクションをクリックし、証明書キーペアを内部サービスにバインドします。
  7. SIP サーバが開始する SIP メッセージに RPORT を追加する場合は、SIP パラメータを設定します。[ トラフィック管理] > [ロードバランシング ] に移動し、[SIP 設定の変更] をクリックし、さまざまな SIP パラメータを設定します。

SIP 表現とポリシーの例:クライアント要求での圧縮の有効化

NetScalerは圧縮されたクライアントSIP要求を処理できないため、クライアントSIP要求は失敗します。

クライアントからの SIP NEGITIATE メッセージをインターセプトし、圧縮ヘッダーを探すレスポンダーポリシーを設定できます。メッセージに圧縮ヘッダーが含まれている場合、ポリシーは「400 Bad Request」で応答するため、クライアントはリクエストを圧縮せずに再送信します。

コマンドプロンプトで、次のコマンドを入力してレスポンダーポリシーを作成します。

add responder action sipaction1 respondwith q{"SIP/2.0 400 Bad Requestrnrn"}

Done

add responder policy sippol1

add responder policy sippol1 "SIP.REQ.METHOD.EQ("NEGOTIATE")&&SIP.REQ.HEADER("Compression").EXISTS" sipaction1
<!--NeedCopy-->