Citrix Virtual Apps and Desktops

仮想IPと仮想ループバック

重要:

  • Windows 10 Enterpriseマルチセッションでは、リモートデスクトップIP仮想化(仮想IP)がサポートされていないため、Windows 10 Enterpriseマルチセッションでは、リモートデスクトップIP仮想化も仮想ループバックもサポートしていません。
  • リモートデスクトップIP仮想化(仮想IP)は、クラウドでホストされているマシンではサポートされていません。 詳しくは、Microsoftのドキュメントを参照してください。

リモートデスクトップIP仮想化および仮想ループバック機能は、Windows Server 2016、Windows Server 2019、およびWindows Server 2022マシンでサポートされています。これらの機能は、WindowsデスクトップOSマシンでは使用できません。

Microsoft社のリモートデスクトップIP仮想化アドレス機能により、セッションごとに動的に割り当てられる固有のIPアドレスを公開アプリケーションで使用できます。Citrixの仮想ループバック機能を使用すると、ローカルホスト(デフォルトで127.0.0.1)と通信するアプリケーションで、ローカルホストの範囲内(127.*)で固有の仮想ループバックアドレスが使用されるように構成できます。

CRM(Customer Relationship Management)やCTI(Computer Telephony Integration)などの特定のアプリケーションでは、アドレス割り当て、ライセンス付与、識別、またはそのほかの目的でIPアドレスが使用されるため、固有のIPアドレスまたはループバックアドレスが必要です。また、一部のアプリケーションでは静的なポートにバインドされるため、マルチユーザー環境でそのアプリケーションの追加インスタンスを起動しようとすると、そのポートが使用中なので起動に失敗します。これらのアプリケーションがCitrix Virtual Apps環境で正しく動作するためには、クライアントデバイスごとに異なるIPアドレスが使用される必要があります。

リモートデスクトップIP仮想化と仮想ループバックは、互いに独立した機能です。これらの機能のいずれかまたは両方を使用できます。

使用する機能に応じて、管理者は以下の操作を行います:

  • MicrosoftリモートデスクトップIP仮想化を使用するには、Windowsサーバー上でこれを有効にして構成します。(Citrixポリシーの設定は必要ありません。)
  • Citrixの仮想ループバック機能を使用するには、Citrixポリシーで2つの設定項目を構成します。

リモートデスクトップIP仮想化(仮想IP)

Windowsサーバー上でリモートデスクトップIP仮想化機能を有効にすると、セッション内で動作する各アプリケーションで固有のアドレスが使用されるように構成できます。ユーザーは、Citrix Virtual Apps上にあるこれらのアプリケーションを、ほかの公開アプリケーションと同じように使用することができます。以下のいずれかの動作をするプロセスでは、リモートデスクトップIP仮想化を設定します:

  • ハードコードされた(固定された)TCPポート番号を使用する
  • Windowsソケットを使用し、固有のIPアドレスまたは固定されたTCPポート番号を使用する

アプリケーションでリモートデスクトップIP仮想化が必要かどうかを判断するには、次の手順に従います:

  1. MicrosoftのWebサイトから、TCPViewツールを入手します。このツールを使用すると、特定のIPアドレスおよびポートを使用しているすべてのアプリケーションを一覧表示できます。TCPViewについて詳しくは、Microsoftのドキュメントを参照してください。
  2. [Resolve IP Addresses] を無効にします。これにより、一覧にホスト名ではなくアドレスが表示されるようになります。
  3. 対象となるアプリケーションを起動して、使用されているIPアドレスとポート、およびそれらのポートを開いているプロセスの名前をTCPViewで確認します。
  4. サーバーのIPアドレス0.0.0.0または127.0.0.1を使用するプロセスを構成します。
  5. そのアプリケーションの別のインスタンスを起動して、別のポート上で同じIPアドレスが使用されないことを確認します。

Microsoftリモートデスクトップ(RD)のIP仮想化のしくみ

  • 仮想IPアドレスを使用するには、Windowsサーバー上でこの機能を有効にする必要があります。

    たとえば、Windows Server 2016環境でサーバーマネージャーを使用し、[リモートデスクトップサービス]>[RDセッションホストの構成] の順に展開してRD IP仮想化機能を有効にします。次に、IPアドレスをDHCP(Dynamic Host Configuration Protocol:動的ホスト構成プロトコル)サーバーによりセッションごとまたはプログラムごとに動的に割り当てるように設定を行います。リモートデスクトップIP仮想化の構成について詳しくは、Microsoftのドキュメントを参照してください。

  • この機能を有効にすると、セッション起動時にサーバーは、DHCPサーバーから動的に割り当てられたIPアドレスを要求します。

  • RD IP仮想化機能によって、セッションごとまたはプログラムごとに、リモートデスクトップ接続にIPアドレスが割り当てられます。複数のプログラムにIPアドレスを割り当てる場合、これらのプログラム間でセッションごとのIPアドレスが共有されます。

  • アドレスがセッションに割り当てられた後、以下の呼び出しが行われるたびに、セッションはシステムのプライマリIPアドレスではなく仮想アドレスを使用します:bind¸closesocket¸connectWSAConnectWSAAcceptgetpeernamegetsocknamesendtoWSASendToWSASocketWgethostbyaddrgetnameinfogetaddrinfo

リモートデスクトップセッションのホスト環境でMicrosoftのIP仮想化機能を使用すると、アプリケーションとWinsockコールとの間に「フィルター」コンポーネントを挿入することで、アプリケーションと特定のIPアドレスがバインドされます。IPアドレスがバインドされると、アプリケーションはそのアドレスだけで要求を待ち受けるようになります。アプリケーションのTCPリスナーまたはUDPリスナーは自動的に仮想IPアドレス(または仮想ループバックアドレス)にバインドされます。アプリケーションからの接続はその仮想アドレスから開かれます。

Windowsポリシーにより制御されるGetAddrInfo()など、アドレスを返す関数でローカルホストIPアドレスが要求されると、返されたIPアドレスがそのセッションのリモートデスクトップIP仮想化アドレスに変換されます。このような関数でローカルサーバーのIPアドレスを取得しようとするアプリケーションには、セッション固有のリモートデスクトップIP仮想化アドレスだけが渡されます。このようにしてアプリケーションに渡されたIPアドレスは、以降のソケットコール(bindやconnectなど)で使用されます。Windowsポリシーについて詳しくは、RDS IP Virtualization in Windows Serverを参照してください。

アプリケーションでは、アドレス0.0.0.0で、リスナー用のポートのバインドが必要になる場合があります。このようなアプリケーションで静的なポート番号が使用されると、競合が発生するため、複数のインスタンスを起動できなくなります。リモートデスクトップIP仮想化アドレス機能では、0.0.0.0への関数呼び出しが特定の仮想IPアドレスに変換されます。これにより、セッションごとに異なるアドレス上のポートが使用されるため、同じポート番号を使用する複数のアプリケーションを実行できるようになります。このファンクションコールは、リモートデスクトップIP仮想化アドレス機能が有効なICAセッションでのみ変換されます。たとえば、すべてのインターフェイス(0.0.0.0)と特定のポート(9000など)にバインドするアプリケーションの2つのインスタンスが、それぞれ異なるセッションで実行される場合、VIPAddress1:9000とVIPAddress2:9000にバインドされるため、競合が起きません。

仮想ループバック

CitrixポリシーでリモートデスクトップIP仮想化ループバック機能を有効にすると、各セッションで通信に独自のループバックアドレスが使用されるようになります。アプリケーションがWinsock呼び出しでローカルホストのアドレス(デフォルトで127.0.0.1)を使用する場合、仮想ループバック機能により、127.0.0.1が127.X.X.X(X.X.XはセッションIDに1を足したものです)に置き換えられます。たとえば、セッションIDが7の場合は127.0.0.8になります。セッションIDが4オクテットを超える場合(つまり255を超える場合)は、127.0.1.0のように次のオクテットに繰り上げられます。また、最大値は127.255.255.255です。

以下のいずれかの動作をするプロセスでは、仮想ループバックを設定します。

  • Windowsソケットのループバック(localhost)アドレス127.0.0.1を使用する。
  • ハードコードされた(固定された)TCPポート番号を使用する

プロセス間通信でループバックアドレスを使用するアプリケーションでは、仮想ループバックアドレスポリシー設定を使用します。追加の構成は必要ありません。仮想ループバックは仮想IPに依存しないため、Windowsサーバーの構成は不要です。

  • 仮想IPループバックサポートこのポリシー設定を有効にすると、各セッション固有の仮想ループバックアドレスが使用されるようになります。このチェックボックスは、デフォルトでオフになっています。この機能は、[仮想 IP ループバックプログラム一覧]ポリシー設定で指定したアプリケーションにのみ適用されます。
  • 仮想IPループバックプログラム一覧このポリシー設定では、仮想IPループバック機能を使用するアプリケーションを指定します。この設定は、[仮想IPループバックサポート]ポリシー設定が有効になっている場合のみ適用されます。
  • 仮想IPループバックポートの除外。アプリケーションがこの設定で指定されたポート上のループバックアドレスを呼び出す場合、仮想ループバックは呼び出しをセッション固有のループバックアドレスに変更しません。

関連機能

次のレジストリ設定により、仮想ループバックが仮想IPよりも優先されるようになります。この機能は、優先ループバックと呼ばれます。ただし、以下の点に注意してください。

  • 仮想IPアドレスと仮想ループバックの両方の機能を有効にする場合にのみ、優先ループバック機能を使用してください。そうしないと、意図しない結果が生じることがあります。
  • レジストリエディターの使用を誤ると、深刻な問題が発生する可能性があり、オペレーティングシステムの再インストールが必要になる場合もあります。レジストリエディターの誤用による障害に対して、Citrixは一切責任を負いません。レジストリエディターは、お客様の責任と判断の範囲でご使用ください。また、レジストリファイルのバックアップを作成してから、レジストリを編集してください。

アプリケーションのホストサーバー上で、regeditを実行します。

  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\VIP
  • 値の名前:PreferLoopback、種類:REG_DWORD、値のデータ:1
  • 値の名前:PreferLoopbackProcesses、種類:REG_MULTI_SZ、データ:<プロセスの一覧>プロセスの一覧>
仮想IPと仮想ループバック