TL;DR:确保您的 Pi-Hole 没有限制您的请求速率。

TL;DR:确保您的 Pi-Hole 没有限制您的请求速率。

在过去的 3 个月中,我一直在努力解决家庭服务器上的一个随机问题,DNS 解析会在短时间内(10-60 秒)毫无原因地中断。通过主机名执行 ping 会导致ping: signal.org: Temporary failure in name resolution,并且任何尝试 DNS 查找的服务几乎立即失败。当这些中断发生时,没有systemd-resolveddnsmasq登录/var/log/syslog,但其他服务会报告问题。例如:

ddclient[573749]: message repeated 14 times: [ WARNING: cannot connect to checkip.dyndns.org:80 socket: IO::Socket::INET: Bad hostname 'checkip.dyndns.org']

dockerd[1811]: time="2021-04-29T13:50:19.080258289-05:00" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: [nameserver 8.8.8.8 nameserver 8.8.4.4]"

rsyslogd: DNS error: Can't resolve "<local_domain>" [v8.2001.0]

whoopsie[1816]: [17:38:15] Sent; server replied with: Couldn't resolve host name

当前设置:Ubuntu 20.04.2,Netplan设置为静态 IP,dnsmasq是 DNS 服务器,dns-forward-max=1024systemd-resolved禁用并停止。服务器是 Ryzen 3950X,64GB RAM,操作系统安装在 NVMe 驱动器上。服务器运行许多 webapp 类型的服务,但 DNS 请求最嘈杂的很容易matrix-synapse

我尝试过的事情:

· 我已经重新启动了该systemd-resolved服务数百次,禁用了该服务十几次,关闭/打开了存根解析器,并且删除并重新创建了符号链接。

· 我使用 设置了静态 IP netplan,并使用 /etc/NetworkManager/NetworkManager.conf 进行操作。

· 我安装了piholeunbound通过apt仅为服务器本身。 (pihole当前已卸载,unbound正在运行但没有任何内容使用它来解决。

· 我已安装dnsmasq并完全禁用systemd-resolved

· 我已在服务器上完全禁用 IPv6。

· 我已经在 /etc/security/limits.conf 中设置了* soft nofile 1048576和,并且显示。* hard nofile 1048576/proc/sys/fs/file-max9223372036854775807

我怀疑问题出在 Docker 上,但我不知道如何验证这一点。我目前有 38 个 Docker 容器在运行,当我sudo lsof -i :53在问题发生时运行时,我会看到:

thomcat@servername:~$ sudo lsof -i :53
COMMAND      PID            USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
dockerd     1623            root  217u  IPv4 1577888      0t0  UDP localhost:46003->localhost:domain 
dockerd     1623            root  226u  IPv4 1605902      0t0  UDP localhost:50192->localhost:domain 
dockerd     1623            root  227u  IPv4 1610070      0t0  UDP localhost:52637->localhost:domain 
dockerd     1623            root  228u  IPv4 1605907      0t0  UDP localhost:55021->localhost:domain 
dockerd     1623            root  229u  IPv4 1618981      0t0  UDP localhost:57618->localhost:domain 
dockerd     1623            root  230u  IPv4 1610081      0t0  UDP localhost:35776->localhost:domain 
dockerd     1623            root  231u  IPv4 1610086      0t0  UDP localhost:60635->localhost:domain 
dockerd     1623            root  232u  IPv4 1589998      0t0  UDP localhost:43036->localhost:domain 
dockerd     1623            root  234u  IPv4 1602056      0t0  UDP localhost:58408->localhost:domain 
dockerd     1623            root  235u  IPv4 1614011      0t0  UDP localhost:43421->localhost:domain 
dockerd     1623            root  236u  IPv4 1589999      0t0  UDP localhost:60957->localhost:domain 
dockerd     1623            root  237u  IPv4 1597695      0t0  UDP localhost:53026->localhost:domain 
dockerd     1623            root  242u  IPv4 1590000      0t0  UDP localhost:41842->localhost:domain 
dockerd     1623            root  244u  IPv4 1597696      0t0  UDP localhost:49179->localhost:domain 
dockerd     1623            root  246u  IPv4 1572736      0t0  UDP localhost:46471->localhost:domain 
dockerd     1623            root  266u  IPv4 1616008      0t0  UDP localhost:35262->localhost:domain 
dockerd     1623            root  267u  IPv4 1616009      0t0  UDP localhost:54501->localhost:domain 
dockerd     1623            root  268u  IPv4 1579887      0t0  UDP localhost:33130->localhost:domain 
dockerd     1623            root  269u  IPv4 1579888      0t0  UDP localhost:33491->localhost:domain 
dockerd     1623            root  270u  IPv4 1613280      0t0  UDP localhost:49504->localhost:domain 
dockerd     1623            root  273u  IPv4 1579890      0t0  UDP localhost:43801->localhost:domain 
dockerd     1623            root  278u  IPv4 1613283      0t0  UDP localhost:44804->localhost:domain 
dockerd     1623            root  279u  IPv4 1568692      0t0  UDP localhost:39425->localhost:domain 
dockerd     1623            root  293u  IPv4 1577890      0t0  UDP localhost:52194->localhost:domain 
dockerd     1623            root  296u  IPv4 1605903      0t0  UDP localhost:50866->localhost:domain 
dockerd     1623            root  319u  IPv4 1605904      0t0  UDP localhost:58574->localhost:domain 
dockerd     1623            root  341u  IPv4 1605910      0t0  UDP localhost:37123->localhost:domain 
dockerd     1623            root  342u  IPv4 1610067      0t0  UDP localhost:48734->localhost:domain 
dockerd     1623            root  343u  IPv4 1610069      0t0  UDP localhost:35580->localhost:domain 
dockerd     1623            root  344u  IPv4 1605905      0t0  UDP localhost:45133->localhost:domain 
dockerd     1623            root  345u  IPv4 1618982      0t0  UDP localhost:53052->localhost:domain 
dockerd     1623            root  346u  IPv4 1589996      0t0  UDP localhost:56714->localhost:domain 
dockerd     1623            root  347u  IPv4 1614009      0t0  UDP localhost:37216->localhost:domain 
dockerd     1623            root  348u  IPv4 1589997      0t0  UDP localhost:38032->localhost:domain 
dockerd     1623            root  349u  IPv4 1618984      0t0  UDP localhost:53714->localhost:domain 
dockerd     1623            root  350u  IPv4 1610084      0t0  UDP localhost:42922->localhost:domain 
dockerd     1623            root  351u  IPv4 1577893      0t0  UDP localhost:32865->localhost:domain 
dockerd     1623            root  352u  IPv4 1608975      0t0  UDP localhost:58307->localhost:domain 
dockerd     1623            root  353u  IPv4 1597699      0t0  UDP localhost:33564->localhost:domain 
dockerd     1623            root  354u  IPv4 1608977      0t0  UDP localhost:58235->localhost:domain 
dockerd     1623            root  355u  IPv4 1577896      0t0  UDP localhost:46068->localhost:domain 
dockerd     1623            root  356u  IPv4 1597702      0t0  UDP localhost:32827->localhost:domain 
systemd-r 106795 systemd-resolve   12u  IPv4  980615      0t0  UDP localhost:domain 
systemd-r 106795 systemd-resolve   13u  IPv4  980616      0t0  TCP localhost:domain (LISTEN)
http      165553            _apt    3u  IPv4 1611999      0t0  UDP localhost:54478->localhost:domain 

更多注意事项:

· 上游 DNS 服务器是运行 pihole 的 Raspberry Pi 3 B+。 我的网络上没有其他任何地方存在这些 DNS 解析问题,因此问题不在于 pihole。

·ssh当此问题发生时,与服务器的会话不会中断。

·ping当问题发生时,外部 IP 工作正常。

 

我一直在绞尽脑汁想弄清楚这个问题。如果有人有任何想法,我很乐意听听。

答案1

您好,欢迎来到论坛!

也许值得考虑一下,您的问题实际上并不是出在 DNS 上,而可能是由于某种原因,您的网络连接不可靠,导致一些数据包丢失。ssh 会话能够继续存在这一事实并没有告诉我们太多信息,因为 ssh 会话使用 TCP,因此即使丢失了许多数据包,它也能正常工作。另一方面,DNS 使用 UDP,因此如果一些 UDP 数据包(传入或传出)丢失,则可能导致 DNS 故障。

像您那样使用 ping 进行测试是个好主意,可能值得多做几次,例如每秒更频繁地 ping 一次,以查看是否有时会出现数据包丢失以及丢失的时间是否与 DNS 问题相关。还值得注意的是,ping 涉及不同的协议 (ICMP),可能发生 UDP 出现问题但 ping 仍然有效的情况。那么可能值得使用 UDP 运行测试,例如可以使用工具来完成iperf3

如果您自己控制 DNS 服务器,那么您可以监视它以查看 DNS 请求是否到达,以及查看 DNS 服务器是否发送了答复。

您还可以尝试使用类似tcpdump或的方法在本地监控传入和传出的网络流量tshark,以验证 DNS 请求是否已发送,并检查是否可以看到来自 DNS 服务器的回复。

无论如何,这些都是一些想法,我希望其中一些能有用。祝你好运!

答案2

TL;DR:确保您的 Pi-Hole 没有限制您的请求速率。

今天,我终于在 Google 上搜索到了“pihole 速率限制”,结果最近的博客文章提到:

...我们决定在 FTL 本身中实现可定制的速率限制。它默认采用相当保守的限制,即每个客户端在 60 秒内最多允许 1000 个查询。

我当时非常失控,完全地错过了这个消息。我打开功能请求使用 Pi-Hole 在发生这种情况时添加日志条目,希望可以避免未来的家庭系统管理员抓狂。

在 60 秒内执行 1,000 个查询可能听起来很多,但对于 38 个活跃的 Docker 容器(和尤其瞭望塔matrix-synapse)很快就被填满了。

相关内容