在Windows 中如何定位域控制器
本文介绍供 Windows 用来在 Windows 域中定位域控制器的机制。本文详细讲述通过域的 DNS-style 名称和 Flat-style (NetBIOS) 名称定位域的过程。Flat-style 名称用于向后兼容。在所有其他情况下,使用 DNS-style 名称应成为一种策略。本文还介绍了如何排查域控制器定位过程中出现的问题。
下面介绍如何用定位器查找域控制器:
在客户机(搜索域控制器的计算机)上,定位器的启动是以对本地 Netlogon 服务执行远程过程调用 (RPC) 的形式执行的。定位器 DsGetDcName 应用程序编程接口 (API) 调用是通过 Netlogon 服务实现的。
客户机收集在选择一个域控制器时所需的信息,并使用 DsGetDcName 调用将这些信息传递到 Netlogon 服务。
客户机上的 Netlogon 服务使用收集的这些信息从一个域控制器中查找指定的域,采用的是下面两种方法之一:
1.对于 DNS 名称,Netlogon 通过使用 IP/DNS 兼容定位器查询 DNS--即在 DNS 将域名附加到指定 SRV 记录的适当的字符串后,DsGetDcName 调用 DnsQuery 调用从 DNS 读取“服务资源”(SRV) 记录和“A”记录。
登录到基于 Windows 的域的工作站向 DNS 查询一般形式的 SRV 记录:
_service._protocol.DnsDomainName
Active Directory 服务器通过 TCP 协议提供“轻量目录访问协议”(LDAP) 服务。因此,客户机通过向 DNS 查询以下形式的一条记录找到一个 LDAP 服务器:
_ldap._tcp.DnsDomainName
2.对于 NetBIOS 名称,Netlogon 通过使用 Microsoft Windows NT 4.0 版兼容定位器来执行域控制器发现(即通过使用特定于传输的机制,例如 WINS)。
在 Windows NT 4.0 及更早版本中,“发现”是在主域或受信域中定位一个用于身份验证的域控制器的过程。
• Netlogon 服务将一个数据报发送到注册该名称的计算机。对于 NetBIOS 域名,数据报是作为一个邮筒消息实现的。对于 DNS 域名,数据报是作为一个 LDAP 用户数据报协议 (UDP) 搜索实现的。(UDP 是无连接数据报传输协议,它是 TCP/IP 协议组的一部分。TCP 是一个面向连接的传输协议。)
• 每个可用的域控制器都响应此数据报,表明它当前处于运行状态,并将该信息返回到 DsGetDcName。
注意,UDP 允许一台计算机上的程序向另一台计算机上的程序发送数据报。UDP 包括一个协议端口号,该端口号使发送方能够区分远程计算机上的多个目标(程序)。
• 每个可用的域控制器都响应此数据报,表明它当前处于运行状态,并将此信息返回到 DsGetDcName。
• Netlogon 服务缓存域控制器信息,以便后续请求不必重复此发现过程。缓存此信息有利于保证使用同一域控制器时的一致性和 Active Directory 视图的一致性。
当一个客户机登录或加入网络时,它必须能够找到一个域控制器。此客户机向 DNS 发送一个“DNS 查找”查询以发现域控制器,并希望最好能在客户机自己的子网内找到。因此,客户机通过向 DNS 查询以下形式的一条记录找到一个域控制器:
_LDAP._TCP.dc._msdcs.domainname
在客户机找到一个域控制器后,它将使用 LDAP 建立通讯,以获得对 Active Directory 的访问权。作为此协商的一部分,域控制器根据客户机的 IP 子网来确定此客户机所在的站点。如果此客户机正在与一个不在最近(最佳)站点的域控制器通讯,此域控制器将返回此客户机的站点名称。如果此客户机已经尝试在此站点中查找域控制器(例如,当客户机向 DNS 发送“DNS 查找”查询以在此客户机的子网内查找域控制器时),则此客户机将使用这个并非最佳的域控制器。否则,此客户机将使用此新的最佳站点名称重新执行一个特定于站点的 DNS 查找。域控制器使用一些目录服务信息来标识站点和子网。
在客户机找到一个域控制器后,此域控制器的条目将被缓存。如果此域控制器不在最佳站点,此客户机在十五分钟后将刷新缓存并丢弃缓存条目。然后它将尝试在它自己所在的站点内查找一个最佳的域控制器。
在客户机建立到域控制器的通讯路径之后,它就可以建立登录和身份验证凭证,而且,对于基于 Windows 的计算机,在必要时还可以建立一个安全通道。然后此客户机就可以在目录中执行常规查询和搜索信息了。
客户机建立一个到域控制器的 LDAP 连接以便登录。此登录过程要使用“安全帐户管理器”。因为通讯路径使用了 LDAP 接口,且此客户机是由一个域控制器进行身份验证的,所以此客户帐户在得到验证后通过“安全帐户管理器”传递到目录服务代理,然后到数据库层,最后到“可扩展存储引擎”(ESE) 中的数据库。
排查域定位器过程中的问题
在客户机和服务器上检查事件查看器。事件日志中可能包含一些指出存在问题的错误消息。若要查看“事件查看器”,请单击开始,指向程序,指向管理工具,然后单击事件查看器。查看客户机和服务器上的系统日志。另外,检查服务器上的目录服务日志和 DNS 服务器上的 DNS 日志。
在命令提示符下使用 ipconfig /all 命令检查 IP 配置。
使用 Ping 实用工具检查网络连接和名称解析。对 IP 地址和服务器名称执行 Ping 命令。您可能还需要 ping 域名。
使用 Netdiag 工具确定网络组件是否工作正常。如要将详细的输出发送到一个文本文件,请使用下面的命令:
netdiag /v >test.txt
检查日志文件,查找问题并仔细检查任何相关组件。此文件还包含其他网络配置详细信息。
如要修补小问题,请采用以下语法使用 Netdiag 工具:netdiag /fix。
使用 nltest /dsgetdc:域名命令检查对于特定的域是否可以找到一个域控制器。
使用 NSLookup 工具检查 DNS 条目是否在 DNS 中正确注册。检查确认服务器主机记录和 GUID SRV 记录是否能够解析。
例如,要检查记录注册,请使用下列命令:
nslookup 服务器名.根域子级.根域.com
nslookup guid._msdcs.根域.com
如果这两个命令都不成功,请使用下列方法之一向 DNS 注册记录。 • 如要强制执行主机记录注册,请键入 ipconfig /registerdns。
• 如要强制执行域控制器服务注册,请停止 Netlogon 服务,然后重新予以启动。
如要检测域控制器问题,请在命令提示符下运行 DCdiag 实用工具。此实用工具运行多种测试以检查域控制器是否正常运行。使用此命令可将结果发送到一个文本文件:
dcdiag /v >dcdiag.txt
使用 Ldp.exe 工具连接并绑定到域控制器以检查是否有适当的 LDAP 连接能力。
如果您怀疑某一特定域控制器有问题,打开 Netlogon 调试日志可能会很有帮助。通过键入下面的命令使用 NLTest 实用工具:nltest /dbflag:0x2000ffff。然后信息将记录到 Debug 文件夹中的 Netlogon.log 文件中。
如果仍没有找出问题,请使用“网络监视器”监视客户机和域控制器之间的网络通信量。