dnsmasqの一行は名前に対してNXDOMAINを返すことができ、仕組みはそれだけです。HTMLを読むことも、リクエストのパスを調べることも、アプリケーションがすでに開いた接続をどう使うかを見ることもありません。したがってブラウザ拡張と比べることは、二つの異なる仕事を比べることになります。一方は名前が解決するかを決め、もう一方はその後に何が起きるかを決めます。

名前フィルターが実際に制御するもの

最後のスラッシュの後に何も置かないaddress=/metrics.example/オプションは、その名前とサブドメインに対してリゾルバーがNXDOMAINを返すようにします。アドレスを空のままにするのが重要な点です:無関係な代替サーバーへクライアントを送ることも、ループバックアドレスを実際の宛先に見せかけることも避けられます。dnsmasqのマニュアルはこの形をリダイレクトではなく否定応答として説明しています。

ルールができることはすべて、その一つの判断から導かれます。このリゾルバーに問い合わせるクライアントは否定応答を受け取り、別のリゾルバーに問い合わせるクライアントはそのリゾルバーが返すものを受け取ります。フィルターは、アプリケーションが使うはずだったパス、クエリ文字列、アカウントについて何も知りません。

この粒度が重要なのは、一つのホスト名がしばしば複数の用途を兼ねるからです。サインインのエンドポイント、画像、トラッキングが同じドメインを共有することがあり、名前ごと消すルールはワークフローまで消してしまう可能性があります。名前レベルのポリシーはそのトレードオフを受け入れるか、より狭い名前を選ぶ必要があります。

クライアント側ブロッカーとの違い

ブラウザ拡張はリクエストが出る前に見るため、URLのパスを照合し、特定のリクエストを取り消し、結果を表示したはずの要素を隠せます。example.com/articleを許可しながらexample.com/ads/を拒否でき、これはどのDNS応答にも表現できません。このパス単位の視点こそ、リゾルバーには決してない能力です。一つのツール向けに作られたフィルターリストが別のツールで同じように振る舞うことはほとんどないのも、同じ理由です。

代償は範囲です。その保護は一つのブラウザ、一つのプロファイル、一つの端末の内側にあり、利用者が別のアプリケーションに移れば消えます。ゲートウェイに設定したDNSフィルターは、ゲートウェイのリゾルバーを使うすべての端末を対象にし、拡張をインストールできない端末も含みます。

どちらの仕組みも単独では完全ではありません。DNSフィルターはページがすでに送った識別子を消せず、ブラウザ拡張は決して読み込まないアプリケーションを守れません。

どの仕組みが効くかはリゾルバーの経路が決める

VPNがDNSサーバーを通知しても、すべての問い合わせを受け取るとは限りません。暗号化DNSを設定したブラウザ、独自のリゾルバーを持つアプリケーション、ゲートウェイを通らないネットワーク経路の端末は、どれも別の場所を見ます。モバイルプラットフォームは、トンネルの提案を静かに上書きするプライベートDNS設定をますます提供しています。

だからポリシーではなく経路を試してください。意図したリゾルバーにゲートウェイから直接問い合わせ、次にクライアントから問い合わせて比べ、そのうえで、遮断されるはずの名前が利用者の動かすアプリケーションで実際に失敗するかを見ます。

キャッシュされた応答と開いたソケットがこれを分かりにくくします。リソースをすでに読み込んだページはルール変更後も動き続けるので、古いタブを再読み込みするより新しい接続のほうがよい検証です。

結果を主張する前に両方向を試す

意図的に遮断したドキュメント用の名前、許可された公開名、サービスが必要とするプライベート名を使ってください:

$ dig +short metrics.example @10.40.0.53
$ dig +short example.com @10.40.0.53
$ dig +short intranet.corp.internal @10.40.0.53

遮断した名前に空の応答、公開名に通常のアドレス、内部名にプライベートアドレスが返れば、フィルタリング、上流での解決、ローカルレコードがすべて機能していることが分かります。三つとも失敗するなら、フィルターではなく上流かリスナーの問題を見ています。

社内で公開するものでは主張を狭く保ってください。これはリゾルバー上でのドメインフィルタリングであり、コンテンツ検査でもパスフィルタリングでも、誰も追跡されないという約束でもありません。ポリシーの所有者、例外の経路、問い合わせの保存期間をルールと並べて示してください、なぜなら、すべての検索を記録するフィルターには、それ自体のプライバシーコストがあるからです。

関連記事