Active Directory网络中的客户端系统如何找到其驻留在哪个站点?


21

当我准备开始Windows管理的演示文稿时,我被一个令我惊讶的问题感到惊讶,我没再提过。

我知道:

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

该博客文章暗示,AD网络中的客户端计算机可以“知道”它们属于哪个站点。我的问题是,如果是这样,他们如何找到答案?

如果客户端本身不知道,那么DC在选择与该客户端计算机最接近的AD服务的过程中如何帮助计算机?

Answers:


29

答案是客户端第一次对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 2013年

4
@MDMarra这是一个罕见的发生先生。
Ryan Ries 2013年

出于好奇,netlogon检查是否会重做?例如,如果我有一个位于Site1中的系统,然后将人员和设备移至Site2,该机器仍会识别并继续与Site1通信吗?
彼得·格蕾丝

实际上,我将其收回。Netlogon可以在不重新启动的情况下更新动态站点名称:technet.microsoft.com/zh-cn/library/cc958488.aspx
Ryan Ries

@RyanRies如果您想将其弹出到您的答案文本中,那太好了,否则我将编辑答案以将其合并。
彼得·格蕾丝

8

实际上有几个相互关联的功能/ API。尽管它们很长,但实际上是一些更有趣的Active Directory阅读内容。

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

  • 如果本地站点中的DC由于任何原因均未响应,则预期客户端将与该域中的任何域控制器联系。这是正常现象,并且始终是默认行为。有时不清楚为什么会发生。

  • 那可能不是最理想的。请考虑以下情形:三个站点:纽约市(中心/数据中心-快速),洛杉矶(辐射至纽约市-快速)和哈萨克斯坦(辐射至纽约市-绝对不快)。如果您在洛杉矶站点的客户无论出于何种原因都无法联系其本地DC,那么可以在哈萨克斯坦进行身份验证是不可想象的。

有两种解决方案。您可以选择其中之一。

  • Microsoft创建的组策略/注册表设置恰当地命名为TryNextClosestSite。这意味着洛杉矶客户应先漫游纽约,然后再漫游星球寻找DC。辉煌!花了八年的时间,但我们终于在Vista / 2008中实现了这一目标。请记住,默认情况下未启用,您需要创建一个GPO来启用它。

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


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

将IP地址映射到站点名称

“在Net Logon启动过程中,每个域控制器上的Net Logon服务都会枚举配置容器中的站点对象。每个域控制器上的Net Logon也会收到对该站点对象所做的任何更改的通知。NetLogon使用站点信息来构建内存中的结构,用于将IP地址映射到站点名称。

“当搜索域控制器的客户端从DNS接收到域控制器IP地址的列表时,客户端开始依次查询域控制器以找出哪个域控制器可用并且合适。ActiveDirectory会截取该查询,其中包含客户端的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/zh-cn/library/ms675983%28VS.85%29.aspx

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.