排查 DNS 事件 ID 4013 (DNS 服务器无法加载 AD 集成 DNS 区域)

本文解析 Windows 启动后托管 DNS 服务器角色的域控制器的 DNS 事件日志中记录的事件 ID 4013。

适用于: Windows Server 2012 R2
原始 KB 编号: 2001093

症状

  • 在托管 Active Directory 域控制器的基于 Windows 的计算机上,DNS 服务器角色在 15 到 25 分钟内停止响应。 在显示 “正在准备网络连接” 消息之后,在显示 Windows 登录提示 (Ctrl+Alt+Del) 之前,会出现此问题。

  • Windows 启动后,托管 DNS 服务器角色的域控制器的 DNS 事件日志中记录了以下 DNS 事件 ID 4013:

    Event Type: Warning  
    Event Source: DNS  
    Event Category: None  
    Event ID: 4013  
    Date: Date  
    Time: Time  
    User: N/A  
    Computer: ComputerName  
    Description:  
    The DNS server was unable to open the Active Directory. This DNS server is configured to use directory service information and can not operate without access to the directory. The DNS server will wait for the directory to start. If the DNS server is started but the appropriate event has not been logged, then the DNS server is still waiting for the directory to start.
    
    For more information, see Help and Support Center at https://go.microsoft.com/fwlink/events.asp.  
    Data:  
    0000: <%status code%>
    

    在此日志条目中,可能不会记录 %Status code%> 的值<。 或者,它们包括但不限于以下值:

    十六进制 字节 小数 符号 错误字符串
    000025f5 f5 25 00 00 9717 DNS_ERROR_DS_UNAVAILABLE 目录服务不可用
    0000232d 2d 23 00 00 9005 DNS_ERROR_RCODE_REFUSED DNS 操作被拒绝。
    0000232a 2a 23 00 00 9002 DNS_ERROR_RCODE_SERVER_FAILURE DNS 服务器故障。

示例客户方案

  • 同时重新启动的 Active Directory 站点中的多个域控制器。

    • 双域控制器域部署在同一数据中心。
    • DNS 服务器角色安装在两个域控制器上,并托管_msdcs的 AD 集成副本。<林根域> 和 Active Directory 域区域。
    • DC1 配置为将 DC2 用于首选 DNS,将自身用于备用 DNS。
    • DC2 配置为将 DC1 用于首选 DNS,将自身用于备用 DNS。
    • 所有域控制器都具有不间断电源 (UPS) 和发电机备份。
    • 数据中心经常停电 2 到 10 小时。 UPS 设备保持域控制器运行,直到发电机供电,但它们无法运行 HVAC 系统。 当内部温度达到制造商限制时,内置于服务器类计算机中的温度保护会关闭域控制器。
    • 最终恢复电源后,域控制器会挂起 20 分钟。 在显示 “准备网络连接” 之后和显示登录提示之前,会出现此问题。
    • DNS 事件 ID 4013 记录在 DNS 事件日志中。

    打开 DNS 管理控制台 (DNSMGMT。MSC) 失败并生成以下错误消息:

    无法联系服务器 <计算机名称> 。 错误为:服务器不可用。 是否还是要添加它?

    (DSA 打开Active Directory 用户和计算机管理单元。MSC) 生成以下错误消息:

    无法找到命名信息

  • Active Directory 站点中的单个域控制器

    • 站点中部署了一个域控制器。

    • 已安装 DNS 服务器角色,并托管_msdcs的 AD 集成副本。<林根域> 和 Active Directory 域区域。

    • 域控制器指向首选 DNS 的自身。

    • 域控制器没有指定备用 DNS 服务器,或者通过广域网 (WAN) 链接指向域控制器。

    • 域控制器因停电而重启。

    • 重启期间,WAN 链接可能无法正常运行。

    • 域控制器启动时,可能会挂起 20 分钟。 在显示 “准备网络连接” 之后和显示登录提示之前,会出现此问题。

    • DNS 事件 ID 4013 记录在 DNS 事件日志中。

    • 打开 DNS 管理控制台 (DNSMGMT。MSC) 失败并生成以下错误消息:

      无法联系服务器 <计算机名称> 。 错误为:服务器不可用。 是否还是要添加它?

    (DSA 打开Active Directory 用户和计算机管理单元。MSC) 生成以下错误消息:

    无法找到命名信息。

原因

某些域控制器中的 Active Directory 副本包含对林中其他域控制器的引用。 这些域控制器尝试在 Windows 启动期间入站复制所有本地保留的目录分区,作为初始同步或 初始化同步的一部分。

在尝试使用最新的 DNS 区域内容启动时,托管 DNS 区域 AD 集成副本的 Microsoft DNS 服务器会在 Windows 启动后延迟 DNS 服务启动几分钟。 如果 Active Directory 在 Windows 启动期间完成了初始同步,则不会发生延迟。 同时,Active Directory 因入站复制目录分区而延迟。 复制会延迟,直到它可以将源域控制器的 CNAME GUID 解析为目标域控制器用于名称解析的 DNS 服务器上的 IP 地址。 准备网络连接时的挂起持续时间取决于驻留在 Active Directory 的域控制器副本中的本地保留目录分区的数量。 大多数域控制器至少有以下五个分区:

  • 模式
  • configuration
  • domain
  • 林范围的 DNS 应用程序分区
  • 域范围的 DNS 应用程序分区

这些域控制器可能会遇到 15-20 分钟的启动延迟。 存在额外的分区会增加启动延迟。

DNS 事件日志中的 DNS 事件 ID 4013 指示 DNS 服务启动已延迟。 这是因为未发生 Active Directory 分区的入站复制。

多个条件可能会加剧以下问题:

  • Windows 启动速度缓慢
  • DNS 服务器上的 DNS 事件 4013 的日志记录,这些服务器配置为托管 AD 集成区域,这些区域隐式驻留在充当域控制器的计算机上。

这些条件包括:

  • 配置托管 AD 集成 DNS 区域的 DNS 服务器。 其 Active Directory 副本包含林中其他域控制器的知识,以专门指向自身进行 DNS 名称解析。
  • 配置托管 AD 集成 DNS 区域的 DNS 服务器。 其 Active Directory 副本包含林中其他域控制器的知识,用于指向不存在、当前处于脱机状态、在网络上无法访问或未托管入站复制 Active Directory 所需的区域和记录的 DNS 服务器。 示例包括域控制器 CNAME GUID 记录,以及潜在源域控制器的相应主机 A 或 AAAA 记录。
  • 启动托管 AD 集成 DNS 区域的域控制器和 DNS 服务器。 它的 Active Directory 副本包含有关其他域控制器的知识,因为:
    • 调用方或目标计算机上的网络适配器或网络堆栈已禁用或无法正常工作。
    • 域控制器已在隔离的网络上启动。
    • 本地域控制器的 Active Directory 副本包含对网络上不再存在的过时域控制器的引用。
    • 本地域控制器的 Active Directory 副本包含对当前关闭的其他域控制器的引用。
    • 源域控制器、目标域控制器或 DNS 或网络基础结构出现问题。 因此,本地域控制器的 Active Directory 副本包含对其他域控制器的引用,这些域控制器是联机且可访问的,但无法从中成功复制。

在 Windows Server 2003 和 Windows 2000 Server SP3 或更高版本中,承载操作主机角色的域控制器还必须成功复制目录分区上的入站更改,以保持操作主机角色的状态。 必须先成功复制,然后才能执行依赖于 FSMO 的操作。 添加了此类初始同步,以确保域控制器就 FSMO 角色所有权和角色状态达成一致。 FSMO 角色开始运行所需的初始同步要求不同于本文中讨论的初始同步,其中 Active Directory 必须进行入站复制才能立即启动 DNS 服务器服务。

解决方案

某些 Microsoft 和外部内容建议将注册表值 Repl Perform Initial Synchronizations 设置为 0 ,以绕过 Active Directory 中的初始同步要求。 该设置的特定注册表子项和值如下所示:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
值名称:Repl 执行初始同步
值类型:REG_DWORD
值数据:0

不建议在生产环境或任何环境中持续使用此配置更改。 Repl Perform Initial Synchronizations应仅在紧急情况下使用 ,以解决临时和特定问题。 此类问题解决后,应还原默认设置。

其他可行的选项包括:

  • 删除对过时域控制器的引用。

  • 使脱机或无法正常运行的域控制器正常运行。

  • 托管 AD 集成 DNS 区域的域控制器不应指向单个域控制器,尤其是仅指向自己作为名称解析的首选 DNS。

    域控制器的 DNS 名称注册和名称解析是 DNS 客户端和服务器高度缓存的相对轻型操作。

    将域控制器配置为指向单个 DNS 服务器的 IP 地址(包括 127.0.0.1 环回地址)表示单一故障点。 此设置在只有一个域控制器的林中是可以容忍的,但在具有多个域控制器的林中则不能容忍。

    中心站点域控制器应指向同一站点中的 DNS 服务器,作为首选和备用 DNS 服务器,最后作为另一个备用 DNS 服务器指向自身。

    分支站点域控制器应将首选 DNS 服务器 IP 地址配置为指向中心站点 DNS 服务器,将备用 DNS 服务器 IP 地址配置为指向站点内 DNS 服务器或最近的可用站点中的 DNS 服务器,最后使用 127.0.0.1 环回地址或当前静态 IP 地址来指向自身。

    指向中心站点 DNS 服务器可减少使关键域控制器 SRV 和 HOST 记录完全注册所需的跃点数。 中心站点中的域控制器往往获得最多的管理关注,通常在同一站点中具有最大的域控制器集合。 由于它们位于同一站点中,因此在彼此之间发生复制更改:

    • 在 Windows Server 2003 或更高版本中每隔 15 秒
    • 在 Windows 2000 Server 中每隔五分钟

    此行为使此类 DNS 记录 广为人知

    如果分支站点中的注册域控制器无法进行出站复制,则动态域控制器 SRV 和主机 A 和 AAAA 记录注册可能无法启用。

    成员计算机和服务器应继续将站点优化 DNS 服务器作为首选 DNS。 它们可能指向站点外 DNS 服务器,以提供额外的容错能力。

    最终目标是防止一切导致拒绝服务,同时平衡成本、风险和网络利用率,例如:

    • 复制延迟和复制失败
    • 硬件故障、软件故障
    • 操作实践
    • 短期和长期停电
    • 火灾、盗窃、洪水和地震
    • 恐怖事件
  • 例如,确保目标域控制器可以使用 DNS (解析源域控制器,避免回退) 。

    应确保域控制器能够成功将引导 CNAME 记录解析为托管当前和潜在源域控制器的记录。 这样做可以避免名称解析回退逻辑引入的高延迟。

    域控制器应指向以下 DNS 服务器:

    • 在 Windows 启动时可用。
    • 托管、转发或委托_msdcs。<当前和潜在源域控制器的林根域> 和主 DNS 后缀区域。
    • 可以解析当前 CNAME GUID 记录 (例如, dded5a29-fc25-4fd8-aa98-7f472fc6f09b._msdcs.contoso.com 当前和潜在的源域控制器的) 和主机记录。

    缺少、重复或过时的 CNAME 和主机记录都会导致此问题。 默认情况下,Microsoft DNS 服务器上未启用清理,这会增加过时主机记录的概率。 同时,DNS 清理的配置过于积极,导致从 DNS 区域过早清除有效记录。

  • 针对名称解析回退优化域控制器。

    无法正确配置 DNS,以便域控制器可以将域控制器 CNAME GUID 记录解析为 DNS 中的主机记录是常见的。 为确保 Active Directory 分区的端到端复制,Windows Server 2003 SP1 及更高版本的域控制器已修改为执行名称解析回退:

    • 从域控制器 CNAME GUID 更改为完全限定的主机名。
    • 从完全限定的主机名更改为 NetBIOS 计算机名称。

    目录服务事件日志中的 NTDS 复制事件 ID 2087 和 2088 指示:

    • 目标域控制器无法将域控制器 CNAME GUID 记录解析为主机记录。
    • 发生名称解析回退。

    可以配置 WINS、HOST 文件和 LMHOST 文件。 因此,目标域控制器可以解析当前和潜在源域控制器的名称。 在三种解决方案中,WINS 的使用更具可伸缩性,因为 WINS 支持动态更新。

    计算机的 IP 地址和名称不可避免地变得过时。 此问题会导致 HOST 和 LMHOST 文件中的静态条目随时间推移而无效。 发生此问题时,针对一个域控制器的查询可能会错误地解析到另一个域控制器。 网络跟踪中不会观察到名称查询。

  • 如果启动到已知错误的配置,请将 DNS 服务器服务的启动值更改为手动。

    如果在本文中讨论的已知错误配置中启动域控制器,请执行以下步骤:

    1. 将 DNS 服务器服务启动值设置为手动。
    2. 重新启动,等待域控制器播发。
    3. 重启 DNS 服务器服务。

    如果 DNS 服务器服务的服务启动值设置为手动,则 Active Directory 不会等待 DNS 服务器服务启动。

其他注意事项

  • 避免单一故障点。

    单一故障点的示例包括:

    • 将 DC 配置为指向单 DNS 服务器 IP
    • 将来宾虚拟机上的所有 DNS 服务器放置在同一物理主机计算机上
    • 将所有 DNS 服务器置于同一物理站点中
    • 限制网络连接,以便目标域控制器只有一个网络路径来访问 KDC 或 DNS 服务器

    安装足够的 DNS 服务器来实现本地、区域和企业范围的冗余性能,但管理负担不多。 DNS 通常是由 DNS 客户端和 DNS 服务器高度缓存的轻型操作。

    在现代硬件上运行的每个 Microsoft DNS 服务器每个服务器可以满足 10,000-20,000 个客户端。 在每个域控制器上安装 DNS 角色可能会导致企业中的 DNS 服务器过多。 这样做会增加成本。

  • 尽可能错开企业中 DNS 服务器的重启。

    • 安装某些修补程序、Service Pack 和应用程序可能需要重新启动。
    • 某些客户按计划 (每 7 天重启一次域控制器,每 30 天) 。
    • 以智能方式计划重新启动以及安装需要重新启动的软件。 这样做是为了防止同时重新启动目标域控制器指向的唯一 DNS 服务器或潜在的源复制伙伴进行名称解析。

    如果Windows 更新或管理软件正在安装需要重新启动的软件,请在目标域控制器上交错安装,以便域控制器指向的一半可用 DNS 服务器同时重新启动名称解析。

  • 在战略位置安装 UPS 设备,以确保 DNS 在短期停电期间的可用性。

  • 使用站点生成器增强 UPS 支持的 DNS 服务器。

    为了应对长时间的中断,一些客户部署了现场发电机,使关键服务器保持联机状态。 一些客户发现,发电机可以为数据中心的服务器供电,但不能为现场 HVAC 供电。 当内部计算机温度达到特定阈值时,缺少空调可能会导致本地服务器关闭。

更多信息

2010 年 5 月 10 日 Active Directory 开发团队进行测试:

DNS 等待 NTDS,在目录的初始复制完成之前无法启动。 这是因为最新的 DNS 数据可能尚未复制到域控制器。 另一方面,NTDS 需要 DNS 来解析复制的源域控制器的 IP 地址。 假设 DC1 指向 DC2 作为其 DNS 服务器,DC2 指向 DC1 作为其 DNS 服务器。 当 DC1 和 DC2 同时重新启动时,由于这种相互依赖关系,启动速度会很慢。 启动速度缓慢的根本原因是 DNSQueryTimeouts。

如果 DNS 服务器服务在 NTDS 启动时运行良好,则 NTDS 只接受两个 DNS 查询来解析源域控制器的 IP 地址:

  • 一个用于 IPv4
  • 另一个用于 IPv6 的

这些 DNS 查询几乎即时返回。

如果在 NTDS 启动时 DNS 服务器服务不可用,则 NTDS 需要发送 10 个 DNS 查询来解析 IP 地址:

  • 四 个表示基于 GUID 的名称
  • 完全限定名称的四个
  • 两个表示单标签名称

每个 DNS 查询的延迟由 DNSQueryTimeouts 控制。 默认情况下,DNSQueryTimeouts 设置为 1 1 2 4 4。 这意味着 DNS 客户端将等待 12 (1 + 1 + 2 + 4 + 4) 秒的 DNS 服务器响应。 每个命名上下文源都需要 120 秒来解析 IP 地址。 假设有五个命名上下文, (配置、架构、域、ForestDnsZones、DomainDnsZones) 和一个复制源。 在此方案中,NTDS 完成初始复制需要 850 (170 X 5) 秒或大于 14 分钟。

进行了多次测试来验证上述行为。

  • 当 DNS 服务器是联机的第三个域控制器时,重新启动域控制器。 对于每个源的每个命名上下文,我们有两个 DNS 查询,它们几乎即时完成:

    in I_DRSGetNCChanges, NC = CN=Configuration,DC=contoso,DC=com
    in getContextBindingHelper, pszAddress = dded5a29-fc25-4fd8-aa98-7f472fc6f09b._msdcs.contoso.com  
    in resolveDnsAddressWithFallback  
    GUID based DNS name  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:31:40.534  
    end   GetAddrInfoW: 22:31:40.534  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:31:40.534  
    end   GetAddrInfoW: 22:31:40.534
    
  • 同时重新启动 DC1 和 DC2。 DC1 使用 DC2 进行 DNS DC2 DC2 使用 DC1 用于 DNS。 对于每个源的每个命名上下文,我们有 10 个 DNS 查询,每个查询大约需要 12 秒:

    in I_DRSGetNCChanges, NC = CN=Configuration,DC=contoso,DC=com  
    in getContextBindingHelper, pszAddress = dded5a29-fc25-4fd8-aa98-7f472fc6f09b._msdcs.contoso.microsoft.com  
    in resolveDnsAddressWithFallback  
    GUID based DNS name  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:37:43.066  
    end   GetAddrInfoW: 22:37:55.113  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:37:55.113  
    end   GetAddrInfoW: 22:38:07.131  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:38:07.131  
    end   GetAddrInfoW: 22:38:19.161  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:38:19.176  
     end   GetAddrInfoW: 22:38:31.185  
    FQDN  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:38:31.200  
    end   GetAddrInfoW: 22:38:43.182  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:38:43.182  
    end   GetAddrInfoW: 22:38:55.191  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:38:55.191  
    end   GetAddrInfoW: 22:39:07.216  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:39:07.216  
    end   GetAddrInfoW: 22:39:19.286  
    NetBios  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:39:19.286  
    end   GetAddrInfoW: 22:39:31.308d  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 22:39:31.308  
    end   GetAddrInfoW: 22:39:43.324
    
  • 为了进一步研究 DNSQueryTimeouts 与慢启动之间的关系,DNSQueryTimeout 设置为 1 1 2 4 4, 使 DNS 客户端等待 31 (1 + 1 + 2 + 4 + 4) 秒。 在此测试中,等待时间为 31 秒:

    in I_DRSGetNCChanges, NC = CN=Configuration,DC=contoso,DC=com  
    in getContextBindingHelper, pszAddress = dded5a29-fc25-4fd8-aa98-7f472fc6f09b._msdcs.contoso.com  
    in resolveDnsAddressWithFallback  
    GUID based DNS name  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:06:48.143  
    end   GetAddrInfoW: 18:07:19.158  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:07:19.158  
    end   GetAddrInfoW: 18:07:50.162  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:07:50.162  
    end   GetAddrInfoW: 18:08:21.161  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:08:21.161  
    end   GetAddrInfoW: 18:08:52.158  
    FQDN  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:08:52.221  
    end   GetAddrInfoW: 18:09:23.231  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:09:23.231  
    end   GetAddrInfoW: 18:09:54.243  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:09:54.243  
    end   GetAddrInfoW: 18:10:25.239  
     in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:10:25.239  
    end   GetAddrInfoW: 18:10:56.243  
    NetBios  
    in GetIpVxAddrByDnsNameW  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:10:56.243  
    end   GetAddrInfoW: 18:11:27.244  
    in GetIpAddrByDnsNameHelper  
    start GetAddrInfoW: 18:11:27.244  
    end   GetAddrInfoW: 18:11:58.265