Raspberry Piで広告ブロック専用機を作る

以前からRaspberry Pi(手のひらサイズの安いシングルボードコンピュータ)には興味はあったものの、利用する目的がみつからなくて手を出さなかった。

昨年暮に整理して不要になったWindows PCの再利用を考えていて、広告ブロックのDNSサーバを作ろうかと思ったのが発端。調べてみるとPCなんか必要ではなくRaspberry PiとAdGuardというアプリで十分できることが分かったので年明け早々Amazonで材料を調達。

ハードウェアの組み立て、ソフトウェア(AdGuard Home)の入手とセットアップの手順のガイドは検索すれば簡単に見つかるので、ここでは詳述しない。未来の自分が「あれ、どうやったんだっけ?」と困らないように、大まかな手順を残しておく。

準備したもの

OSのインストールと初期設定

Windows PCでRaspberry Pi ImagerというアプリでOS(Raspberry Pi OS Lite 64-bit)を選択)をダウンロードしてブート可能なイメージをSDカードに書き込む。最初の設定は、Windowsのコマンドプロンプトから「おまじない」のコマンドをいくつか実行するだけなのでLinux素人でも大丈夫。

ハードウェアの組み立ては、SDカードをスロットに入れて電源を接続するだけ。

あとの設定は、Raspberry Piにモニタ、キーボード、マウスを接続することなくヘッドレスの構成で、PCのブラウザからRaspberry PiへWiFi接続して設定を進められる。SDカードへの書き込み時の設定で、ホスト名、SSHの有効化、Wi-Fi設定をあらかじめ済ませてあるからだが、よく考えられている。

AdGuard Homeのインストール

これも簡単で公式のインストールスクリプトを実行するだけ。世の中簡単になってることを実感。完了後、ブラウザから http://(ラズパイのIP):3000 にアクセスすると、AdGuardの管理画面が現れるので、指示に従って初期設定を済ませるだけ。

固定IPアドレスの設定(重要!)

DNSサーバは、家中のデバイスからIPアドレスの「問い合わせ」を受ける窓口。通常は家庭内のルータがDNSサーバの役割を兼ねるが、そのDNSサーバの役割をRaspberry Pi上のAdGuard Homeが肩代わりする際に、不要な広告を抜く仕組み。

そのDNSサーバのIPアドレスがコロコロ変わっては困るので、Raspberry PiのIPアドレスを固定するのだが、設定をおこなっても広告がブロックされないという事態に陥った。原因は、IPV4は正しく設定できていたがIPV6がRaspberry Piをバイパスして元のDNSサーバへアクセスしていたため。IPV6を設定して解決。

ネットワーク構成の変更とルーター側の設定

最後の仕上げとして家中の通信がRaspberry Piを経由するように、ルーターの設定を変更しなければならないのだが、問題発生。わが家のルータはISP提供のルータで設定変更できる機能が少なく、ルータとして働きながら、DNSサーバ部分を他者に譲り渡す設定ができない。別のルータと交換してしまうのがてっとり早いが、このISPのルータはIP電話の終端装置を兼ねているので外せない。

そこで、手持ちのルータを上位のルータ、ISPのルータを下位のルータと2段重ねにしてISPのルータはIP電話専用と構成を組み替えた。Raspberry Piは上位のルータに直接(実際はブリッジモードで動くメッシュルータが途中に入る)接続して、IPアドレスを固定。

上位ルータのDHCPサーバの プライマリDNSを先程固定したRaspberry Piのアドレスに変更。

これで、家の中のネットワークに繋がっている全デバイスの通信が、自動的にラズパイのAdGuard Homeを通るようになり、広告がブロックされるようになる。

最終的にケースにおさめて完了。

まとめ

構築してしまえば、あとはダッシュボードを眺めるだけ。 「今、これだけの広告をブロックした」とグラフで可視化されると、なんとなく達成感がある。特定のサイトが見られないなどの不具合が出るかもしれないが、今のところ支障はない。

このRaspberry PiのCPUのパワーは最新の高性能スマホのCPUの1/5~1/10程度。でも、アキテクチャーが違うので単純に比較できないが初代Pentiumを凌ぐし、僕が学生時代に最初に買ったパソコンのZ80というCPUの数千倍のパフォーマンス。昔は空調の効いたマシンルームに鎮座していたコンピュータが今では手のひらに乗って、コストは1万円以下。この50年間のテクノロジーの進化は凄まじい。楽しい時代に生きているんだなと実感する。

上部へスクロール