広告ブロックDNSがインターネットをよりいいものにする理由
この記事は、Ad Blocker Dev Summit 2021でアドガードのCTO兼共同創業者である
Andrey Meshkov(アンドレイ・メシュコフ)が行った講演をもとに書かれています。そのため、講演のビデオを見るか、この記事を読んで、スケールの大きいコンテンツブロッキングについて知ることができます。
最近では、テレビからスマート電球、モバイル機器からスマート自動車まで、あらゆるものがインターネットに接続されているようになっています。
広告やアドトラッカーがインターネット上のあらゆる場所に存在していることを考えると、ブラウザベースの広告ブロッカーだけでは不十分なように思えます。ブラウザベース広告ブロックは、あなたの注意を引くために攻撃的で押しつけがましいバナーのない、「より良いインターネット」への小さな窓を提供するに過ぎません。
しかし、この「窓」を広げて、すべてを手に入れたいとしたらどうでしょう?
そんなときは、シートベルトを締めて、DNSフィルタリングの過去、現在、そして未来を巡る魅惑的な旅に出かけましょう。
なぜなら、広告ブロックのスケールを広げるのは「DNS」だからです。
DNSレベルのブロッキングとは
DNSは「Domain name system」の略で、Webサイトの名前を、ブラウザが理解できるようなIPアドレスに変換することを目的としています。
DNSは、インターネットの「住所録」と考えることができます。
つまり、ウェブサイトにアクセスするたびに、ブラウザはDNSサーバー(通常、インターネットサービスプロバイダーが提供しているもの)にDNSクエリを送信し、ウェブサイトのIPアドレスを把握します。
通常のDNSリゾルバは、要求されたドメインのIPアドレスをブラウザに返すだけです。
お使いのデバイスは、アプリがナビゲートしたいドメイン名のIPアドレスを取得するために、常に何らかのDNSサーバーを使用します。
そこで、DNSレベルのブロッキングを行うDNSサーバーもあります。
通常、ブロックされたドメインのルーティング不可能なアドレスを配るという、DNSシンクホール技術(DNS sinkholing)を用いて行われます。
あなたのデバイスが、広告であれトラッカーであれ、「悪い」リクエストを送信すると、DNSサーバーはブロックされたドメインの0.0.0.0というIPアドレスを応答します。
つまり、アプリは単純にこのアドレスに接続できず、接続が阻止されるという望ましい結果が得られるのです。
DNSサーバーを使ってドメインへのアクセスをブロックする例
その他の選択肢としては、NXDOMAIN(ドメインが存在しないことを意味する)やREFUSED(サーバーがクエリの処理を拒否したことを意味する)で応答する、といいうのがあります。
ユーザーはこれらの違いには気づかないかもしれませんが、一部の古い機器はREFUSEDを誤解して、フォールバックDNSサーバーを使おうとする場合があります。
DNSの前身 - HOSTSファイル
意外なことに、DNSレベルのブロッキングは、広告ブロックの最も古いアプローチとして知られています。それは一体なぜでしょうか?
インターネットがまだARPANETと呼ばれていた時代に、コンピュータのIPアドレスをASCIIベースのユニークな識別子にマッピングするネーミングシステムが考案されました。
ARPANETに接続されているコンピュータの数が少なかったため、米国国防総省のネットワーク情報センターは、各コンピュータのアドレスとホスト名のマスターリストであるHOSTS.TXTというファイルを管理していました。
システム管理者は、定期的にhosts.txtをダウンロードしていました。ARPANETのコンピュータの名前を知っていれば、そのIPアドレスをHOSTSファイルで調べればよかったのです。
ARPANETのHOSTS.TXTファイルの見た目
しかし、すぐに明らかになったのは、爆発的に増えていくホストの数が、NICのコンピュータに大きな負荷をかけているということでした。
誰もが自分のコンピュータをARPANETに置きたいと思っていましたが、NICがHOSTS.TXTを更新するのを待たなければなりませんでした。
何か他の方法が必要でした。
そこで1987年末、Paul MockapetrisがDomain Name Systemの実装を書きました。
しかし、HOSTSファイルは忘れられてはいなかった。
最初のインターネット広告が登場した直後、人々はHOSTS.TXTをブロックリストとして使用し、ほとんど同じDNSシンクホーリング手法を使って広告のダウンロードを防ぐことができることを発見した。
このことがわかると、最初のブロックリストを維持し、みんなで共有することに時間を割く人たちが現れました。20年以上の歴史を持つブロックリストの中には、Peter Lowe's blocklists、Steven Black's blocklists、Dan Pollock's hostsのように、現在でも活発に開発されている注目すべき例があります。
Peter Lowe’s blocklistからの抜粋
Adblock for Firefox の最初のバージョンが登場したとき、その目的を理解できない人がいました。彼らは、HOSTSファイルがしてくれることに満足していたのです。
フォーラムからの引用
しかし、HOSTSファイルには、簡単には解決できない問題があります。
- HOSTSファイルのアップデートをユーザーに配布する良い方法はありません。HOSTSファイルのアップデートをユーザーに配布する良い方法はありません。あるソフトウェアにそれをさせるか、非常に忍耐強く定期的に手動で行う必要があります。
- ワイルドカードが使えず、すべてのドメインをリストアップしなければならないため、 HOSTSファイルは巨大になりがちです。HOSTSファイルの構文は、そのような使い方をすることを想定していません。最大のブロックリストの1つであるEnergized Unifiedを以下の写真で見てみましょう。ご覧の通り、70万件以上のドメインが含まれており、その重さは約21メガバイトです。21メガバイトのファイルを毎日何百万人ものユーザーに配信することは、すでに深刻な問題となっています。
「Energized Unified blocklist」
HOSTSファイルを使用する代わりに、広告をブロックするパブリックDNSサーバーが登場しました。このようなサーバーを使用するようにデバイスを設定するだけで、ユーザーはHOSTSファイルの更新に対処する必要がなくなりました。最初のパブリックDNSサーバーの1つはAlternate DNSと呼ばれ、2015年に登場しました。一人の人間によって維持されていました。その後、2016年にAdGuard DNSを立ち上げました。
DNSブロッカーの新生活
この2、3年前までは、規格としてのDNSはわずかな変化しかなく、ほぼ凍結状態でした。しかし、その後、新しい規格で爆発的に普及しました。そして、大きなトピックはDNSの暗号化です。DNS-over-TLS、DNS-over-HTTPS、DNS-over-QUICなど、どれも主流になり、コンテンツブロッキングに大きな影響を与えました
DNSの暗号化が普及する前は、一般ユーザーにとっては選択肢が複雑すぎました。
- HOSTSファイルを使用し、何とかしてその更新を受け取る。
HOSTSファイルを使用し、その更新情報を受信する。 * プレーンなDNSサーバーを使用し、モバイルネットワーク用にモバイルで設定できないなどの制限を受け入れる。また、デスクトップではすべてのネットワークアダプタを設定する必要があり、そのためにはかなり低いレベルの設定をしなければなりません。 - VPN(またはローカルVPN)ソフトウェアを使用する。
DNSの暗号化が一般的になった後、いくつかの技術的な障害が単純になくなりました。現在では、DNSサーバーの設定が非常に簡単になり、どのようなネットワークでも使用できるようになりました。もちろん、デバイスの設定に入り込む必要はありますが、以前ほど深くはありません。DNSの暗号化は、Android 9+(DoT、DoHが登場)、iOS 14+およびmacOS 15+(DoT、DoH)、Windows 11(サポートはかなり限定的ですが)でネイティブにサポートされています。これだけでも、DNSブロックソリューションの人気に大きな拍車がかかりました。
さらに、DNSの暗号化が進んだことで、パブリックDNSサーバーはユーザーにカスタマイズオプションを提供できるようになりました。言い換えれば、誰もが何をブロックし、何をブロックしないかを選択できるようになったのです。これまでは、DNSサーバーのドメイン名に基づいてカスタムルールを適用するには、ユーザーのIPアドレスを「リンク」するしかありませんでしたが、これは良い解決策とは言えません。
コンテンツブロッキングにDNSを使用する:長所と短所
コンテンツ・ブロッキングにDNSを使用することは、いくつかの利点と明らかな欠点があります。ここではそれを挙げてみます。
Pros
- 追加のソフトウェアをインストールする必要がありません。
- ブラウザや OS ベンダーに依存しない。
- パフォーマンスコストがかからない。
- パブリックDNSサーバを運用することで、インターネット全体を監視することができます。これは、ブロックリストを管理している場合に非常に便利です。使われていないルールを取り除くことができ、新しい脅威についてもすぐに知ることができます。DNSはブラウザだけでなく、すべてのデバイスを監視しているため、死角がありません。
- 一元化されたソリューションは、いくつかの問題に対処するのに適しています。
例えば、一部のトラッカーがブロッカーから隠れるために採用していた戦術であるCNAMEクローキングについて見てみましょう。CNAMEのDNSレコードを使って、実際のサードパーティドメイン名をファーストパーティドメインに偽装して隠していました。AdGuard DNSでは、これらの偽装ドメインをすべて見つけ出し、そのリストを公開することで、DNSにアクセスできないコンテンツブロッカーでもこれを阻止できるようにしました。
もう一つの例は、トラッカーを偽装するためにプロキシを使用することです。基本的には、CloudFlareやCloudFrontを使ってサーバーレスのプロキシを構成し、オリジナルのサードパーティドメインを隠すことができます。DNSは一般的には役に立ちませんが、このようなプロキシを検出するための良い出発点になります。
欠点
- ファーストパーティの広告には対応できません。例えば、YouTubeの動画広告は、正規の動画と同じドメインでホストされているため、ブロックすることができません。
- 化粧品によるフィルタリングはできません。DNSブロックだけでは、ほとんどの広告は表示されないかもしれませんが、壊れたフレームや広告のプレースホルダーなど、かなり見苦しいWebページになってしまいます。
- 破損の可能性が高い。例えば、Google Analyticsがブロックされているために、アプリやウェブサイトが壊れてしまうことがありますが、その場合は何もできません。
- 回避が容易になる。アプリが別のDNSサーバーを使用するだけで済む場合もあります。
改善すべき点
DNSフィルタリングにはいくつかの欠点がありますが、これを修正するか、少なくとも軽減することができます。
Access Denied Error Page
現在、DNSレベルでドメインがブロックされると、醜いエラーページが表示されます。これではユーザーの使い勝手が悪くなります。例えば、一時的にブロックを解除したいと思っても、その方法がないのが現状です。
幸いなことに、この件に関してはRFC(コメント要求文書)のドラフトがあります。DNS Access Denied Error Page"では、(HTTPS証明書のインストールを要求するような)醜い解決策に頼らずに、美しいエラーページをユーザーに表示することができます。
暗号化されたDNS発見メカニズム
現在、すべてのデバイスに DNS を設定する必要があります。ルーターの中に設置できればもっといいと思いませんか?新しいルーターの中には、すでにDNSの暗号化をネイティブにサポートしているものもあります。しかし、多くの古いルーターは、いまだにプレーンなDNSサーバーしか受け付けません。このような状況を改善するために、Adaptive DNS Discoveryワーキンググループがあります。
**注目すべきドラフトRFCは次のとおりです。
-
- "Discovery of Designated Resolvers"は、特殊なDNSレコードを介して暗号化されたDNSサーバーの発見を可能にするものです。これはどのように機能するかというと、次のようになります。普通のDNSサーバーを設定し、OSが特殊なDNSクエリを送信して、使用できる暗号化DNSサーバーがあるかどうかを尋ねます。
- 次に注目すべき2つ目のRFCは、a new DHCP option for encrypted DNS serversに関するものです。このオプションは、ルータが暗号化されたDNSの設定を、そのルータに接続されたコンピュータに伝達することを可能にします。
アプリ検出
最後に、もう一つ改善すべき点があります。どのようなアプリがこのようなDNSクエリを作成したのかを検出できるようにする必要があります。これをサポートするRFCはありません。しかし、自分たちでやってみて、少なくとも人気のあるアプリについては、ある種の「DNSフィンガープリント」を作成することができます。
どのアプリがDNSクエリを作成しているかがわかれば、何をブロックして何をブロックしないかをより柔軟に設定することができます。
- 例えば、Facebookのトラッキングをブロックしたいが、グローバルにブロックするとすべてのFacebookアプリが壊れてしまうので、Facebook以外のアプリでのみブロックしたいとします。
-
- もうひとつの現実的な問題は、AppsFlyer(モバイル分析システム)をブロックすると、かなり人気のあるアプリが壊れてしまうことです。そのため、選択的に(影響を受けるアプリのみ)許可し、それ以外はブロックしておきたいと考えています。
このDNSフィンガープリントを作成するには、すべての人気アプリのネットワーク動作を分析する必要がありますが、それを可能にするソリューションを開発中です。
AdGuard DNSとは
もしあなたが「より良いインターネット」にアクセスしたいのであれば、VPNや広告ブロッカーと組み合わせてDNSを使用するのが間違いありません。そして、AdGuard DNSをよく見てみることをお勧めします。
では、AdGuard DNSとは?AdGuard DNSは、最もプライバシーに配慮したDNSサービスの一つであると言えるでしょう。DNS-over-HTTPS、DNS-over-TLS、DNS-over-QUICなどの信頼性の高い暗号化プロトコルをサポートしています。広告、トラッキング、および/またはアダルトドメインへのリクエストを識別することができ(オプション)、空のレスポンスで応答します。AdGuardは、広告、トラッカー、および不正行為を提供するドメイン名の独自のベースを持っており、それは定期的に更新されます。さらに、ブロックリストにお客様のカスタムルールを追加する機会も大いにあります。
AdGuard DNSがどのようなものであるかをより広く知ってもらうために、さらにいくつかの点について言及します。
- 14か所に設置された複数のサーバーで構成されています。
- これらのサーバーはすべて、BGP(Border Gateway Protocol)を介して同じIPアドレスを「アナウンス」しています。
- 現在の負荷は、1秒間に約30万件のDNSクエリです。
- AdGuard DNSはGolangで書かれています。
- DNSトラフィックの約75%が暗号化されています。コンテンツブロッキングDNSサーバーが他と違うのは、実はこの点です。CloudFlareやQuad9の統計を見てみると、暗号化されたDNSはすべてのクエリのほんの一部に過ぎないことがわかります。AdGuard DNSの場合はこれが大きく異なり、トラフィックのほとんどが暗号化されています。
DNS フィルタリングルールの構文
AdGuard DNSのブロックリストは、特殊なDNSフィルタリング構文を使用して構成されています。HOSTS ファイルタイプのブロックリストの制限に満足していなかったため、AdGuard DNS ではおなじみの adblock スタイルの構文を使用しています。その後、DNS固有の修飾語で徐々に拡張していきました。
DNSフィルタリングルールの例。仕様の全文はGithubで公開されています。
その違いを説明します。左側には、AdGuardのDNSフィルター(デフォルトで使用しているもの)の統計があります。比較的短いものですが、実際には約90万件のドメインをブロックしています。左側には、Energized Ultimateという別のブロックリストがあり、これは500Kのドメインを含むHOSTSファイルです。これは、500Kのドメインをブロックするものです。
AdGuard DNSデータによる統計
AdGuard DNS サーバーノード
AdGuard DNSサーバーノードは、いくつかのパーツで構成されています。フロントエンドには、DNSフィルタリング、キャッシングなどのすべてのロジックを実装するDNSフォワーダ(Golangで作成)があります。
バックエンドには、DNSの再帰性を提供するアンバウンドサーバーインスタンスがあります。1つのサーバーノードの負荷は、ノードの場所に応じて5,000から40,000のレスポンスです(ある場所は他の場所よりも人気があります)。
DNS フィルタリングエンジンの実装
DNSフィルタリングエンジンの実装はオープンソースでGithubで公開されています。そのうちの2つを紹介します。1つ目はurlfilterと呼ばれるもので、AdGuard DNSとAdGuard Homeで使用しているGolangライブラリです。比較的高いパフォーマンスと低いメモリーフットプリントを提供します。2つ目はAdGuard DnsLibsで、私たちがクライアントアプリで使用しているC++ライブラリです。DNSフィルタリングの他に、DNS暗号化の実装も提供しています。
AdGuard DNSの助けを借りて広告やトラッカーから身を守りたい場合は、このセットアップガイドに従うだけです。
未来への架け橋
ブラウザベースのコンテンツブロッカーは、一般ユーザーの間では最も人気があるかもしれませんが、フィルタリストの管理者の間ではそうではありません。ボランティアによって管理されているhostsファイルやドメインリストの数は、ブラウザベースのブロッカーのフィルタリストの数よりもはるかに多いのです。これは、大きな可能性を秘めているというシグナルです。
filterlists.comによる統計
では、DNSコンテンツブロッキングの展望はどうだろうか。まず、DNSコンテンツブロッキングの成長は加速するでしょう。Windows 11ではDNS暗号化がサポートされ、新しいルーターもDNS暗号化をサポートしており、これらすべてにより、ユーザーは設定や使用が容易になるでしょう。
DNSコンテンツブロッキングの回避率は上昇するでしょうが、それでもわずかなものです。DNSコンテンツブロッキングを回避するためには、さまざまな関係者の多大な努力が必要であり、そのためにはDNSコンテンツブロッキングがブラウザブロッカと同じくらい普及しなければなりません。しかし、成長率は高くても、そうはならないでしょう。
DNSがブラウザベースのブロッカーに取って代わることはないでしょう。その理由は明白で、品質が十分ではないからです。しかし、それでも、DNSはこれからも存在し続けるでしょう。