Citrix Virtual Apps and Desktops

虚拟 IP 和虚拟环回

重要提示:

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

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

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

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

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

管理员操作概述:

  • 要使用 Microsoft 远程桌面 IP 虚拟化,请在 Windows 服务器上启用并配置它。(不需要 Citrix® 策略设置。)
  • 要使用 Citrix 虚拟环回,请在 Citrix 策略中配置两个设置。

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

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

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

要确定应用程序是否需要使用远程桌面 IP 虚拟化地址:

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

Microsoft 远程桌面 (RD) IP 虚拟化工作原理

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

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

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

  • RD IP 虚拟化功能按会话或按程序为远程桌面连接分配 IP 地址。如果您为多个程序分配 IP 地址,它们将共享一个会话 IP 地址。

  • 为会话分配地址后,每当进行以下调用时,会话都会使用虚拟地址而不是系统的主要 IP 地址:bindclosesocketconnectWSAConnectWSAAcceptgetpeernamegetsocknamesendtoWSASendToWSASocketWgethostbyaddrgetnameinfogetaddrinfo

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

在返回地址的函数中(例如 GetAddrInfo(),由 Windows 策略控制),如果请求本地主机 IP 地址,远程桌面 IP 虚拟化会查看返回的 IP 地址并将其更改为会话的远程桌面 IP 虚拟化地址。尝试通过此类名称函数获取本地服务器 IP 地址的应用程序只会看到分配给该会话的唯一远程桌面 IP 虚拟化地址。此 IP 地址通常用于后续的套接字调用,例如 bindconnect。有关 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 无法保证可以解决因不正确使用注册表编辑器而导致的问题。请自行承担使用注册表编辑器的风险。在编辑注册表之前,请务必备份注册表。

在应用程序所在的服务器上运行 regedit

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