Citrix虚拟应用和桌面服务

虚拟IP和虚拟环回

重要:

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

Windows Server 2016支持虚拟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服务器上启用并配置它。(不需要Citrix策略设置。)
  • 要使用Citrix虚拟环回,需要在一个Citrix策略中配置两项设置。

虚拟IP

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

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

判断应用程序是否需要使用虚拟IP地址:

  1. TCPView工具请从Microsoft获取。此工具列出了绑定特定IP地址和端口的所有应用程序。
  2. 禁用解析IP地址功能,以便您看到的是地址而不是主机名。
  3. 启动应用程序并使用TCPView查看应用程序打开了哪些IP地址和端口,以及哪些进程名称正在打开这些端口。
  4. 配置任何打开服务器IP地址0.0.0.0或127.0.0.1的进程。
  5. 要确保应用程序不会在不同端口上打开相同的IP地址,请启动该应用程序的其他实例。

微软远程桌面(RD) IP虚拟化如何工作

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

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

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

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

  • 将地址分配给会话后,无论何时进行以下调用,会话都会使用虚拟地址而不是系统的主IP地址:绑定¸closesocket¸连接WSA连接WSAAcceptgetpeernamegetsockname发送到WSASendToWSASocketWgethostbyaddrgetnameinfogetaddrinfo

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

在返回地址的函数中(例如GetAddrInfo (),由Windows策略控制),如果请求本地主机IP地址,虚拟IP将查看返回的IP地址并将其更改为会话的虚拟IP地址。试图通过此类名称函数获取本地服务器IP地址的应用程序只能看到分配给该会话的唯一虚拟IP地址。此IP地址通常用于后续套接字调用,例如绑定或连接。有关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环回支持。启用时,此策略设置允许每个会话拥有自己的虚拟环回地址。此设置在默认情况下是禁用的。该特性仅适用于配置了“Virtual IP Virtual loopback program list”策略的应用。
  • 虚拟IP虚拟环回程序列表。此策略设置指定使用虚拟IP环回特性的应用程序。仅当启用虚拟IP环回支持策略设置时,该设置有效。

您可以使用以下注册表设置来确保虚拟环回优先于虚拟IP;这称为首选环回。但是,请谨慎行事:

  • 只有当Virtual IP和Virtual loopback都启用时,才使用首选环回;否则,您可能会得到意想不到的结果。
  • 不正确地编辑注册表可能会导致严重的问题,可能需要您重新安装操作系统。Citrix不能保证由于不正确使用注册表编辑器而导致的问题能够得到解决。请自行承担使用注册表编辑器的风险。在编辑注册表之前,请务必备份注册表。

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

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