在 Windows 和 Windows Server 中定位域控制器

域控制器位置(也称为 DC 定位器)是指客户端计算机用于查找合适的域控制器的算法。 域控制器位置是所有企业环境中允许使用 Active Directory 进行客户端身份验证的关键功能。

在本文中,了解域控制器定位器过程,包括发现、最近站点检测和 NetBIOS 域名映射配置。

域控制器定位器过程

域控制器定位器(简称定位器)算法由两部分组成:

  • 定位器查找已注册的域控制器。

  • 定位器提交查询以查找指定域中的域控制器。

然后,LDAP 用户数据报协议 (UDP) 查找将发送到响应中列出的一个或多个域控制器,以确保其可用性。 最后,Netlogon 服务会缓存发现的域控制器以帮助解决将来的请求。

发现过程

Active Directory 域始终具有两个不同的名称:完全限定的 DNS 域名 (FQDN) 和 NetBIOS 域名。 NetBIOS 域名具有旧长度和其他限制。 例如,NetBIOS 域限制为 15 个字符。

Active Directory 域的 NetBIOS 域名不需要与 Active Directory 域 FQDN 相同。 例如,Active Directory 域的 FQDN 可能是 contoso.com,而 netBIOS 域名则可能是 fabrikam

Windows 中的 DC 位置可以在两种基本模式下运行:

  • 基于 DNS 的发现基于使用 DNS 的域控制器通告。

    域控制器在 DNS 中注册各种 SRV 记录,例如表示密钥分发中心或全局目录等关键功能的记录,以及描述 Active Directory 站点记录等位置的记录。 客户端将查询 DNS 以获取适当的 SRV 记录,然后使用基于 UDP 的 LDAP ping 对这些服务器执行 ping 操作。

    仅当使用 DNS 域名和域控制器运行 Windows 2000 及更高版本时,才支持此模式。 在此模式下,支持的域控制器运行得更理想,但在某些情况下可以更改为其他模式。

  • 基于 NetBIOS 的发现涉及 Windows Internet 名称服务 (WINS) 中的域控制器注册记录。 客户端将查询 WINS 以获取适当的记录,然后对可能的目标候选 DC 执行 ping 操作。 此模式的变体使用 mailslot 消息支持的广播机制,其中客户端在其本地网络上广播数据包来查找 DC。

重要

当应用程序请求 DC 但指定 NetBIOS 样式的短域名时,DC 位置始终尝试将该短域名映射到 DNS 域名。 如果 DC 位置可以成功映射域名,它会将基于 DNS 的发现与映射的 DNS 域名配合使用。

NetBIOS 样式域名按以下顺序从多个源映射到 DNS 域名:

  1. 上一查找中缓存的信息

  2. 当前林中的所有域

  3. 所有信任林信任和外部信任的顶级名称 (TLN)

  4. 对于 Windows Server 2025 及更高版本:

    1. 管理员配置的域名映射

    2. 信任林信任中所有林和子域的域名映射

  5. 客户端计算机上的登录会话

当这些源都找不到 DNS 域名时,DC 位置可使用 NetBIOS 样式的原有短域名,从而使用基于 NetBIOS 的发现

从 Windows Server 2025 开始,Netlogon 会下载并缓存有关所有信任林中的域和子域的命名信息。 将 NetBIOS 样式的域名映射到 DNS 域名时,会使用此信息。

建议使用基于 DNS 的发现,而不是基于 NetBIOS 的发现。 基于 DNS 的发现更可靠并且更安全。 DsGetDcName 是主要的 DC 位置 API。

重要

从 Windows Server 2025 开始,DC 定位器不允许使用 NetBIOS 样式位置。 要了解如何配置此行为,请参阅 NetBIOS 发现策略设置部分。

若要了解发现过程,请选择与要了解的方法对应的选项卡。

定位器遵循的过程可以如下汇总:

  1. 在客户端(定位域控制器的计算机),定位器作为本地 Netlogon 服务的远程过程调用 (RPC) 启动。 Netlogon 服务实现定位器 API (DsGetDcName)。

  2. 客户端收集选择域控制器所需的信息,并使用 DsGetDcName API 将此信息传递给 Netlogon 服务。

  3. 客户端上的 Netlogon 服务使用收集到的信息来查找指定域的域控制器。 查找过程使用以下两种方法之一:

  4. Netlogon 使用与 IP/DNS 兼容的定位器查询 DNS。 DsGetDcName 将域名附加到指定 SRV 记录的适当字符串后,调用 DnsQuery 调用以从 DNS 读取服务资源 (SRV) 记录和 A 记录。

    • 当工作站登录到基于 Windows 的域时,它会以 _<service>._<protocol>.<DnsDomainName> 格式查询 SRV 记录的 DNS。 客户端使用以下格式查询域的 LDAP 服务器的 DNS,其中 DnsDomainName 是域名。

      _ldap._tcp.DnsDomainName

  5. Netlogon 服务将数据报作为 LDAP UDP 搜索发送到已发现的注册该名称的域控制器。

  6. 每个可用的域控制器都会响应数据报以表明其当前正在运行,然后将信息返回到 DsGetDcName

  7. Netlogon 服务从最先响应的域控制器向客户端返回信息。

  8. Netlogon 服务缓存域控制器信息,因此后续请求无需重复发现过程。 缓存这些信息有助于一致地使用同一个域控制器,从而实现 Active Directory 的一致视图。

NetBIOS 发现策略设置

从 Windows Server 2025 开始,DC 定位器不允许使用基于 NetBIOS 的发现。 BlockNetBIOSDiscovery 是 Netlogon 服务的新组策略设置,允许管理员控制此行为。 若要在组策略管理编辑器中访问策略,请转到“计算机配置”>“管理模板”>“系统”>“网络登录”>“DC 定位器 DNS 记录”>“阻止域控制器位置的基于 NetBIOS 的发现”。

以下设置适用于 BlockNetBIOSDiscovery

  • TRUE(默认值):DC 定位器不允许使用 NetBIOS 样式的 DC 位置。
  • FALSE:如果所有旧约束也允许,那么 DC 定位器允许使用 WINS 或基于 mailslot 的发现。

BlockNetBIOSDiscovery 设置用于针对 DC 位置强制实施默认安全的状况。 我们建议继续将其设置为 TRUE。 请仅在执行其他缓解措施时暂时禁用它。

新策略设置如下所示:

已启用默认值的 BlockNetBIOSDiscovery 组策略设置的屏幕截图。

提示

您可以使用 SMB EnableMailslots 策略设置单独启用或禁用在计算机范围内使用 mailslot 的功能。 要使 DC 定位器能够使用 mailslot 进行 DC 发现,你必须在 SMB 级别启用 mailslot 并禁用 BlockNetBIOSDiscovery。 您可以通过运行 EnableMailslotsGet-SmbClientConfiguration PowerShell cmdlet 来查询和设置 Set-SmbClientConfiguration 设置。

最近的 Active Directory 站点

客户端找到域控制器后,它会使用 LDAP 建立通信,以获取对 Active Directory 的访问权限。 作为该协商的一部分,域控制器根据客户端的 IP 子网标识客户端所在的站点。

如果客户端正在与不在最近、最优站点的域控制器进行通信,则域控制器将返回客户端站点的名称。 如果客户端已尝试在该站点中查找域控制器,则客户端将改用次优站点中的域控制器。 例如,客户端向 DNS 发送 DNS 查找查询以查找客户端子网中的域控制器。 否则,客户端将使用新的最佳站点名称再次执行特定于站点的 DNS 查找。 域控制器使用一些目录服务信息来识别站点和子网。

客户端缓存域控制器条目。 如果域控制器不在最佳站点中,则客户端会在 15 分钟后刷新缓存并丢弃缓存条目。 然后,它会尝试在与客户端相同的站点中找到最佳域控制器。

客户端建立到域控制器的通信路径后,它就可以建立登录和身份验证凭据。 如果有必要,客户端还可以为基于 Windows 的计算机建立安全通道。 客户端现在可以执行正常查询并根据目录搜索信息。

客户端与域控制器建立 LDAP 连接以进行登录。 登录过程使用安全帐户管理器。 通信路径使用 LDAP 接口,并且域控制器会对客户端进行身份验证。 之后,客户端帐户经过验证并通过安全帐户管理器传递到目录服务代理,然后传递到数据库层,最后传递到可扩展存储引擎 (ESE) 中的数据库。

配置 NetBIOS 域名映射

从 Windows Server 2025 开始,林管理员可以配置从 DNS 域名到 NetBIOS 域名的自定义映射。 林级别的管理员配置映射是一种可选机制,仅当所有其他选项都不够用时才应使用它。 例如,如果应用程序或环境需要其他来源无法自动提供的其他域名映射

自定义域名映射将存储在 serviceConnectionPoint 对象中,该对象位于 Active Directory 配置的命名上下文中。 例如:

CN=DCLocatorDomainNameMappings,CN=Windows NT,CN=Services,CN=Configuration,DC=contoso,DC=com

serviceConnectionPoint 对象的 msDS-Setting 属性可以包含一个或多个值。 每个值都包含以分号分隔的 DNS 域名和 NetBIOS 域名,例如 dnsdomainname.com:NetBIOSdomainname。

例如:

  • contoso.com:fabrikam
  • tatertots.contoso.com:tots
  • tailspintoys.com:tailspintoys

你可以按照以下步骤在 Active Directory 域和信任管理设置中配置这些映射:

  1. 右键单击该域。
  2. 选择“属性”。
  3. 选择“DC 定位器映射”选项卡。

然后,客户端上的 Netlogon 服务会每隔 12 个小时下载并缓存一次 DCLocatorDomainNameMappings 对象中的自定义映射。 当你将 NetBIOS 样式的域名映射到 DNS 域名时,该服务会自动使用此信息。

新的 Active Directory 域和信任关系管理页如下所示:

Active Directory 域和信任管理单元中 DC 定位器域名映射页面的屏幕截图。

重要

请仅在确定所有其他名称映射源都不足时,配置管理员配置的林级域名映射。 作为一般规则,只有当客户端与目标域之间不存在信任关系,并且无法迁移客户端应用程序以指定 DNS 样式域名时,才需要使用此类任意映射。