ソースIPまたはMACに基づいてさまざまなDNSフォワーダを使用する方法は?

ソースIPまたはMACに基づいてさまざまなDNSフォワーダを使用する方法は?

リクエストホストの送信元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テーブルも設定しました。

関連情報