DNS サーバーは 1 台のコンピュータでのみ実行できません。

DNS サーバーは 1 台のコンピュータでのみ実行できません。

コンピュータとラップトップがあり、どちらもDNSサーバーとして127.0.0.53を実行しています。 1台のコンピュータが現在DNSサーバーで正常に実行されていますが、ラップトップに「ドメイン名解決が一時的に失敗しました」というエラーメッセージが表示されます。 /etc/resolv.conf の DNS サーバーを 8.8.8.8 に変更すると、再び機能し始めました。

DNSサーバーが1台のコンピュータでしか機能しないのはなぜですか?

編集: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

ただし、google.com ping: google.com: Name or service notknown ping を行うとエラーが発生します。

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.confUnixソケットを使用して直接systemd-resolved接続します/run/systemd/resolve/io.systemd.Resolve

Cライブラリの標準の名前解決サービスに依存しないように、特別にコーディングされている一部のプログラムは、使用する/etc/resolv.confDNSサーバーを見つけるために自分自身で読み取ります。これらのプログラムをキャッチするには、systemd-resolved127.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

おすすめ記事