私はラップトップ用にシンプルなカスケード DNS 解決アルゴリズムを構築しようとしています。
- DHCPによって提供されるサーバーを照会する
- 見つからない/失敗しましたか? 8.8.8.8 とその仲間を照会してください
- 見つからない/失敗しましたか? 127.ABC でローカル dnsmasq をクエリします
現在のところ、前のサーバーが何らかの理由で失敗した場合にのみ次のサーバーが要求されるようですが、空の応答が返された場合は、解決プロセスが停止します。
Linux 搭載マシンに、カーネル メカニズムまたは systemd-resolved を介して、上記のカスケード方式を強制的に実行させることは可能ですか? リクエストを dnsmasq 経由でルーティングすることで確実に可能です (最初のserver=
ディレクティブで systemd-resolved を設定して、クエリを DHCP 提供のサーバーに転送します)。ただし、できるだけディストリビューションをそのまま維持できる、より簡単な方式を採用したいと思います。
答え1
残念ながら、これは DNS の動作方法ではありません。他のサーバーにクエリが実行される唯一のタイミングは、定義済みの前のサーバーが応答しない場合です。応答が NXDOMAIN であっても、すべての応答が応答です。Query Denied の応答であっても応答です...
答え2
結局のところ、私のニーズを満たす非常に似たことは、逆の方法で実行できます (ドメインが重複していないため)。必要な機能は dnsmasq 自体にあり、次の方法で必要なことを実現できます。
127.0.0.53でsystemd-resolvedを起動する
dnsmasq.confに必要なルールを追加する
address = /banana.services/127.0.0.1 address = /mango.services/127.0.0.1
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
出来上がり - これで*、dnsmasq は最初にローカルオーバーライドを提供し、次にローカル DNS を調べ、最後に、これも何も返さない場合は、よく知られている DNS サーバーのリストを照会します。
* nsswitch.conf では解決順序の変更も必要になる場合があります。