排查与 DNS 转发器相关的 DNS 名称解析失败问题

你已将转发器、条件转发器或根提示配置为对外部名称执行名称查找。 但是,不能使用 nslookupResolve-DnsName. 本文介绍如何排查与域名系统(DNS)转发器相关的名称解析失败问题。

症状分析

  1. 检查无法解析名称的客户端是外部名称还是内部客户端。
    如果问题特定于内部域或外部名称,此信息可帮助你查看 DNS 服务器上的域特定配置。

  2. 检查所有客户端是否都面临此问题,还是仅针对特定客户端。
    这样做有助于隔离问题是否特定于 DNS 转发服务器。

  3. 检查 DNS 服务器。

    • 如果名称解析从客户端失败,请检查名称解析是否也从配置了首选 DNS 服务器失败。
    • 检查解析是否从 DNS 服务器本身失败。 如果是这样,则可以排除客户端或客户端与 DNS 服务器之间的网络任何问题。

    显示 DNS 转发器工作原理示例的屏幕截图。

故障排除流程图

故障排除流程图的可视化关系图。

疑难解答步骤

步骤 1:检查客户端与 DNS 服务器之间的网络连接

  1. 验证 DNS 配置。 ipconfig /all在客户端上运行并确认配置了正确的 DNS 服务器 IP。 如果不正确,请使用以下命令对其进行配置:

    Set-DnsClientServerAddress -InterfaceAlias "Interface-Name" -ServerAddresses ("IP1")
    
  2. 检查 UDP 端口 53 通信。 确保允许客户端与 DNS 服务器之间的 UDP 端口 53 通信。

  3. 执行从客户端到 DNS 服务器的 ping 测试,反之亦然,以确保基本的网络连接。

步骤 2:检查 DNS 服务器配置

请按照以下步骤验证是否已正确配置此 DNS 服务器,以便能够解析不是本地名称本身。

  1. 检查是否为有问题的域配置了条件转发器:

    Get-DnsServerZone -Name <domainname>
    
  2. 如果未找到条件转发器,请检查是否配置了常规转发器:

    Get-DnsServerForwarder
    

    验证 Useroothints 是否设置为 TRUE。

  3. 如果未配置转发器,请检查根提示:

    Get-DnsServerRootHint
    

如果未配置任何名称,则名称解析应失败。 如果是内部域,则需继续创建条件转发器;如果是外部域(最好)创建转发器。

注意

条件转发器或转发器(即 DNS 服务器)需要具有名称的记录,或需要配置为解析名称。

步骤 3:检查 DNS 服务状态和连接性

  1. 确保 DNS 服务器服务同时在转发和转发器 DNS 服务器上运行:

    Get-Service -Name DNS
    

    如果服务未运行,请启动该服务:

    Start-Service -Name DNS
    
  2. 确保允许 DNS 转发服务器与转发器服务器之间的 UDP 端口 53 通信。

步骤 4:收集网络捕获以跟踪 DNS 数据包

在客户端计算机上捕获网络之前,始终建议清除 DNS 客户端缓存:

ipconfig /flushdns

然后,使用以下步骤收集网络捕获:

  1. 在客户端、DNS 服务器和转发器上启动网络捕获工具(例如 Wireshark)。
  2. 在客户端上执行 nslookup <name> 以重现失败。
  3. 停止捕获并查看跟踪。 筛选 UDP 端口 53 以查看相关的 DNS 流量。

分析方案。

以下部分列出了可能会遇到的几种方案。 这些方案涉及条件转发器配置,但如果处理标准转发器,则故障排除步骤相同。

方案 1:网络延迟或超时

DNS 名称服务器 192.168.10.10 将查询转发到第一个转发器 192.168.5.5。 由于网络延迟或中间网络问题,响应不会在 ForwarderTimeout 期间到达 DNS 服务器。 因此,DNS 服务器将查询转发到其配置的下一个转发器,即 192.168.5.6。 同样,由于延迟或中间网络问题,响应不会到达 DNS 服务器。 由于 DNS 服务器无法提取查询 nodeA.contoso.com的响应,因此它会向客户端发送“服务器失败”响应。

DNS 转发器发生网络延迟或超时时网络流的屏幕截图。

解决方法:与网络团队协作以解决延迟问题。 如果预计延迟,请确保 DNS 服务器有足够的时间等待条件转发器做出的响应,然后再通过增加 ForwarderTimeout 和 RecursionTimeout 时间段来超时。

为此,请参阅 NET:DNS:转发器和条件转发器解析超时

方案 2:转发器拒绝的查询

DNS 名称服务器 192.168.10.10 将查询转发到条件转发器 192.168.5.5。 在此服务器上,如果有任何策略配置为拒绝或拒绝特定记录或区域的查询,则条件转发器将使用“拒绝”响应响应响应转发 DNS 名称服务器。 现在,DNS 服务器将反过来将此错误转发到客户端,因为服务器失败。 DNS 服务器不会联系第二个条件转发器,因为我们已收到第一个条件转发器(即使这是错误响应)

解决方法:如果转发器是Microsoft Windows DNS 服务器,请检查在条件转发器上配置的任何 DNS 查询解析策略,以“拒绝”区域 fab.com 或某些记录的查询,例如 NodeA.fab.com。 可以使用命令 get-dnsserverqueryresolutionpolicy获取已配置策略的列表。 为此,请参阅 Get-DnsServerQueryResolutionPolicy

如果不应放置任何此类策略,请将其删除以解决问题。

如果是第三方 DNS 服务器,请联系相应的供应商。

方案 3:转发器上缺少记录

DNS 名称服务器 192.168.10.10 将查询转发到第一个条件转发器 192.168.5.5。 在条件转发器上,区域下fab.com的名称没有主机 A 记录NodeA。 在这种情况下,条件转发器使用“名称错误”响应响应响应 DNS 服务器。 然后,DNS 服务器会将相同的响应转发给客户端。 DNS 服务器不会在此处联系第二个条件转发器,因为我们已收到来自第一个条件转发服务器的响应。 通常,如果发生这种情况,则会看到某些名称解析失败的症状,不一定是域的所有名称 fab.com

转发器上缺少记录时网络流的屏幕截图。

解决方法:为相关区域的转发器注册缺失记录,无论是静态还是动态。

数据收集

如果需要Microsoft支持的帮助,建议在联系Microsoft支持人员之前收集有关问题的信息。

  1. 按照 TroubleShootingScript 工具集简介(TSS)提供的步骤,使用 TSS 工具下载和收集日志。
  2. 运行以下命令,在受影响的计算机上启用日志收集:
    • 在 DNS 服务器上:

      .\TSS.ps1 -Scenario NET_DNSsrv
      
    • 在 DNS 客户端上:

      .\TSS.ps1 -Scenario NET_DNScli