Virtual IP と仮想ループバック
重要:
- Windows 10 Enterprise マルチセッションはリモートデスクトップ IP 仮想化 (仮想 IP) をサポートしていません。また、弊社は Windows 10 Enterprise マルチセッションでリモートデスクトップ IP 仮想化または仮想ループバックをサポートしていません。
- Remote Desktop IP Virtualization (Virtual IP) はクラウドホスト型マシンではサポートされていません。 詳細については、Microsoft のドキュメントを参照してください。
Remote Desktop IP Virtualization および仮想ループバック機能は、Windows Server 2016、Windows Server 2019、および Windows Server 2022 マシンでサポートされています。これらの機能は、Windows デスクトップ OS マシンには適用されません。
Microsoft Remote Desktop IP Virtualization アドレス機能は、公開アプリケーションにセッションごとに一意の動的に割り当てられた IP アドレスを提供します。Citrix 仮想ループバック機能を使用すると、localhost (デフォルトでは 127.0.0.1) との通信に依存するアプリケーションを、localhost 範囲 (127.*) 内の一意の仮想ループバックアドレスを使用するように構成できます。
CRM や Computer Telephony Integration (CTI) などの特定のアプリケーションは、アドレス指定、ライセンス、識別、または一意の IP アドレスやループバックアドレスを必要とするその他の目的で IP アドレスを使用します。他のアプリケーションは静的ポートにバインドする可能性があり、その場合、ポートが使用中であるため、マルチユーザー環境でアプリケーションの追加インスタンスを起動しようとすると失敗します。このようなアプリケーションが Citrix Virtual Apps™ 環境で正しく機能するには、デバイスごとに一意の IP アドレスが必要です。
Remote Desktop IP Virtualization と仮想ループバックは、互いに独立した機能です。どちらか一方、または両方を使用できます。
管理者アクションの概要:
- マイクロソフト リモートデスクトップ IP 仮想化を使用するには、Windows サーバーでそれを有効にして構成します。(Citrix® ポリシー設定は不要です。)
- Citrix 仮想ループバックを使用するには、Citrix ポリシーで2つの設定を構成します。
リモートデスクトップIP仮想化 (仮想IP)
Windows サーバーで Remote Desktop IP Virtualization が有効になり構成されると、セッションで実行されている構成済みの各アプリケーションは一意のアドレスを持っているように見えます。ユーザーは、他の公開アプリケーションにアクセスするのと同じ方法で、Citrix Virtual Apps サーバー上のこれらのアプリケーションにアクセスします。プロセスが Remote Desktop IP Virtualization を必要とするのは、次のいずれかのケースです。
- プロセスがハードコードされた TCP ポート番号を使用している場合
- プロセスが Windows ソケットを使用し、一意の IP アドレスまたは指定された TCP ポート番号を必要とする場合
アプリケーションがRemote Desktop IP Virtualizationアドレスを使用する必要があるかどうかを判断するには:
- MicrosoftからTCPViewツールを入手します。このツールは、特定のIPアドレスとポートをバインドするすべてのアプリケーションを一覧表示します。TCPViewの詳細については、Microsoftドキュメントを参照してください。
- ホスト名ではなくアドレスが表示されるように、IPアドレスの解決機能を無効にします。
- アプリケーションを起動し、TCPViewを使用して、アプリケーションが開いているIPアドレスとポート、およびこれらのポートを開いているプロセス名を確認します。
- サーバーのIPアドレス、0.0.0.0、または127.0.0.1を開くプロセスを構成します。
- アプリケーションが異なるポートで同じIPアドレスを開かないようにするには、アプリケーションの別のインスタンスを起動します。
Microsoft リモートデスクトップ (RD) IP仮想化の仕組み
-
Microsoftサーバーで仮想IPアドレス指定を有効にする必要があります。
たとえば、Windows Server 2016環境では、サーバーマネージャーからRemote Desktop Services > RD Session Host Connectionsを展開して、RD IP仮想化機能を有効にし、セッションごとまたはプログラムごとにDynamic Host Configuration Protocol (DHCP) サーバーを使用してIPアドレスを動的に割り当てる設定を構成します。Remote Desktop IP仮想化の構成の詳細については、Microsoftドキュメントを参照してください。
-
この機能を有効にすると、セッションの起動時に、サーバーはDHCPサーバーから動的に割り当てられたIPアドレスを要求します。
-
RD IP仮想化機能は、リモートデスクトップ接続にセッションごとまたはプログラムごとにIPアドレスを割り当てます。複数のプログラムにIPアドレスを割り当てる場合、それらはセッションごとのIPアドレスを共有します。
-
セッションにアドレスが割り当てられると、以下の呼び出しが行われるたびに、システムプライマリIPアドレスではなく仮想アドレスがセッションで使用されます:
bind¸closesocket¸connect,WSAConnect,WSAAccept,getpeername,getsockname,sendto,WSASendTo,WSASocketW,gethostbyaddr,getnameinfo,getaddrinfo。
Remote Desktopセッションホスティング構成内でMicrosoft IP仮想化機能を使用する場合、アプリケーションとWinsock関数呼び出しの間に「フィルター」コンポーネントを挿入することで、アプリケーションは特定のIPアドレスにバインドされます。これにより、アプリケーションは使用すべき正しいIPアドレスのみを認識します。アプリケーションがTCPまたはUDP通信をリッスンしようとすると、自動的に割り当てられた仮想IPアドレス(またはループバックアドレス)にバインドされます。アプリケーションによって開かれた発信接続は、アプリケーションにバインドされたIPアドレスから発信されます。
アドレスを返す関数(Windowsポリシーが制御するGetAddrInfo()など)で、ローカルホストIPアドレスが要求された場合、Remote Desktop IP Virtualizationは返されたIPアドレスを調べ、それをセッションのRemote Desktop IP Virtualizationアドレスに変更します。このような名前関数を介してローカルサーバーのIPアドレスを取得しようとするアプリケーションは、そのセッションに割り当てられた一意のRemote Desktop IP Virtualizationアドレスのみを認識します。このIPアドレスは、bindやconnectなどの後続のソケット呼び出しでよく使用されます。Windowsポリシーの詳細については、Windows ServerでのRDS IP仮想化を参照してください。
多くの場合、アプリケーションはアドレス0.0.0.0でリッスンするためにポートへのバインドを要求します。アプリケーションがこれを行い、静的ポートを使用する場合、アプリケーションの複数のインスタンスを起動することはできません。Remote Desktop IP Virtualizationアドレス機能は、これらの呼び出しタイプで0.0.0.0も検索します。これは、特定のRemote Desktop IP Virtualizationアドレスでリッスンするように呼び出しを変更します。これにより、複数のアプリケーションが同じコンピューター上の同じポートでリッスンできるようになります。これは、すべて異なるアドレスでリッスンしているためです。呼び出しは、ICAセッション内であり、Remote Desktop IP Virtualizationアドレス機能が有効になっている場合にのみ変更されます。たとえば、異なるセッションで実行されているアプリケーションの2つのインスタンスが、両方ともすべてのインターフェイス(0.0.0.0)と特定のポート(9000など)にバインドしようとすると、VIPAddress1:9000とVIPAddress2:9000にバインドされ、競合は発生しません。
仮想ループバック
Citrix Remote Desktop IP Virtualization loopback policy設定を有効にすると、各セッションが通信用に独自のループバックアドレスを持つことができます。アプリケーションがWinsock呼び出しでlocalhostアドレス(デフォルト = 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に依存しないため、Microsoftサーバーを構成する必要はありません。
- 仮想IPループバックサポート。有効にすると、このポリシー設定により、各セッションが独自の仮想ループバックアドレスを持つことができます。この設定はデフォルトで無効になっています。この機能は、仮想IP仮想ループバックプログラムリストポリシー設定で指定されたアプリケーションにのみ適用されます。
- 仮想IP仮想ループバックプログラムリスト。このポリシー設定は、仮想IPループバック機能を使用するアプリケーションを指定します。この設定は、仮想IPループバックサポートポリシー設定が有効になっている場合にのみ適用されます。
- 仮想IPループバックポート除外。アプリケーションがこの設定で指定されたポートでループバックアドレスを呼び出す場合、仮想ループバックは呼び出しをセッション固有のループバックアドレスに変更しません。
関連機能
以下のレジストリ設定を使用して、仮想ループバックが仮想IPよりも優先されるようにすることができます。この機能は優先ループバックと呼ばれます。ただし、注意して進めてください。
- 優先ループバックは、仮想IPと仮想ループバックの両方が有効になっている場合にのみ使用してください。そうしないと、意図しない結果が生じる可能性があります。
- レジストリを誤って編集すると、オペレーティングシステムの再インストールが必要になるような重大な問題が発生する可能性があります。Citrixは、レジストリエディターの誤った使用によって生じる問題が解決できることを保証できません。レジストリエディターの使用は自己責任でお願いします。編集する前に必ずレジストリをバックアップしてください。
アプリケーションが常駐するサーバーでregeditを実行します。
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\VIP
- Name: PreferLoopback, Type: REG_DWORD, Data: 1
- Name: PreferLoopbackProcesses, Type: REG_MULTI_SZ, Data: <list of processes>