Active Directory 网络中的客户端系统如何找到它所在的站点?

Pet*_*ace 23 windows active-directory

当我整理一份关于开始 Windows 管理的演示文稿时,我被一个问题震惊了,我很惊讶我没有早点问过这个问题。

我知道:

  • AD 逻辑上设置在站点中以帮助复制和减少客户端计算机和域服务之间的域必要通信的延迟。
  • 站点由应用于它们的子网定义
  • _msdcs 子域包含用于一般查找 (_tcp) 和特定站点查找 (_sites) 的 SRV 记录层次结构
  • 计算机以某种方式知道它们所在的站点,或者域控制器在 DNS 的某种魔法中透明地决定......或者是吗?

这篇博文暗示 AD 网络中的客户端计算机可以“知道”它们是哪个站点的成员。我的问题是,如果是这种情况,他们是如何发现的?

如果客户端本身不知道,DC 如何帮助机器选择最接近该客户端计算机的 AD 服务?

Rya*_*ies 33

答案是客户端第一次对 Active Directory 进行身份验证时,它不知道它在哪个站点。

首次加入域时,客户端进行常规 DNS 和 LDAP 查询,并获取域中所有域控制器的列表,然后向下查找列表,尝试 LDAP 绑定,以及它绑定到的第一个成功的 DC - 即它进行身份验证的第一个 DC。

客户端加入域后,Active Directory 会告诉客户端它属于哪个站点。Active Directory 知道这一点,因为管理员已将客户端的 IP 子网放在 AD 站点和服务中并将其关联到站点。

Active Directory 告诉客户端其 AD 站点是什么,客户端将其存储在自己的注册表中的HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteName注册表值中。这样,下次客户端启动时,它知道要进行什么特定于站点的 DNS 查询,以便它只获取该站点中的 DC。

当然,完整的行为记录在 KB247811 中,但如果您想亲眼看看,您可以运行 Wireshark 或 NetMon 并进行数据包跟踪,然后在跟踪运行时加入域。您将看到 DNS 查询和 LDAP 绑定的确切顺序。后续 DNS 查询和 LDAP 绑定会针对特定于站点的子区域进行,因为 AD 已告知客户端它属于哪个站点。

Netlogon 服务将定期刷新其 AD 站点信息,因此如果您移动到不同的网络,您的客户端将自动获取其新站点。这可以在HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\SiteNameTimeout注册表值中进行调整。(链接)

  • @MDMarra 这是一个罕见的先生。 (4认同)

Gre*_*kew 8

实际上有几个相互关联的函数/API。尽管它们很长,但它实际上是一些更有趣的 Active Directory 读物。

无论下面的解释如何,您都需要注意两件事:

  • 如果本地站点中的 DC 因任何原因没有响应,则客户端将联系域中的任何域控制器。这是正常现象,而且一直是默认行为。有时不清楚为什么会发生。

  • 这可能是次优的。考虑以下场景:三个站点:纽约市(枢纽/数据中心 - 快速)、洛杉矶(与纽约市交谈 - 快速)和哈萨克斯坦(与纽约市交谈 - 绝对不快)。如果您在 LA 站点的客户由于某种原因无法联系到它的本地 DC,那么它会向哈萨克斯坦进行身份验证并非不可想象。

有几种解决方案。你可以做一个或两个。

  • Microsoft 创建了恰当地命名为 TryNextClosestSite 的组策略/注册表设置。这意味着洛杉矶客户应该在漫游地球寻找 DC 之前尝试纽约。杰出的!花了八年时间,但我们终于在 Vista/2008 上做到了。请记住,默认情况下未启用,您需要创建一个 GPO 来启用它。

  • 对于您确实不希望该 DC 为其他站点中的客户端提供服务的分支站点,您可以创建一个组策略/注册表设置,指定不应注册哪些 DNS 记录。这称为 DNS 助记符。


在最近的站点 (DsGetSiteName API) 中查找域控制器
http://technet.microsoft.com/en-us/library/cc978016.aspx

将 IP 地址映射到站点名称

“在 Net Logon 启动期间,每个域控制器上的 Net Logon 服务会枚举 Configuration 容器中的站点对象。每个域控制器上的 Net Logon 还会收到对站点对象所做的任何更改的通知。Net Logon 使用站点信息构建一个用于将 IP 地址映射到站点名称的内存结构。

“当正在搜索域控制器的客户端从 DNS 接收域控制器 IP 地址列表时,客户端开始依次查询域控制器以找出可用且合适的域控制器。Active Directory 拦截查询,其中包含客户端的 IP 地址,并将其传递给域控制器上的 Net Logon。Net Logon 通过查找与客户端 IP 地址最匹配的子网对象,然后在其子网到站点映射表中查找客户端 IP 地址返回以下信息:

  • 客户端所在站点的名称,或与客户端 IP 地址最匹配的站点的名称。

  • 当前域控制器所在站点的名称。

  • 一个位,指示找到的域控制器是否位于(位已设置)或不在(位未设置)最靠近客户端的站点中。

“域控制器将信息返回给客户端。响应中还包含描述域控制器的各种其他信息。客户端检查信息以确定是否尝试找到更好的域控制器。做出如下决定:

“如果返回的域控制器位于最近的站点(返回的位已设置),则客户端使用此域控制器。

“如果客户端已经尝试在域控制器声称客户端所在的站点中查找域控制器,则客户端使用该域控制器。

“如果域控制器不在最近的站点,客户端更新其站点信息并发送新的 DNS 查询以在站点中查找新的域控制器。如果第二次查询成功,则使用新的域控制器。如果第二次查询失败,使用原来的域控制器。

“如果计算机正在查询的域与计算机加入的域相同,则计算机所在的站点(由域控制器报告)存储在计算机注册表中。客户端存储此“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters 中的 DynamicSiteName 注册表项中的站点名称。因此,DsGetSiteName API 返回计算机所在的站点。”

DsGetDcName 函数
http://msdn.microsoft.com/en-us/library/ms675983%28VS.85%29.aspx

定位器的类型
http://technet.microsoft.com/en-us/library/cc978019.aspx

目录服务功能
http://technet.microsoft.com/en-us/subscriptions/ms675900%28v=vs.85%29.aspx

DNS 对 Active Directory 的支持如何工作
http://technet.microsoft.com/en-us/library/cc759550%28v=ws.10%29.aspx

如何优化位于客户端站点之外的域控制器的位置
http://support.microsoft.com/kb/306602