VDA 注册
本节概述
在 VDA 可用之前,它必须在站点上向一个或多个控制器或云连接器注册(建立通信)。(在本地 XenApp and XenDesktop® 部署中,VDA 会向控制器注册。在 XenApp and XenDesktop Service 部署中,VDA 会向云连接器注册。)VDA 通过检查一个名为 ListofDDCs 的列表来查找控制器或连接器。VDA 上的 ListOfDDCs 包含将该 VDA 指向站点上的控制器或云连接器的 DNS 条目。为了实现负载平衡,VDA 会自动将连接分配到列表中的所有控制器或云连接器。
VDA 注册为何如此重要?
- 从安全角度来看,注册是一项敏感操作:您正在 Controller 或 Cloud Connector 与 VDA 之间建立连接。对于此类敏感操作,如果一切不完美,则预期行为是拒绝连接。您实际上正在建立两个独立的通信通道:VDA 到 Controller 或 Cloud Connector,以及 Controller 或 Cloud Connector 到 VDA。连接使用 Kerberos,因此时间同步和域成员资格问题不容忽视。Kerberos 使用服务主体名称 (SPN),因此您不能使用负载平衡的 IP\hostname。
- 如果您在添加和删除 Controller 或 Cloud Connector 时,VDA 没有准确和最新的 Controller 或 Cloud Connector 信息,则 VDA 可能会拒绝由未列出的 Controller 或 Cloud Connector 代理的会话启动。无效条目可能会延迟虚拟桌面系统软件的启动。VDA 不会接受来自未知和不受信任的 Controller 或 Cloud Connector 的连接。
除了 ListOfDDCs 之外,ListOfSIDs(安全 ID)还指示 ListOfDDCs 中哪些计算机是受信任的。ListOfSIDs 可用于减少 Active Directory 上的负载,或避免来自受损 DNS 服务器的潜在安全威胁。有关详细信息,请参阅 ListOfSIDs。
如果 ListOfDDCs 指定了多个 Controller 或 Cloud Connector,VDA 会尝试以随机顺序连接到它们。在本地部署中,ListOfDDCs 还可以包含 Controller 组。VDA 会尝试连接到组中的每个 Controller,然后才移动到 ListOfDDCs 中的其他条目。
XenApp® and XenDesktop 在 VDA 安装期间自动测试与已配置的 Controller 或 Cloud Connector 的连接。如果无法访问 Controller 或 Cloud Connector,则会显示错误。如果您忽略了无法联系 Controller 或 Cloud Connector 的警告(或者在 VDA 安装期间未指定地址),则会显示消息提醒您。
配置控制器或云连接器地址的各种方法
管理员选择 VDA 首次注册时要使用的配置方法。(这称为初始注册。)在初始注册期间,会在 VDA 上创建持久缓存。在后续注册期间,除非检测到配置更改,否则 VDA 会从此本地缓存中检索 Controller 或 Cloud Connector 列表。
在后续注册期间检索该列表的最简单方法是使用自动更新功能。自动更新默认启用。有关详细信息,请参阅自动更新。
有多种方法可以在 VDA 上配置控制器或云连接器地址。
- 基于策略(LGPO 或 GPO)
- 基于注册表(手动、GPP,在 VDA 安装期间指定)
- 基于活动目录 OU(旧版 OU 发现)
- MCS-based (personality.ini)
在安装 VDA 时,您可以指定初始注册方法。(如果禁用自动更新,则在 VDA 安装期间选择的方法也将用于后续注册。)
下图显示了 VDA 安装向导的 交付控制器™ 页面。
VDA 安装控制器(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/vda-install-controllers-all.png)
基于策略 (本地组策略对象\组策略对象)
Citrix® 建议使用 GPO 进行初始 VDA 注册。它具有最高优先级。(尽管之前将自动更新列为最高优先级,但自动更新仅在初始注册后使用。)基于策略的注册提供了使用组策略进行配置的集中化优势。
要指定此方法,请完成以下两个步骤:
- 在 VDA 安装向导的“Delivery Controller”页面上,选择“稍后执行 (高级)”。即使您在 VDA 安装期间未指定控制器地址,向导也会多次提醒您指定控制器地址。(因为 VDA 注册非常重要!)
- 通过 Citrix 策略,使用
Virtual Delivery Agent Settings > Controllers设置启用或禁用基于策略的 VDA 注册。(如果安全性是您的首要任务,请使用Virtual Delivery Agent Settings > Controller SIDs设置。)
此设置存储在 HKLM\Software\Policies\Citrix\VirtualDesktopAgent (ListOfDDCs) 下。
基于注册表
要指定此方法,请完成以下步骤之一:
- 在 VDA 安装向导的“Delivery Controller”页面上,选择“手动执行”。然后,输入已安装的控制器的 FQDN,然后单击“添加”。如果您安装了更多控制器,请添加它们的地址。
- 对于命令行 VDA 安装,请使用 /controllers 选项并指定已安装的控制器或 Cloud Connector 的 FQDN。
此信息通常存储在注册表项 HKLM\Software\Citrix\VirtualDesktopAgent 或 HKLM\Software\Wow6432Node\Citrix\VirtualDesktopAgent 下的注册表值 ListOfDDCs 中。
您也可以手动配置此注册表项或使用组策略首选项 (GPP)。此方法可能优于基于策略的方法(例如,如果您希望对不同的控制器或云连接器进行条件处理,例如:对于以 XDW-001- 开头的计算机名称,使用 XDC-001)。
更新 ListOfDDCs 注册表项,其中列出了站点中所有控制器或云连接器的 FQDN。(此项等同于 Active Directory 站点 OU。)
HKEY_LOCAL_MACHINE\Software\Citrix\\VirtualDesktopAgent\ListOfDDCs (REG_SZ)
如果 HKEY_LOCAL_MACHINE\Software\Citrix\VirtualDesktopAgent 注册表位置同时包含 ListOfDDCs 和 FarmGUID 键,则 ListOfDDCs 用于控制器或云连接器发现。如果在 VDA 安装期间指定了站点 OU,则存在 FarmGUID。(这可能用于旧版部署。)
(可选)更新 ListOfSIDs 注册表项(有关详细信息,请参阅 ListOfSIDs:
HKEY_LOCAL_MACHINE\Software\Citrix\VirtualDesktopAgent\ListOfSIDs (REG_SZ)
请记住:
如果您还通过 Citrix 策略启用基于策略的 VDA 注册,则该配置将覆盖您在 VDA 安装期间指定的设置,因为它是一种优先级更高的方法。
基于活动目录 OU(旧版)
此方法主要用于向后兼容,不建议使用。如果您仍在使用此方法,Citrix 建议更改为其他方法。
要指定此方法,请完成以下两个步骤:
- 在 VDA 安装向导的“交付控制器”页面上,选择“从 Active Directory 中选择位置”。
- 使用
Set-ADControllerDiscovery.ps1脚本(在每个控制器上可用)。此外,在每个 VDA 上配置 FarmGuid 注册表项以指向正确的 OU。此设置可以使用组策略进行配置。
有关详细信息,请参阅 基于 Active Directory OU 的发现。
基于 MCS
如果您计划仅使用 MCS 预配 VM,则可以指示 MCS 设置控制器或云连接器列表。此功能与自动更新兼容:MCS 在初始预配(创建计算机目录时)期间将控制器或云连接器列表注入到 Personality.ini 文件中。自动更新使列表保持最新。
不建议在大型环境中使用此方法。如果您满足以下条件,则可以使用此方法:
- 拥有小型环境
- 不会在站点之间移动 VDA
- 仅使用 MCS 预配 VM
- 不希望使用组策略
要指定此方法:
- 在 VDA 安装向导的“交付控制器”页面上,选择“让 Machine Creation Services™ 执行此操作”。
推荐事项
最佳实践:
- 使用组策略注册方法来完成初始注册。
- 使用自动更新(默认启用)使您的控制器列表保持最新。
- 在多区域部署中,使用组策略进行初始配置(至少包含两个控制器或云连接器)。将 VDA 指向其区域本地(或区域内)的控制器或云连接器。使用自动更新使其保持最新。自动更新会自动优化卫星区域中 VDA 的 ListOfDDCs。
自动更新
自动更新(在 XenApp 和 XenDesktop 7.6 中引入)默认启用。它是使您的 VDA 注册保持最新状态的最有效方法。尽管自动更新不用于初始注册,但自动更新软件会在初始注册时将 ListOfDDCs 下载并存储到 VDA 上的持久缓存中。每个 VDA 都会执行此操作。(缓存还保存计算机策略信息,这可确保策略设置在重新启动后仍然保留。)
在使用 MCS 或 PVS 预配计算机时支持自动更新,PVS 服务器端缓存除外(这不是常见情况,因为自动更新缓存没有持久存储)。
要指定此方法:
- 通过包含以下设置的 Citrix 策略启用或禁用自动更新:
Virtual Delivery Agent Settings > Enable auto update of Controllers。此设置默认启用。
工作原理:
- 每次 VDA 重新注册(例如,在计算机重新启动后),缓存都会更新。每个 Controller 或 Cloud Connector 还会每 90 分钟检查一次站点数据库。如果自上次检查以来添加或删除了 Controller 或 Cloud Connector,或者发生了影响 VDA 注册的策略更改,则 Controller 或 Cloud Connector 会向其注册的 VDA 发送更新列表,并且缓存会更新。VDA 接受其最近缓存列表中的所有 Controller 或 Cloud Connector 的连接。
- 如果 VDA 收到的列表中不包含其注册的控制器或云连接器(换句话说,该控制器或云连接器已从站点中删除),VDA 会重新注册,从 ListOfDDCs 中的控制器或云连接器中进行选择。
例如:
- 一个部署有三个 Controller:A、B 和 C。一个 VDA 注册到 Controller B(在 VDA 安装期间指定)。
- 之后,将两个 Controller(D 和 E)添加到站点。在 90 分钟内,VDA 会收到更新列表,然后接受来自 Controller A、B、C、D 和 E 的连接。(在 VDA 重新启动之前,负载不会平均分配给所有 Controller。)
- 再之后,Controller B 被移动到另一个站点。在 90 分钟内,原始站点中的 VDA 会收到更新列表,因为自上次检查以来 Controller 已发生更改。最初注册到 Controller B(不再在列表中)的 VDA 会重新注册,从当前列表(A、C、D 和 E)中的 Controller 中进行选择。
在多区域部署中,卫星区域中的自动更新会首先自动缓存所有本地 Controller。主区域中的所有 Controller 都缓存在备份组中。如果卫星区域中没有可用的本地 Controller,则会尝试向主区域中的 Controller 注册。
如以下示例所示,缓存文件包含主机名和安全 ID 列表 (ListOfSIDs)。VDA 不查询 SID,这减少了 Active Directory 负载。

您可以使用 WMI 调用检索缓存文件。但是,它存储在只有 SYSTEM 帐户才能读取的位置。此信息仅供参考。请勿修改此文件。对该文件或文件夹的任何修改都将导致不受支持的配置。
Get-WmiObject -Namespace “Root\Citrix\DesktopInformation”
-Class “Citrix_VirtualDesktopInfo” -Property “PersistentDataLocation”
如果您出于安全原因需要手动配置 ListOfSIDs(与减少 Active Directory 负载不同),则无法使用自动更新功能。有关详细信息,请参阅 ListOfSIDs。
自动更新优先级的例外情况
尽管自动更新通常在所有 VDA 注册方法中具有最高优先级并覆盖其他方法的设置,但存在一个例外。缓存中的 NonAutoListOfDDCs 元素指定了初始 VDA 配置方法。自动更新会监视此信息。如果初始注册方法发生更改,注册过程将跳过自动更新,并使用下一个最高优先级的配置方法。当您将 VDA 移动到另一个站点时(例如,在灾难恢复期间),这会很有帮助。
配置方面的注意事项
控制器或云连接器地址
无论您使用哪种方法指定控制器或云连接器,Citrix 都建议使用 FQDN 地址。IP 地址不被视为受信任的配置,因为与 DNS 记录相比,IP 更容易受到攻击。如果您手动填充 ListOfSIDs,则可以在 ListOfDDCs 中使用 IP。但是,仍然建议使用 FQDN。
负载平衡
如前所述,VDA 会自动将连接分配到 ListOfDDCs 中的所有控制器或云连接器。故障转移和负载平衡功能内置于 Citrix 代理协议 (CBP) 中。如果您在配置中指定了多个控制器或云连接器,则在需要时,注册会自动在它们之间进行故障转移。通过自动更新,所有 VDA 都会自动进行故障转移。
出于安全原因,您不能使用网络负载平衡器,例如 Citrix ADC。VDA 注册使用 Kerberos 相互身份验证,其中客户端 (VDA) 必须向服务(控制器)证明其身份。但是,控制器或云连接器也必须向 VDA 证明其身份。这意味着 VDA 和控制器或云连接器同时充当服务器和客户端。如本文开头所述,存在两个通信通道:VDA 到控制器或云连接器,以及控制器或云连接器到 VDA。
此过程中的一个组件称为服务主体名称 (SPN),它作为属性存储在 Active Directory 计算机对象中。当您的 VDA 连接到控制器或云连接器时,它必须指定要与之通信的“对象”。此地址是一个 SPN。如果您使用负载平衡的 IP,Kerberos 相互身份验证会正确识别该 IP 不属于预期的控制器或云连接器。
有关详细信息,请参阅:
- 科尔贝罗斯简介:https://blogs.technet.microsoft.com/askds/2008/03/06/kerberos-for-the-busy-admin/
- 使用 Kerberos 进行相互身份验证:https://docs.microsoft.com/zh-cn/windows/win32/ad/mutual-authentication-using-kerberos?redirectedfrom=MSDN
自动更新取代 CNAME
自动更新功能取代了 XenApp 和 XenDesktop 7.x 之前版本中的 CNAME(DNS 别名)功能。从 XenApp 和 XenDesktop 7 开始,CNAME 功能已禁用。请使用自动更新而不是 CNAME。(如果必须使用 CNAME,请参阅 CTX137960。为使 DNS 别名一致工作,请勿同时使用自动更新和 CNAME。)
控制器/云连接器组
您可能希望按组处理控制器或云连接器。使用组时,一个组是首选组,如果所有控制器/云连接器都出现故障,则使用另一个组进行故障转移。请记住,控制器或云连接器是从列表中随机选择的,因此分组有助于强制优先使用。
使用括号指定控制器/云连接器组。例如,对于四个控制器(两个主控制器和两个备份控制器),分组可能如下所示:
(XDC-001.cdz.lan XDC-002.cdz.lan) (XDC-003.cdz.lan XDC-004.cdz.lan).
在此示例中,首先处理第一组中的控制器(001 和 002)。如果它们都出现故障,则处理第二组中的控制器(003 和 004)。
SID列表
VDA 可联系以进行注册的控制器列表是 ListOfDDCs。VDA 还必须知道要信任哪些控制器;VDA 不会自动信任 ListOfDDCs 中的控制器。ListOfSIDs(安全 ID)标识受信任的控制器。VDA 将仅尝试向受信任的控制器注册。
在大多数环境中,ListOfSIDs 是从 ListOfDDCs 自动生成的。您可以使用 CDF 跟踪来读取 ListOfSIDs。
通常,无需手动修改 ListOfSIDs。有几个例外。前两个例外不再有效,因为已有更新的技术可用。
- 控制器的独立角色: 在 XenApp 和 XenDesktop 7.7 中引入区域之前,当仅使用一部分控制器进行注册时,ListOfSIDs 是手动配置的。例如,如果您使用 XDC-001 和 XDC-002 作为 XML 代理,并使用 XDC-003 和 XDC-004 进行 VDA 注册,则您在 ListOfSIDs 中指定所有控制器,并在 ListOfDDCs 中指定 XDC-003 和 XDC-004。这不是典型或推荐的配置,并且在较新的环境中不使用。请改用区域。
- 减少 Active Directory 负载: 在 XenApp 和 XenDesktop 7.6 中引入自动更新功能之前,ListOfSIDs 用于减少域控制器上的负载。通过预填充 ListOfSIDs,可以跳过从 DNS 名称到 SID 的解析。但是,自动更新功能消除了这项工作的需要,因为此持久缓存包含 SID。Citrix 建议保持自动更新功能启用。
- 安全性: 在某些高度安全的环境中,手动配置受信任控制器的 SID,以避免来自受损 DNS 服务器的潜在安全威胁。但是,如果执行此操作,则还必须禁用自动更新功能。否则,将使用持久缓存中的配置。
因此,除非有特殊原因,请勿修改 ListOfSIDs。
如果您需要修改 ListOfSIDs,请在 HKLM\Software\Citrix\VirtualDesktopAgent 下创建一个名为 ListOfSIDs (REG_SZ) 的注册表项。该值是一个受信任 SID 的列表,如果存在多个,则应使用空格进行分隔。
在以下示例中,一个控制器用于 VDA 注册 (ListOfDDCs),但两个控制器用于代理 (List OfSIDs)。

VDA 注册期间的控制器搜索
当 VDA 尝试注册时,代理代理首先在本地域中执行 DNS 查找,以确保可以访问指定的控制器。
如果初始查找未能找到控制器,代理代理可以在 AD 中启动回退自上而下查询。该查询会搜索所有域,并频繁重复。如果控制器地址无效(例如,管理员在安装 VDA 时输入了不正确的 FQDN),则该查询活动可能会导致域控制器上出现分布式拒绝服务 (DDoS) 情况。
以下注册表项控制代理代理在初始搜索期间无法找到控制器时是否使用回退自上而下查询。
HKEY_LOCAL_MACHINE\Software\Policies\Citrix\VirtualDesktopAgent
- 名称:
DisableDdcWildcardNameLookup - 类型:
DWORD - 值:
1(默认)或0
当设置为 1 时,回退搜索将被禁用。如果对控制器的初始搜索失败,代理代理将停止查找。这是默认设置。
当设置为 0 时,回退搜索将被启用。如果对控制器的初始搜索失败,将启动回退自上而下搜索。
排查 VDA 注册问题
如前所述,VDA 必须向交付控制器注册,才能在启动代理会话时被考虑。未注册的 VDA 可能会导致对原本可用资源的利用不足。VDA 未注册的原因有很多,其中许多原因管理员都可以排查。Studio 在目录创建向导中以及创建交付组后提供故障排除信息。
在计算机目录创建期间识别问题:
在目录创建向导中,添加现有计算机后,计算机帐户名称列表会指示每台计算机是否适合添加到目录。将鼠标悬停在每台计算机旁边的图标上,可显示有关该计算机的信息性消息。
如果消息识别出有问题的计算机,您可以移除该计算机(使用 移除 按钮),或者添加该计算机。例如,如果消息指示未获取有关计算机的信息(可能是因为它从未向 Delivery Controller 注册),您仍然可以选择添加该计算机。
目录的功能级别控制目录中哪些产品功能可用于计算机。使用新产品版本中引入的功能可能需要新的 VDA。设置功能级别可使该版本中引入的所有功能(如果功能级别不变,则包括更高版本的功能)可用于目录中的计算机。但是,该目录中具有早期 VDA 版本的计算机将无法注册。
在创建交付组后,如何识别问题:
创建交付组后,Studio 会显示与该组关联的计算机的详细信息。交付组的详细信息窗格会指示预期已注册但未注册的计算机数量。换句话说,可能有一台或多台计算机已开机且未处于维护模式,但当前未向控制器注册。查看“未注册但预期已注册”的计算机时,请检查详细信息窗格中的 故障排除 选项卡,以了解可能的原因和建议的纠正措施。
有关功能级别的更多信息,请参阅 创建计算机目录 中的“VDA 版本和功能级别”部分。
有关 VDA 注册故障排除的更多信息,请参阅 CTX136668。
您还可以使用 Citrix Health Assistant 排除 VDA 注册和会话启动故障。有关详细信息,请参阅 CTX207624。