Dns

更改為 nsswitch.conf 後出現隨機 DNS 錯誤

  • February 17, 2022

我最近安裝了我的 EPSON L3150 列印機驅動程序,大約在同一時間,我開始在某些應用程序(ssh、nextcloud-client)中出現奇怪的(和隨機的)DNS 名稱解析錯誤,我只能通過重新啟動NetworkManager服務來修復:

systemctl restart NetworkManager

例如:

$ ssh example.mydomain
ssh: Could not resolve hostname example.mydomain: Name or service not known

另一個例子是 getent,它什麼也不返回,並以程式碼 2 退出:

$ getent hosts example.mydomain

$ echo $?
2

但 nslookup 工作正常:

$ nslookup example.mydomain
...
Name:   example.mydomain
Address: 192.168.0.10

我將其縮小到我的nsswitch.conf文件,我責怪我的列印機安裝程序更改了它。我發現了nsswitch.conf.bak一個nsswitch.conf在安裝列印機驅動程序的同時創建的dnf install epson/*.rpm

該文件在主機行中有以下更改:

-hosts:      files dns myhostname
+hosts:      files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns

所以問題是,為什麼“新”配置會如此隨機地失敗?我該如何預防?我不認為僅僅恢復原始文件是一個解決方案,因為新文件似乎是自動生成的,它在頂部這麼說:

由 authselect 於 2022 年 2 月 12 日星期六 18:53:06 生成

解除安裝驅動程序也不是解決方案。

編輯

罪魁禍首似乎是systemd-resolved。我的網路配置由 NetworkManager 管理,我設置了兩個 DNS:

$ nmcli con show my-lan
...
ipv4.dns 192.168.0.1 8.8.8.8

似乎每當我的電腦從睡眠中醒來時,NetworkManager 都會退回到第二個 DNS:

$ systemd-resolve --status
...
Link 2 (enp39s0)
   Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
        Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
      DNS Servers: 192.168.0.1 8.8.8.8
       DNS Domain: mydomain

從而導致systemd-resolve example.mydomain失敗(因為 8.8.8.8 無法解析我的域):

查詢:解析呼叫失敗:找不到“example.mydomain”

我猜這是 NetworkManager 中的錯誤?

mdns4_minimal [NOTFOUND=return]愛普生列印機的多播 DNS 需要。

resolve [!UNAVAIL=return]``systemd-resolved通過(參見https://www.freedesktop.org/software/systemd/man/nss-resolve.html )啟用名稱解析。

如果命令systemctl status systemd-resolved返回Unit systemd-resolved.service could not be found.,您可以安全地resolve [!UNAVAIL=return]hosts行中刪除。在那之後,解決應該恢復正常。

引用自:https://unix.stackexchange.com/questions/690713