更改為 nsswitch.conf 後出現隨機 DNS 錯誤
我最近安裝了我的 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
行中刪除。在那之後,解決應該恢復正常。