メニュー
メニュー
日本語

【AdGuard DNS v2.11】Chromeでプリロードされるページをフィルタリング

ブラウザは常にパフォーマンスの向上に努めている。ページの読み込みが速ければ速いほど、不幸なユーザーを減らせるからだ。しかし、この用途に用いられる方法はフィルタリングの妨げになることもあります。

Chromeには、[︙] → 「設定」 → 「パフォーマンス」で「ページをプリロードする」という機能があります。この機能を有効にすると、ユーザー(あなた)が次に閲覧するであろうページが事前に読み込まれるようになります。

たとえば、記事を読んでいるとき、ブラウザはページ上のすべてのリンクを分析し、どのリンクをあなたがクリックするかを予測します。次に開きそうなページがすぐに開くように、Chrome はそのページのコンテンツを事前に読み込みます。対象となるウェブサイトにIPアドレスが表示されないように、Chromeはいわゆる「プライベートプリフェッチプロキシ」(英:private prefetch proxy)を使用します。コンテンツはこのプロキシサーバーを経由して読み込まれるため、ウェブサイトにはあなたの本当のIPアドレスではなく、プロキシのIPアドレスが表示されます。
ここで問題が発生します。ウェブサイトがプロキシ経由で読み込まれる場合、AdGuard DNS にはリクエストが表示されないため、そのリクエストのフィルタリングができなくなります。

しかし、Chromeはこれに対する回避策を提供しています。専用のシグナルを使用して、ユーザーまたはシステム管理者がDNSリクエストを透過させたいことをChromeに知らせることができます。Chromeを起動したり、ネットワークを切り替えたりすると、ブラウザはdns-tunnel-check.googlezip.netにDNSリクエストを送信します。IPアドレスが返されなかった場合(例:レスポンスがNXDOMAIN)、Chromeは「プリフライトモード」(英:Preflight mode)を有効にします。このモードでは、ユーザーがプリロードされたページにアクセスしようとすると、Chromeはシステムで設定されているサーバー(私たちの場合、AdGuard DNS)に専用のDNSリクエストを行います。ウェブサイトがブロックリストに登録されている場合、ブラウザはアクセスを阻止し、プリロードされたコンテンツは使用されません。

この仕組みを使えるようにするために、「Force preflight mode for prefetching in Chrome」(Chromeのプリフェッチにプリフライトモードを強制する)という機能を追加しました。
AdGuard DNS のサーバー設定にあります。技術的に言えば、この機能は dnsrewrite ルールを使用します:

|dns-tunnel-check.googlezip.net^$dnsrewrite=NXDOMAIN

このルールは、dns-tunnel-check.googlezip.netに対してNXDOMAIN レスポンスを返し、すべてのリクエスト、たとえプリロードされたページであっても、AdGuard DNS を経由するように Chrome に通知します。

※この機能はページプリロードそのものを無効にするものではありません。プリロードを無効にするには、Chromeブラウザの右上メニュー → 「設定」 → 「パフォーマンス」 → 「ページをプリロードする」のスイッチをオフにしてください。

ご意見はいつでも歓迎します

今回の機能はGitHubの機能リクエストのおかげで追加されました。
もし他に改善点やご指摘がありましたら、SNSまたはGitHubでお知らせください。

この記事を気に入っていただけましたか?