HN 日本語サマリー

← 一覧へ戻る
プログラミング

巧妙なハッカーが5ドルのESP32製広告ブロック用ドングルに537,000ドメインを詰め込む

Clever hacker fits 537,000 domains in a $5 ESP32 ad-blocking dongle (tomshardware.com)

39 pointsby sbulaev14 コメント

要約

ある開発者が、わずか5ドルのESP32マイクロコントローラーを使用して、537,000件以上の広告ドメインをブロックできるハードウェアベースのDNSフィルターを作成しました。40ビットFNV-1aハッシュ技術を活用することで、限られたフラッシュメモリに大量のドメイン情報を効率的に格納し、低レイテンシで動作するバックアップ広告ブロッカーを実現しています。このプロジェクトは、低コストでネットワーク全体の広告ブロック機能を提供する革新的なアプローチを示しています。

全文翻訳

安価なハードウェアベースの広告ブロックDNSフィルターを構築するには、いくらかかるでしょうか。「無料」で済むのは、廃棄される中古ハードウェアを再利用できる場合です。もし運が悪かったらどうでしょう?RAM不足の時代では、Raspberry Piでさえ数百ドルかかります。しかし、それほど強力なものは必要ありません。実際、5ドルのマイクロコントローラーを使用して、500,000件以上のドメインをブロックでき、レイテンシが約10ミリ秒の完全に機能する広告ブロックフィルターを構築できます。 それが可能であることを、エジプトのフルスタック開発者であるZedAxis(GitHubでは@M-Abozaid)がすでに構築していることから知っています。彼はESP32-C3 "SuperMini"ボードを使用して、自宅のネットワーク用のバックアップDNSを作成しました。これは広告ブロック機能も提供します。彼のプライマリルーターはPi-holeであり、これはRaspberry Pi上で動作する特殊なソフトウェアで、DHCPアドレス指定とDNS解決を管理し、広告ブロック機能を統合しています。SuperMiniは、Pi-Holeが再起動中または利用できない場合のバックアップとして機能します。 厳密には、ZedAxisの作成したものを実際に動作しているところは見ていませんが、それが機能しないと信じる理由は全くありません。Wi-Fi対応の組み込みマイクロコントローラーであるESP32ファミリーはよく知られた存在であり、この機能はその能力の範囲外ではありません。実際、この特定のトリックにより、ESP32-C3を使用できます。これは、一部の上位モデルにある8MBのPSRAMを持たない、コスト削減版のチップです。(ESP32には多くのバリアントがあります。) ZedAxisが使用したESP32-C3には、400KBのRAMと4MBのフラッシュメモリしかありません。これらの限られた仕様では、実質的に大きなプレーンテキストのブロックリストを保存することはできませんでした。データ量が多すぎるためです。そこで、彼は起業家的なハッカーなら誰でも行うであろうことをしました。データをハッシュ化してサイズを削減したのです。40ビットFNV-1aハッシュを使用しました。32ビットでは衝突が多すぎ、64ビットではスペースを浪費しすぎるためです。これにより、デバイスのフラッシュメモリに約537,000ドメインを格納できます。 しかし、巧妙な点はハッシュ化そのものではありません。ドメイン自体を保存するのではなく、ビルドプロセスは1つ以上の公開ブロックリストをダウンロードし、重複エントリとコメントを削除し、残りの各ドメインを40ビット値にハッシュ化し、結果のリストをソートして、完成したデータベースをESP32のフラッシュメモリに書き込みます。DNSクエリが到着すると、デバイスは要求されたホスト名を同じ方法でハッシュ化し、ソートされたハッシュテーブルに対してバイナリ検索を実行します。一致が見つかれば、リクエストはブロックされます。そうでなければ、クエリはアップストリームリゾルバーに転送されます。 ZedAxisによると、完成したファームウェアは、約10ミリ秒でブロックされたルックアップに応答しながら、約50KBのRAMしか使用しません。 設計にはもう一つ巧妙な妥協点があります。ESP32は通常、ファームウェアの2つの完全なコピーを保持するためのフラッシュメモリを予約しており、これにより、デバイスが起動不能になる失敗したフラッシュのリスクなしに、オーバー・ザ・エア(OTA)アップデートが可能になります。ワイヤレスファームウェアアップデートを気にしないのであれば、その2番目のファームウェアパーティションをブロックリストデータベースのために再利用できます。OTAサポートを有効にすると、プロジェクトは最大約250,000ドメインのブロックで上限に達します。OTAを諦めると、通常はファストフードランチの価格で購入できるマイクロコントローラーで、その数は約537,000ドメインに跳ね上がります。ZedAxisは価格を2ドルと説明していますが、私はSuperMiniボードを5ドル未満で見つけることができませんでした。しかし、その価格であれば、違いについて細かく気にする必要はほとんどありません。 もちろん、これは本格的なPi-holeやAdGuard Homeのインストールに取って代わるものではありません。ESP32プロジェクトには基本的なダッシュボードがありますが、クライアントごとの詳細な統計情報、履歴クエリログ、またはそれらのプラットフォームを魅力的にするすべての設定ノブやダイヤルは提供しません。代わりに、それは小さな保険証券として設計されています。ネットワーク上に静かに存在し、わずか数十ミリアンペアの電力しか消費しません。そして、プライマリDNSサーバーが再起動や停電で利用できなくなった場合でも、クライアントはルーターが設定しているリゾルバーにフォールバックするのではなく、フィルタリングされたDNS応答を受け取ることができます。 ZedAxisは、このすべてをISP提供のファイバーゲートウェイであるHuawei OptiXstarホームファイバーゲートウェイの背面にあるUSBポートから給電しています。USB接続はデータ通信を行っていません。統合のすべては、ルーターが「5ボルトを供給する」と言い、ESP32が「ありがとう」と応答することです。単に、ポートが非常に小さく、ルーターの後ろにほとんど見えなくなるデバイスにとって便利な電源ソースであるだけです。すべての通信は、ESP32の統合Wi-Fiアダプターを介して行われます。 このようなプロジェクトが一般的になるかどうかは分かりません。おそらくそうならないでしょう。なぜなら、ネットワーク全体の広告ブロックを望むほとんどの人は、依然としてRaspberry Pi、中古のミニPCを購入するか、仮想マシンでAdGuard Homeを実行するからです。それでも、5ドルのマイクロコントローラーと400KBのRAMを見て、「うん、これで十分だろう」と決断する人を見るのは爽快です。