我有一台电脑和一台笔记本电脑,两者都运行 127.0.0.53 作为其 DNS 服务器。一台计算机在当前 DNS 服务器上运行良好,但笔记本电脑收到“域名解析暂时失败”错误消息。当我将 /etc/resolv.conf 中的 DNS 服务器更改为 8.8.8.8 时,它再次开始工作。
为什么 DNS 服务器不能仅在一台计算机上工作?
编辑:我已确认已安装 libnss_dns.so.2 (我使用的是 ubuntu)。
我已遵循本指南 https://manpages.debian.org/bullseye/libnss-resolve/libnss_resolve.so.2.8.en.html 并修改了我的 nsswitch.conf (没有注释)
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
我已将主机行更改为
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: mymachines resolve [!UNAVAIL=return] files
myhostname dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
但当我 ping google.com ping: google.com: Name or service notknown 时出现错误
Edit2:我在笔记本电脑上运行resolvctl并得到
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (wlo1)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Link 3 (ipv6leakintrf0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: ::1
DNS Servers: ::1
DNS Domain: ~.
Edit3:经过一些更新后它可以自动正常工作。
答案1
127.0.0.53不是真正的DNS服务器;它是systemd-resolved
Linux 系统的新 DNS 解析器(= 客户端)实现的向后兼容接口。
使用它的预期方法是通过libnss_resolve.so.2
库,即放置resolve
而不是放在文件的行dns
上。如果你这样做,大多数程序都会hosts:
/etc/nsswitch.conf
完全忽略/etc/resolv.conf
并将直接systemd-resolved
使用 Unix 套接字进行联系/run/systemd/resolve/io.systemd.Resolve
。
一些经过专门编码而不依赖于 C 库的标准名称解析服务的程序将/etc/resolv.conf
自行读取,以查找要使用的 DNS 服务器。为了捕获这些程序,systemd-resolved
通常会充当 127.0.0.53 中的 DNS 解析器服务器/代理,并在执行此操作时自动插入nameserver 127.0.0.53
一行。/etc/resolv.conf
但是,如果您不需要此功能,可以关闭它。
如果您(或您的发行版)错过了安装/使用的步骤libnss_resolve.so.2
,并且您/etc/nsswitch.conf
仍然有经典版本dns
,hosts:
那么所有 DNS 访问都会通过 127.0.0.53 向后兼容接口,这并不那么高效。
使用 时systemd-resolved
,使用该resolvectl
命令查看系统使用的实际 DNS 服务器。
我猜测您的两台计算机之间的实际 DNS 服务器设置是不同的,并且您只查看了/etc/resolv.conf
哪一个不再使用时要看的地方systemd-resolved
。
答案2
正如已经指出的,如果您在计算机上运行新的系统化 Linux,systemd-resolved
则可能是来自“光明的未来”(理解黑暗)的另一个垃圾软件,可能会导致您的问题。
它依靠几堆黑客来劫持 DNS 解析,这无法真正解决,因为那是停止问题级别的问题。
它还(无意)故意混淆多个网络解析名称空间并将其折叠为新的名称空间,这可能会也可能不会将业务合并在一起。
你必须选择:
- 您将学习
systemd-resolved
如何正确配置它,并成为它的测试版错误测试人员,寻找并啄食每个错误...... - 您将永远禁用它,并将使用
/etc/resolv.conf
旧的脾气暴躁的管理方式,因为它永远是预期的。