DNSの奇妙な問題:ドリルは機能しますが、getentホストは機能しません。

DNSの奇妙な問題:ドリルは機能しますが、getentホストは機能しません。

私はRaspberry Pi 4でArch Linux ARMを実行しています。現在、ドメイン確認の問題があります。 「ユーザースペース」アプリケーション(ping、Webブラウザなどを含む)はホストにアクセスできますが、ホストを確認できません。https://1.1.1.1クロムから。ドリルビットはうまく機能しますが(?!)はgetent hosts機能しません。私は(編集を通して)オーバーライドして/etc/resolv.conf使ってみましたが、役に立ちませんでした。どんなアイデアがありますか? (期待通りに動作します)resolvconf -u/etc/resolvconf.conf/etc/hosts

$ cat /etc/resolv.conf 
domain lan
nameserver 1.1.1.1

$ drill unix.stackexchange.org
;; ->>HEADER<<- opcode: QUERY:, rcode: NXDOMAIN, id: 45971
;; flags qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;; unix.stackexchange.org.    IN       A

;; ANSWER SECTION:
unix.stackexchange.org. 14400   IN    CNAME    stackexchange.org.
stackexchange.org.      14400   IN    A        67.227.226.240

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 111 msec
;; SERVER: 192.168.42.129
;; WHEN: Tue Nov 26 13:09:11 2019
;; MSG SIZE rcvd: 70
$ grep hosts /etc/nsswitch.conf
hosts: files mymachines myhostname resolve [!UNAVAIL=return] dns

答え1

最新のブラウザはDNS-over-HTTPS(クロムFirefoxブラウザ)。したがって、基本オペレーティングシステムとは完全に独立して有効なホスト名解決を持つことができます。

つまり、nsswitch.conf既存のDNSベースの検索の前に試みることを指定します。resolve要求されたデータがない場合、または一時エラーコードが報告された場合は、検索結果の失敗として扱われます。実行して、どのDNSサーバーが使用されているかを確認できます。systemd-resolvedresolv.confdnssystemd-resolvedsystemd-resolvedresolvectl status

このコマンドはデフォルトのネームサーバーをdrill明示的に探します。それ以外の場合は、タスク全体をスキップし、すべてのタスクを独自に実行します。resolv.confnsswitch.conf

(に指定すると、リダイレクトが許可されているプログラムは明示的に無視され、systemd-resolved他のネットワークインターフェイス用に異なるDNSサーバーを設定できるためです。)resolv.confdrillsystemd-resolvednameserver 127.0.0.53resolv.confsystemd-resolved

だから何が起こっているのか私の説明は次のとおりです。

  • Chromium: DNS-over-HTTPS を使用しているため動作します。
  • drill:スキップしてnsswitch.conf直接見るために機能しますresolv.conf
  • デフォルトでは、その他すべて: で指定されたメカニズムを使用してnsswitch.confクエリを終了します。systemd-resolved何らかの理由で機能しないDNS設定があるようです(要求がファイアウォールによってブロックされているか、非協力的なDNSサーバーと通信している可能性がありますか?)。 DNS情報を取得できません。resolv.confこれらのプログラムは、「永続失敗」結果コードを返そうとする場合にのみ指定されたDNSサーバーを使用します。systemd-resolved現時点では、このようなことは起こりません。

mymachinesおそらくnsswitch.conf以下を指しているようです。このホスト名解決モジュールローカルVMやその他の項目を自動的に確認しますsystemd-machined。ローカルではない名前の解決には影響しません。

同様にmyhostname、以下を参照できます。このホスト名解決モジュールこれにより、ネットワーク接続がなくても、現在のローカルホスト名、名前、およびlocalhost名前localhost.localdomainが常に解決されます。_gateway

関連情報