域控制器无法正常工作

本文提供了有关域控制器无法正常运行的问题的常见解决方法。

原始 KB 数: 837513

现象

在基于 Microsoft Windows 2000 Server 的域控制器或基于 Windows Server 2003 的域控制器上运行 Dcdiag 工具时,可能会收到以下错误消息:

DC 诊断
执行初始设置:
[DC1] LDAP 绑定失败,错误代码 31

当你在域控制器本地运行 REPADMIN /SHOWREPS 实用工具时,可能会收到以下错误消息:

[D:\nt\private\ds\src\util\repadmin\repinfo.c, 389]LDAP 错误 82(本地错误)。

上次尝试失败,时间为 yyyy-mm-dd hh:mm.ss,结果 1753: 端点映射程序中不再有可用的端点。

上次尝试失败,时间为 yyyy-mm-dd hh:mm.ss,结果 5:拒绝访问。

如果使用 Active Directory 站点和服务触发复制,则可能会收到一条消息,指示拒绝访问。

在尝试使用受影响域控制器控制台中的网络资源(包括通用命名约定 (UNC) 资源或映射网络驱动器)时,可能会收到以下错误消息:

没有可用的登录服务器 (c000005e = "STATUS_NO_LOGON_SERVERS")

如果从受影响域控制器控制台启动任何 Active Directory 管理工具(包括 Active Directory 站点和服务和 Active Directory 用户和计算机),则可能会收到以下错误消息:

无法找到命名信息,原因: 无法联系任何机构进行身份验证。 请与系统管理员联系,验证域是否已正确配置且当前处于联机状态。

无法找到命名信息,原因: 目标帐户名称不正确。 请与系统管理员联系,验证域是否已正确配置且当前处于联机状态。

连接到使用受影响域控制器进行身份验证的 Microsoft Exchange Server 计算机的 Microsoft Outlook 客户端可能会提示输入登录凭据,即使其他域控制器已成功进行登录身份验证。

Netdiag 工具可能会显示以下错误消息:

DC 列表测试。 。 。 。 。 。 。 。 。 。 。 失败:
[警告]无法将 DsBind 调用到 <servername>。<fqdn> (<ip 地址>)。 [ERROR_DOMAIN_CONTROLLER_NOT_FOUND]
Kerberos 测试。 。 。 。 。 。 。 。 。 。 。 失败:
[致命]Kerberos 没有 krbtgt/<fqdn> 的票证。

[致命]Kerberos 没有主机名>票证<。
LDAP 测试。 。 。 。 。 。 。 。 。 。 。 。 。 : 通过
[警告]无法在 DC <主机名><fqdn 上查询 SPN 注册>

可能会在受影响的域控制器的系统事件日志中记录以下事件:

Event Type: Error
Event Source: Service Control Manager
Event ID: 7023
Description: The Kerberos Key Distribution Center service terminated with the following error: The security account manager (SAM) or local security authority (LSA) server was in the wrong state to perform the security operation.

解决方法

这些症状有若干种解决方法。 下面是要尝试的方法列表。 列表后面是执行每个方法的步骤。 请尝试每个方法,直到问题得到解决。 Microsoft 知识库文章介绍了这些症状的冷门修复方法,稍后会列出。

  1. 方法 1:修复域名系统 (DNS) 错误。
  2. 方法 2:在计算机之间同步时间。
  3. 方法 3:检查从网络访问此计算机用户权限。
  4. 方法 4:验证域控制器的 userAccountControl 属性是否为 532480。
  5. 方法 5:修复 Kerberos 领域(确认 PolAcDmN 注册表项和 PolPrDmN 注册表项互相匹配)。
  6. 方法 6:重置计算机帐户密码,然后获取新的 Kerberos 票证。

方法 1:修复 DNS 错误

  1. 在命令提示符下,运行 netdiag -v 命令。 此命令在运行命令的文件夹中创建 Netdiag.log 文件。
  2. 在继续操作之前,请先解决 Netdiag.log 文件中的任何 DNS 错误。 Netdiag 工具位于 Windows 2000 Server CD-ROM 的 Windows 2000 服务器支持工具中,或者作为下载提供。
  3. 确保 DNS 配置正确。 一个最常见的 DNS 错误是将域控制器指向 DNS 的 Internet 服务提供商 (ISP),而不是将 DNS 指向自身或支持动态更新和 SRV 记录的另一个 DNS 服务器。 建议将域控制器指向自身或支持动态更新和 SRV 记录的另一个 DNS 服务器。 建议设置 ISP 的转发器以在 Internet 上进行名称解析。

有关如何为 Active Directory 目录服务配置 DNS 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
254680 DNS 命名空间规划

方法 2:在计算机之间同步时间

验证域控制器之间的时间是否正确同步。 此外,请验证客户端计算机和域控制器之间的时间是否正确同步。

方法 3:检查“从网络访问此计算机”用户权限

修改 Gpttmpl.inf 文件,确认相应用户在域控制器上拥有“从网络访问此计算机”用户权限。 为此,请按照下列步骤进行操作:

  1. 修改默认域控制器策略的 Gpttmpl.inf 文件。 默认情况下,默认域控制器策略用于为域控制器定义用户权限。 默认情况下,默认域控制器策略的 Gpttmpl.inf 文件位于以下文件夹中。

    注意

    Sysvol 可能位于其他位置,但 Gpttmpl.inf 文件的路径将相同。

    Windows Server 2003 域控制器:

    C:\WINDOWS\Sysvol\Sysvol\Domainname>\<Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf

    Windows 2000 Server 域控制器:

    C:\WINNT\Sysvol\Sysvol\<Domainname>\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf

  2. 在 SeNetworkLogonRight 条目右侧,为管理员、经过身份验证的用户和任何人添加安全标识符。 请参阅以下示例。

    Windows Server 2003 域控制器:

    SeNetworkLogonRight = *S-1-5-32-554,*S-1-5-9,*S-1-5-32-544,*S-1-1-0

    Windows 2000 Server 域控制器:

    SeNetworkLogonRight = *S-1-5-11,*S-1-5-32-544,*S-1-1-0

    注意

    管理员 (S-1-5-32-544)、经过身份验证的用户 (S-1-5-11)、任何人 (S-1-1-0) 和企业控制器 (S-1-5-9) 使用在任何域中都相同的常见安全标识符。

  3. 删除 SeDenyNetworkLogonRight 条目右侧的任何条目(拒绝从网络访问此计算机),以匹配以下示例。

    SeDenyNetworkLogonRight =

    注意

    Windows 2000 Server 和 Windows Server 2003 的示例相同。

    默认情况下,SeDenyNetworkLogonRight 条目中没有 Windows 2000 Server 的条目。 默认情况下,SeDenyNetworkLogonRight 条目中只有 Windows Server 2003 的 Support_random 字符串帐户。 (Support_random 字符串帐户用于远程协助)因为 Support_random 字符串帐户在每个域中都使用不同的安全标识符 (SID),因此,仅通过查看 SID,难以区分此帐户与典型用户帐户。 你可能需要将 SID 复制到另一个文本文件,然后从 SeDenyNetworkLogonRight 条目中删除 SID。 这样,你就可以在解决问题后将其放回原处。

    可以在任何策略中定义 SeNetworkLogonRight 和 SeDenyNetworkLogonRight。 如果前面的步骤未解决问题,请检查 Sysvol 中其他策略中的 Gpttmpl.inf 文件,确认用户权限在其中也未进行定义。 如果 Gpttmpl.inf 文件不包含对 SeNetworkLogonRight 或 SeDenyNetworkLogonRight 的引用,则相应策略中未定义这些设置,并且该策略不是导致此问题的原因。 如果这些条目确实存在,请确保它们与之前列出的默认域控制器策略设置相匹配。

方法 4:验证域控制器的 userAccountControl 属性是否为 532480

  1. 依次单击“开始”和“运行”,然后键入“adsiedit.msc”
  2. 依次展开“域 NC”、“DC=域”、“OU=域控制器”
  3. 右键单击受影响的域控制器,然后单击“属性”
  4. 在 Windows Server 2003 中,单击以选中“显示必需属性”复选框,并在“属性编辑器”选项卡上选中“显示可选属性”复选框。在 Windows 2000 Server 中,单击“选择要查看的属性”框中的“两者”。
  5. 在 Windows Server 2003 中,单击“属性”框中的 userAccountControl。 在 Windows 2000 Server 中,单击“选择要查看的属性”中的 userAccountControl
  6. 如果值不是 532480,请在“编辑属性”框中键入 532480,单击“设置”,单击“应用,然后单击“确定”。
  7. 退出 ADSI 编辑。

方法 5:修复 Kerberos 领域(确认 PolAcDmN 注册表项和 PolPrDmN 注册表项互相匹配)

注意

此方法仅适用于 Windows 2000 Server。

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表

  1. 启动注册表编辑器
  2. 在左窗格中,展开“安全”
  3. 在“安全”菜单上,单击“权限”,授予“管理员”本地组对“安全”配置单元及其子容器和对象的完全控制。
  4. 找到 HKEY_LOCAL_MACHINE\SECURITY\Policy\PolPrDmN 项。
  5. 在注册表编辑器的右窗格中,单击<“无名称>:REG_NONE”条目一次。
  6. 在“视图”菜单中,单击“显示二进制数据”。 在对话框的“格式”部分,单击“字节”
  7. 域名显示为“二进制数据”对话框右侧的字符串。 域名与 Kerberos 领域相同。
  8. 找到 HKEY_LOCAL_MACHINE\SECURITY\Policy\PolACDmN 注册表项。
  9. 在注册表编辑器的右窗格中,双击<“无名称>:”REG_NONE项。
  10. 在“二进制编辑器”对话框中,粘贴 PolPrDmN 中的值。 (PolPrDmN 中的值将是 NetBIOS 域名)。
  11. 重新启动域控制器。

方法 6:重置计算机帐户密码,然后获取新的 Kerberos 票证

  1. 停止“Kerberos 密钥发行中心”服务,然后将启动值设置为“手动”

  2. 使用 Windows 2000 Server 支持工具或 Windows Server 2003 支持工具中的 Netdom 工具重置域控制器的计算机帐户密码:

    netdom resetpwd /server: <another domain controller> /userd:domain\administrator /passwordd: <administrator password>  
    

    确保 netdom 命令的返回结果为成功完成。 如果不是,则该命令未起到作用。 对于受影响域控制器为 DC1 且工作域控制器为 DC2 的域 Contoso,请从 DC1 的控制台运行以下 netdom 命令:

    netdom resetpwd /server:DC2 /userd:contoso\administrator /passwordd: <administrator password>
    
  3. 重启受影响的域控制器。

  4. 启动“Kerberos 密钥发行中心”服务,然后将启动设置设置设为“自动”

有关此问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
323542 无法启动“Active Directory 用户和计算机”工具,因为服务器未正常运行