- エジプト人開発者がESP32-C3「SuperMini」ボードを使った広告ブロック手法を披露
- ESP32広告ブロックドングルの製作費用はわずか5ドル
- ブラックリスト化された537,000件のドメインをデバイスの4MBフラッシュメモリに格納
オンライン広告が問題になってきたら、Raspberry Piで動くPi-Holeのような専用ハードウェアと組み合わせて広告ブロックソフトウェアを使うのが良い方法です。しかし、そのデバイスが再起動中だったり、何らかの理由で機能していなかったりしたらどうでしょうか。エジプト人開発者のZedAxis氏は、オンラインのホワイトリストとブラックリストの処理方法について再考を促すかもしれない解決策を開発したと主張しています。
5ドル以下のESP32ベースのミニボードを使うことで、このデバイスはわずか4MBのオンボードフラッシュストレージに50万件以上のドメインをどうにか詰め込んでいます。
この製作物はYouTubeで実演されており、この「DNSシンクホール」の動画では、セットアップがいかに簡単かが示されているようです。骨の折れる作業はすべてZedAxis氏がすでに済ませており、コードはGitHubで公開されています。
ESP32-C3とは何か
ZedAxis氏は、オンラインストアで簡単に入手できる5ドルのESP32-C3「SuperMini」ボード(現在英国Amazonでは3.50ポンド)から、このコンパクトなPi-Hole代替機を製作しました。これらのデバイスには給電用のUSB-C、Bluetooth 5.0が搭載されており、そしてこのプロジェクトにとって決定的に重要なWi-Fiも備わっています。
このボードにはUSBアダプターと3Dプリントされたケースが組み合わされており、電源に接続できるようになっています。今回の場合はルーターの背面に接続していますが、テレビやゲーム機、あるいは他の常時稼働しているUSBポート付きデバイスであれば何でも構いません。デバイスへの直接アクセスはWebダッシュボード経由で可能で、mDNSにも対応しているため簡単に検出でき、OTA(Over-The-Air)アップデートのダウンロードにも対応しています。
プロジェクトのコードは開発者のGitHubで公開されており、50万件を超えるドメインを4MBのフラッシュストレージに収める、この特殊な圧縮方式についても説明されています。
4MBにしてはドメイン数が多すぎないか
I built a $2 ad-blocker for my whole network – YouTube
厳密に言えば、4MBで50万件のドメインを保持できるはずはありません。プロジェクトのGitHubで説明されている通り、実際の数字はその半分程度(14万1,000件で「約2.5MBのRAM」を消費)です。では、537,000件のドメインはどうやって4MBのRAMに詰め込まれているのでしょうか。
選定されたボードには意図的にPSRAMが搭載されておらず(つまりフラッシュメモリのみ)、32ビットや64ビットではなく、ドメインを40ビットのFNV-1aへとハッシュ化しています。これは速度重視で衝突率が低くなるよう設計されたアルゴリズムです。これにより、14万1,000件のドメインを0.7MBのフラッシュに収めることができ、ブラックリスト化された広告ドメインの照合には50KB未満のRAMが割り当てられています。
OTAファームウェアアップデートにはフラッシュの約1.3MBが必要となるため、ほとんどの場合、ブラックリストは約25万件のドメインに制限されます。ただし、これはデバイスのセットアップ時、最初のブラックリスト取得が行われる際に決定されます。このプロジェクトには、DHCPサーバーとしてのセットアップなど、今後さらに機能が追加される予定です。
大きな疑問は、例えば広告ネットワークによって消費されるブロードバンド帯域幅の削減を求める中小企業などに、これが採用され得るかどうかという点です。