Citrix DaaS™

虚拟 IP 和虚拟环回

重要提示:

Windows 10 企业版多会话不支持远程桌面 IP 虚拟化(虚拟 IP),我们也不支持在 Windows 10 企业版多会话上使用虚拟 IP 或虚拟环回。

虚拟 IP 和虚拟环回功能在 Windows Server 2016 计算机上受支持。这些功能不适用于 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

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

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

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

  1. 从 Microsoft 获取 TCPView 工具。此工具列出所有绑定特定 IP 地址和端口的应用程序。
  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 地址。有关说明,请参阅 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 地址通常用于后续的套接字调用,例如 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 和虚拟环回时才使用首选环回;否则,可能会出现意外结果。
  • 不正确地编辑注册表可能会导致严重问题,可能需要重新安装操作系统。Citrix 无法保证可以解决因不正确使用注册表编辑器而导致的问题。使用注册表编辑器风险自负。在编辑注册表之前,请务必备份注册表。

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

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