为什么curl 无法解析URL,而drill 可以?

为什么curl 无法解析URL,而drill 可以?

我正在尝试配置我的计算机以使用本地 DNS 服务器解析某些域。 DNS服务器位于192.168.1.123,它本身能够正常解析所有内容。

在其他计算机上,我安装了dnscrypt-proxy并更改/etc/resolv.conf为:

nameserver 127.0.0.1
options edns0 single-request-reopen

我还确保它/etc/resolv.conf不会被 NetworkManager 覆盖。

然后我编辑/etc/dnscrypt-proxy/dnscrypt-proxy.toml以便用于forwarding_rules转发home.arpa到192.168.1.124。我在此 IP 上运行 GIT 服务,并且 192.168.1.123 处的 DNS 服务器配置为解析git.home.arpa为 192.168.1.124。想法是我可以打开git.home.arpa

当我使用host git.home.arpa或 时drill git.home.arpa,我的台式机、笔记本电脑和位于 192.168.1.123 的 DNS 服务器都返回正确的 IP 192.168.1.124。我也可以在 DNS 服务器日志中看到查询。

当我curl git.home.arpa在桌面和 DNS 服务器上执行此操作时,我看到了 GIT 服务的正确 HTML。但是,在我的笔记本电脑上,我得到了curl: (6) Could not resolve host: git.home.arpa.我也从浏览器得到同样的东西。

据我所知,笔记本电脑和台式机具有相同的配置。它们之间的以下文件是相同的:

  • /etc/resolv.conf
  • /etc/nsswitch.conf
  • /etc/dnscrypt-proxy/dnscrypt-proxy.toml
  • /etc/dnscrypt-proxy/forwarding-rules.txt

我尝试重新启动笔记本电脑,重新启动 NetworkManager 服务,重新启动 dncrypt-proxy。想必一定存在一些差异,因为一个在工作,另一个则没有,但我不知道在哪里。

如果主机和钻头可以解析域,为什么curl会无法解析域?我怎样才能找到问题所在?

答案1

原来笔记本电脑正在运行systemd-resolved。我对此感到惊讶,因为:

  • 里面什么也没有nsswitch.conf
  • 里面什么也没有resolv.conf
  • dnscrypt-proxy.service已安装并运行

所以我认为两个解析器不可能并行运行而不破坏 DNS。事实证明他们是。灵感来自https://unix.stackexchange.com/a/708899/217968我又看了一眼,确实在台式机上禁用了,在 DNS 服务器上禁用了,但在笔记本电脑上启用了。我纠正了这个问题:

systemctl stop systemd-resolved
systemctl disable systemd-resolved

我笔记本电脑上的 DNS 开始工作。

相关内容