resolv.conf と systemd-resolved: ドメインの次のサーバーを照会しても応答が見つからない

resolv.conf と systemd-resolved: ドメインの次のサーバーを照会しても応答が見つからない

私はラップトップ用にシンプルなカスケード DNS 解決アルゴリズムを構築しようとしています。

  • DHCPによって提供されるサーバーを照会する
  • 見つからない/失敗しましたか? 8.8.8.8 とその仲間を照会してください
  • 見つからない/失敗しましたか? 127.ABC でローカル dnsmasq をクエリします

現在のところ、前のサーバーが何らかの理由で失敗した場合にのみ次のサーバーが要求されるようですが、空の応答が返された場合は、解決プロセスが停止します。

Linux 搭載マシンに、カーネル メカニズムまたは systemd-resolved を介して、上記のカスケード方式を強制的に実行させることは可能ですか? リクエストを dnsmasq 経由でルーティングすることで確実に可能です (最初のserver=ディレクティブで systemd-resolved を設定して、クエリを DHCP 提供のサーバーに転送します)。ただし、できるだけディストリビューションをそのまま維持できる、より簡単な方式を採用したいと思います。

答え1

残念ながら、これは DNS の動作方法ではありません。他のサーバーにクエリが実行される唯一のタイミングは、定義済みの前のサーバーが応答しない場合です。応答が NXDOMAIN であっても、すべての応答が応答です。Query Denied の応答であっても応答です...

答え2

結局のところ、私のニーズを満たす非常に似たことは、逆の方法で実行できます (ドメインが重複していないため)。必要な機能は dnsmasq 自体にあり、次の方法で必要なことを実現できます。

  1. 127.0.0.53でsystemd-resolvedを起動する

  2. dnsmasq.confに必要なルールを追加する

    address = /banana.services/127.0.0.1
    address = /mango.services/127.0.0.1
    
  3. systemd-resolved およびグローバル dns のフォールバック サーバーを使用して dnsmasq.conf を完成させます。

    server = 127.0.0.53
    server = 8.8.8.8
    server = 8.8.4.4
    server = 1.1.1.1
    
  4. 出来上がり - これで*、dnsmasq は最初にローカルオーバーライドを提供し、次にローカル DNS を調べ、最後に、これも何も返さない場合は、よく知られている DNS サーバーのリストを照会します。

* nsswitch.conf では解決順序の変更も必要になる場合があります。

関連情報