Citrix Virtual Apps and Desktops

虚拟 IP 和虚拟环回

重要:

  • Windows 10 Enterprise 多会话不支持远程桌面 IP 虚拟化(虚拟 IP),我们不支持在 Windows 10 Enterprise 多会话中使用远程桌面 IP 虚拟化或虚拟环回。
  • 云托管计算机不支持远程桌面 IP 虚拟化(虚拟 IP)。 有关详细信息,请参阅 Microsoft 文档。

Windows Server 2016、Windows Server 2019 和 Windows Server 2022 计算机支持远程桌面 IP 虚拟化和虚拟环回功能。这些功能不适用于 Windows 桌面操作系统计算机。

Microsoft 远程桌面 IP 虚拟化地址功能为每个会话的已发布的应用程序提供动态分配的唯一 IP 地址。通过 Citrix 虚拟环回功能,您可以将依赖于与 localhost(默认为 127.0.0.1)通信的应用程序配置为使用 localhost 范围 (127.*) 内的唯一虚拟环回地址。

一些应用程序(例如 CRM 和计算机电话集成 (CTI))将 IP 地址用于寻址、许可、身份验证或其他需要唯一 IP 地址或环回地址的目的。其他应用程序可能会绑定到某个静态端口,因此,在多用户环境中尝试启动应用程序的其他实例将失败,因为该端口正在使用中。要使这些应用程序能够在 Citrix Virtual Apps 环境中正常运行,需要为每个设备设置唯一的 IP 地址。

远程桌面 IP 虚拟化和虚拟环回是相互独立的功能。可以使用其中一项功能,也可以同时使用两项功能。

管理员操作摘要:

  • 要使用 Microsoft 远程桌面 IP 虚拟化功能,请在 Windows Server 中启用并配置该功能。(不需要 Citrix 策略设置。)
  • 要使用 Citrix 虚拟环回,请在 Citrix 策略中配置两项设置。

远程桌面 IP 虚拟化(虚拟 IP)

在 Windows Server 上启用并配置远程桌面 IP 虚拟化功能后,会话中运行的每个已配置的应用程序将显示为具有唯一的地址。用户可以在 Citrix Virtual Apps 服务器上访问这些应用程序,访问方式与访问任何其他已发布的应用程序的方式相同。在以下任一情况下,进程需要远程桌面 IP 虚拟化:

  • 进程使用硬编码的 TCP 端口号
  • 进程使用 Windows 套接字并需要唯一 IP 地址或指定的 TCP 端口号

要确定应用程序是否需要使用远程桌面 IP 虚拟化地址,请执行以下操作:

  1. 获得 Microsoft 提供的 TCPView 工具。此工具可以列出所有绑定特定 IP 地址和端口的应用程序。有关 TCPView 的详细信息,请参阅 Microsoft 文档
  2. 禁用解析 IP 地址功能,这样您看到的将是地址而非主机名。
  3. 启动应用程序,然后使用 TCPView 查看该应用程序打开的 IP 地址和端口以及哪些进程名称正在打开这些端口。
  4. 配置任何打开服务器的 IP 地址(0.0.0.0 或 127.0.0.1)的进程。
  5. 为确保应用程序不会在其他端口上打开相同的 IP 地址,请启动该应用程序的另一个实例。

Microsoft 远程桌面 (RD) IP 虚拟化的工作方式

  • 必须在 Microsoft 服务器上启用虚拟 IP 地址。

    例如,在 Windows Server 2016 环境中,从服务器管理器展开远程桌面服务 > RD 会话主机连接以启用 RD IP 虚拟化功能,并配置设置以使用动态主机配置协议 (DHCP) 服务器基于每个会话或每个程序动态分配 IP 地址。有关配置远程桌面 IP 虚拟化的详细信息,请参阅 Microsoft 文档

  • 启用此功能后,服务器将在会话启动时从 DHCP 服务器请求动态分配的 IP 地址。

  • RD IP 虚拟化功能在每会话或每程序基础上将 IP 地址分配给远程桌面连接。如果为多个程序分配 IP 地址,则它们将共享每会话 IP 地址。

  • 将地址分配给会话后,该会话会在进行以下调用时使用分配的虚拟地址,而不是系统的主 IP 地址:bind¸closesocket¸connectWSAConnectWSAAcceptgetpeernamegetsocknamesendtoWSASendToWSASocketWgethostbyaddrgetnameinfogetaddrinfo

在“远程桌面”会话托管配置中使用 Microsoft IP 虚拟化功能时,在应用程序和 Winsock 函数调用之间插入“过滤器”组件,可将该应用程序绑定到特定的 IP 地址。然后,应用程序只能看到要使用的正确 IP 地址。应用程序试图侦听 TCP 或 UDP 通信的任何尝试都会自动绑定到其分配的虚拟 IP 地址(或环回地址)。应用程序打开的任何源连接都来自绑定到该应用程序的 IP 地址。

在返回地址的函数(例如 GetAddrInfo(),Windows 策略控件)中,如果请求本地主机 IP 地址,则远程桌面 IP 虚拟化功能将查看返回的 IP 地址并将其更改为会话的远程桌面 IP 虚拟化地址。尝试通过此类名称函数获得本地服务器的 IP 地址的应用程序仅会看到分配给该会话的唯一远程桌面 IP 虚拟化地址。此 IP 地址通常用于后续套接字调用,如 bind 或 connect。有关 Windows 策略的详细信息,请参阅 Windows Server 中的 RDS IP 虚拟化

通常,应用程序会请求绑定到一个端口以侦听地址 0.0.0.0。如果应用程序发出此请求并使用静态端口,您将无法启动该应用程序的多个实例。远程桌面 IP 虚拟化地址功能还会在这些呼叫类型中查找 0.0.0.0。它将调用更改为侦听特定的远程桌面 IP 虚拟化地址,这使得多个应用程序能够侦听同一台计算机上的同一个端口,因为这些应用程序侦听的地址各不相同。仅当调用在 ICA 会话中进行并且远程桌面 IP 虚拟化地址功能处于启用状态时,才可以更改该调用。例如,如果在不同会话中运行的应用程序的两个实例同时尝试绑定到所有接口 (0.0.0.0) 和特定端口(例如 9000),它们将分别绑定到 VIPAddress1:9000 和 VIPAddress2:9000,因而不会发生冲突。

虚拟环回

启用 Citrix 远程桌面 IP 虚拟化环回策略设置后,每个会话都可以使用自己的环回地址进行通信。如果应用程序在 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 超过第四个八位字节(大于 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 无法保证因注册表编辑器使用不当导致出现的问题能够得以解决。使用注册表编辑器需自担风险。在编辑注册表之前,请务必进行备份。

在应用程序所在的服务器运行注册表。

  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\VIP
  • 名称:PreferLoopback,类型:REG_DWORD,数据:1
  • 名称:PreferLoopbackProcesses,类型:REG_MULTI_SZ,数据:<进程列表>进程列表>
虚拟 IP 和虚拟环回