什么会导致应用程序中的 DNS 变慢,但在 dig/nslookup 中却不会变慢?

什么会导致应用程序中的 DNS 变慢,但在 dig/nslookup 中却不会变慢?

从今年早些时候开始,我尝试访问新域名时经常会遇到 10-30 秒的延迟,有时访问以前访问过的域名也会有延迟。这种情况发生在多个程序中,包括 Firefox、Discord 的更新程序以及命令行 ssh 和 mosh。为了测试,我一直在使用它,ssh -vvvv因为它会告诉我何时开始和结束名称解析步骤。为了写这篇文章,我访问了以前没有访问过的文字域asdfasdf.com,但这个问题经常发生在许多不同的域和应用程序中。

在 Firefox 中打开时http://asdfasdf.com会显示一个空白选项卡,其中带有持续 10 多秒的忙碌动画,为了进一步排除故障,我在它完成之前将其关闭。

ssh -vvvv asdfasdf.com然后debug3: resolve_host: lookup asdfasdf.com:22暂停超过 10 秒。我按下 ctrl+c 继续进行故障排除。

dig asdfasdf.com立即生成相应的结果(十几个 A 记录),查询192.168.1.1哪个是我的本地路由器以及我所在网络中唯一的名称服务器/etc/resolv.conf

nslookup asdfasdf.com立即产生适当的结果,但随后暂停五秒钟并输出;; communications error to 192.168.1.1#53: timed out,暂停,重复,暂停,重复,总共输出三次,然后是最后一个;; no servers could be reached

dig @4.2.2.1 asdfasdf.com立即产生适当的结果(十几个 A 记录)。

nslookup asdfasdf.com 4.2.2.1立即产生适当的结果并且无错误退出

ssh -vvvv asdfasdf.com再次这样做,它到达debug3: resolve_host: lookup asdfasdf.com:22后暂停了 15 秒,然后继续debug3: ssh_connect_direct: entering,然后连接失败,因为这个任意域当然不执行 ssh。

我再次在 Firefox 中打开该域名,这一次选项卡仅空白约 5 秒钟,然后它开始加载页面。

我再次在 Firefox 中打开该域名,这次它立即开始加载。

我再做ssh -vvvv asdfasdf.com一次,同样延迟了 15 秒。

将我的/etc/resolv.conf名称服务器条目更改为4.2.2.1更改 dig 和 nslookup 的默认服务器,但不会影响尝试这些不同步骤的任何结果。

/etc/nsswitch.conf有一条线路hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns,我尝试过改变它hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns,但没有任何明显的效果。

在此过程中,我尝试添加一行来/etc/resolv.conf停止随每个 A 请求一起发送 AAAA 请求。现在我已经丢失了那行,但无论我当时尝试什么都没有明显的效果。

这个问题在重启和操作系统/软件包更新后持续了几个月。我在网上没有找到任何其他关于导致该问题的原因或如何排除故障的建议。

更新:

resolvectl statusFailed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.因为systemctl status systemd-resolved.service说服务已被禁用且不活动。systemctl enable systemd-resolved.servicesystemctl start systemd-resolved.service让它运行。

resolvectl status现在说如下:

Global
          Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
   resolv.conf mode: foreign
 Current DNS Server: 192.168.1.1
         DNS Servers 192.168.1.1
Fallback DNS Servers 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google 2606:4700:4700::1111#cloudflare-dns.com 2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google

Link 2 (enp37s0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlp38s0)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
       DNS Servers: 192.168.1.1

resolvectl query asdfasdf.com120 秒后超时,显示asdfasdf.com: resolve call failed: Connection timed out。仅作为控制测试,resolvectl query google.com立即产生六个 ip4v 和四个 ipv6 结果。

但是,启用后systemd-resolved.service似乎导致 Firefox 永远不会开始加载页面,因此我已停止并禁用它以进行进一步测试。

更新2:

wireshark 告诉我 ssh 正在发送 A 记录的 dns 请求并立即得到响应,然后在发送 AAAA 记录的请求后挂起并且没有得到响应。

进一步调查表明,在我的本地机器之外,ipv6 的任何部分都无法工作。ping -6 ::1可以工作,但ping -6对于任何已知的外部 ipv6 地址都失败。

我正在寻求完全禁用 ipv6,或者修复它,并将继续在这里排除故障,并在找到至少一个解决方案后最终发布答案。

相关内容