
リクエストホストの送信元IPおよび/またはMACに基づいてDNSクエリを別のアップストリームフォワーダに転送するようにLinuxシステムでBINDを設定するにはどうすればよいですか?
たとえば、ネットワーク上の一部のホストからOpenDNSへ、他のホストではGoogleへ、他のすべてのホストではISPにDNSクエリを送信したいとします。
答え1
解決策は「ビュー」をバインドすることです。送信元または宛先IPに基づいてフィルタリングし、要求をビューにルーティングできます。まったく異なるDNSゾーン、フォワーダー、およびその他の処理オプションを提供できます。
https://kb.isc.org/article/AA-00851/0/Understanding-views-in-BIND-9-by-example.html
答え2
私は同じユースケースを持っており、次のように行います(少し複雑ですがうまくいきます)。
- ルータは、DoT クライアント経由で TLS 経由で DNS を実行し、nextdns.io に転送します。私はこのサービスを通じて広告やその他のアイテムをブロックします。
- 内部Linuxシステムには、同じシステム上の異なる内部IPにバインドされた2つのdnsmasqコンテナがあります。彼らはクエリをルータに転送し、TLSを介してインターネットに転送します。
- 1つのdnsmasqは大人のDNS + DHCPを行い、2番目は子供のDNSのみを行います。 1 つ目は、要求クライアントの MAC アドレスに基づいて DHCP 応答に異なる DNS オプションを設定します。私は特別に2番目の制限されたdnsmasqコンテナのDNSをインポートするように子供のデバイスを設定し、大人は他のものをインポートするように設定しました。
- 2番目のdnsmasqコンテナは、制限された子供向けのドメインセットのみを提供し、残りのドメインについては0.0.0.0を返します。
しかし、ハードコーディングされた8.8.8.8または同様の不良クライアントを処理するために、ルータを通過するすべての要求がTLSを通過するように強制的にいくつかのIPテーブルも設定しました。