我正在尝试配置我的计算机以使用本地 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 开始工作。