DNS 服务器无法仅在一台计算机上运行

DNS 服务器无法仅在一台计算机上运行

我有一台电脑和一台笔记本电脑,两者都运行 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-resolvedLinux 系统的新 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仍然有经典版本dnshosts:那么所有 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旧的脾气暴躁的管理方式,因为它永远是预期的。

相关内容