Active Directorynetworking中的客户端系统如何find它驻留在哪个站点?

当我开始一个关于Windowspipe理的演示时,我感到惊讶,我很惊讶,我没有早点问。

我知道:

  • AD在逻辑上设置在站点中以帮助复制并减less客户端计算机和域服务之间的域必要通信延迟。
  • 站点由应用于它们的子网来定义
  • _msdcs子域包含用于常规查找(_tcp)和站点特定查找(_sites)的SRVlogging的层次结构
  • 计算机以某种方式知道他们在哪个网站,或者域控制器透明地决定DNS的一些魔力……或者是这样吗?

这篇博客文章暗示,ADnetworking中的客户端计算机可以“知道”他们是哪个网站的成员。 我的问题是,如果是这样的话,他们是怎么发现的?

如果客户端本身不知道,那么DC如何帮助机器select与客户端计算机最近的AD服务?

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

当第一次join域时,客户端进行一般的DNS和LDAP查询,并获得域中所有域控制器的列表,然后列表中的列表,尝试LDAP绑定,并绑定到第一个成功的DC它authentication的第一个DC。

客户端join域后,Active Directory会告诉客户端它属于哪个站点。 Active Directory知道这一点,因为pipe理员已将客户的IP子网放在AD Sites&Services中,并将其关联到站点。

活动目录告诉客户端其AD站点是什么,客户端将其存储在HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteNameregistry值的registry中。 这样,下一次客户端启动时,它就知道要进行的特定于站点的DNS查询,以便只获取该站点中的DC。

当然, 完整的行为在KB247811中有logging ,但是如果您想自己查看,可以运行Wireshark或NetMon并执行数据包跟踪,然后在跟踪运行时join域。 您将看到DNS查询和LDAP绑定的确切顺序。 随后的DNS查询和LDAP绑定是针对站点特定的子区域进行的,因为AD告诉客户端它属于哪个站点。

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

实际上有几个相关的function/ API。 尽pipe它们很长,但它实际上是一些更有趣的Active Directory读取。

不pipe下面的解释如何,有两件事情需要注意:

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

  • 这可能不是最理想的。 考虑以下情况:三个站点:纽约市(枢纽/数据中心 – 快),洛杉矶(快速与纽约市谈话)和哈萨克斯坦(与纽约市谈话 – 绝对不是快)。 如果您在洛杉矶的客户不能以任何理由与当地的DC联系,那么与哈萨克斯坦的authentication并不是不可思议的。

有几个解决scheme。 你可以做或者两者兼而有之。

  • Microsoft创build了正确命名为TryNextClosestSite的组策略/registry设置。 这意味着洛杉矶客户应该在漫游地球寻找DC之前尝试NYC。 辉煌! 花了八年时间,但是我们终于在Vista / 2008上得到了这个。 请记住,默认情况下不启用,您需要创build一个GPO来启用它。

  • 对于您不希望该DC为其他站点中的客户端服务的辐射站点,可以创build一个组策略/registry设置,以指定哪些DNSlogging不应该被注册。 这被称为DNS助记符。


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

将IP地址映射到站点名称

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

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

  • 客户端所在的站点的名称,或最接近客户端IP地址的站点的名称。

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

  • 在离客户端最近的站点中,指示find的域控制器是位于(位已设置)还是未find(位未设置)的位。

“域控制器将信息返回给客户端,响应还包含描述域控制器的各种信息,客户端检查信息以确定是否尝试find更好的域控制器,具体做法如下:

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

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

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

“如果计算机正在查询的域与计算机join的域相同,则计算机registry中将存储计算机所在的站点(由域控制器报告)。站点名称在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Netlogon \ Parameters DynamicSiteNameregistry项中,因此,DsGetSiteName API返回计算机所在的站点。

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

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

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

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

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