2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi + DietPiで作る広告ブロックDNSサーバ  Pi-holeで実現する広告ブロック術

Last updated at Posted at 2025-06-04

はじめに

本記事は軽量LinuxディストリビューションであるDietPi上にDNSサーバを構築し、広告ブロッカーであるPi-holeを用いて、ホームネットワークのを広告をブロックする方法について記載しています。

Pi-holeを導入することで、ホームネットワーク全体の広告をブロックし、ホームデバイス使用時のインターネットがより快適かつ安全になります。

各デバイスにソフトウェアをインストールする必要はないため、DNS設定を変更するだけでインターネット接続を保護できるのでコストをかけることなく導入できます。

DietPiについては、以前書いた「最適化された最小限のDebian OS  DietPiの始め方」をご参照ください。

Pi-holeとは

Pi-holeは、ネットワーク全体の広告やトラッキングをDNSレベルでブロックすることができるオープンソースの広告ブロッカーです。

Pi-holeをホームネットワークに導入し、クライアント側のDNSサーバを切り替えることで、Webサイトやスマートフォンに表示される広告を排除し、快適なウェブブラウジングを実現します。

また、疑わしいドメインに対するアクセスも遮断できるため、マルウェアやフィッシングといったサイバー攻撃のリスクを軽減するセキュリティ対策としても機能します。

pi-hole.png

Pi-holeの機能を以下に解説します。デフォルトではDNSフォワーダー1として機能しますが、Unboundもインストールすることで、Pi-holeを再帰的2なDNSサーバとして動作させることができます。

  • 広告ブロック
    Pi-holeは広告やトラッキング用のドメインに対して、DNSレベルでアクセスを遮断します。その結果、ブラウザが広告用のスクリプトや画像を読み込む必要がなくなるため、Webページの表示が軽量化され、体感的な読み込み速度が向上します。また、トラッカーのブロックによりプライバシー保護の効果も得られます。

  • Unbound によるフルリゾルバとキャッシュ
    UnboundはルートDNSサーバから名前解決を行うフルリゾルバです。ローカルにDNSキャッシュを保持するため、同一ドメインへの再アクセス時には高速な応答が可能です。従って名前解決の全体的なパフォーマンスが向上し、外部のDNSサーバに依存しない安定した運用が実現できます。

なお、以下のようなケースでは、一時的に名前解決が遅くなります。

  • Unbound の初回起動時(キャッシュが空のため)
  • 未キャッシュのドメインへの初回アクセス(フルリゾルバのため、ルートから階層的に問い合わせを行う必要がある)
  • qname-minimisationなどのプライバシー保護機能を有効にしている場合(追加の問い合わせ処理が発生するため)

qname-minimisationは、DNSのプライバシーを高めるための機能です。DNSクエリに含まれる情報を必要最小限にとどめることで、不要な情報の漏洩を防ぐ仕組みです。

例えば、www.example.comの場合、従来のフルリゾルバではすべての中間DNSサーバに対して、FQDNを問い合わせます。しかし、ルートDNSサーバはcomの権威サーバしか知らないため、www.example.com全体を知る必要はありません。従ってこのような完全修飾ドメイン名が含まれるクエリは、中間DNSサーバに過剰な情報を提供しています。

qname-minimisationを有効にすることで、リゾルバは段階的に名前解決を行います。はじめにルートDNSに対してcomの問い合わせを行います。次に権威DNSサーバに対してexample.comを問い合わせます。最後にwww.example.comをexample.comのDNSサーバに問い合わせします。

よって、DNSサーバにはそれぞれ必要な情報しか渡さないことによりプライバシーを保護しますが、問い合わせ回数が増えるため、未キャッシュのドメインでは名前解決にやや時間がかかります。

Pi-holeのインストール

Pi-holeのインストール方法を以下に記載します。

DietPi Softwareより「Search Software」または「Browse Software」からインストールを行います。以下では「Browse Software」からインストールを行なっています。

はじめに「Browse Software」を選択します。

スクリーンショット 2025-05-27 23.16.49.png

Pi-holeとUnboundにチェックを入れます。

スクリーンショット 2025-05-27 23.18.01.png

DNSサーバのインストールには静的IPアドレスの設定が必要ですが、既に設定済みの場合は「Skip」を選択します。

スクリーンショット 2025-05-27 23.19.09.png

「Install」を選択します。

スクリーンショット 2025-05-27 23.20.16.png

選択したソフトウェアのインストールを行うため「OK」を選択します。

スクリーンショット 2025-05-27 23.21.40.png

インストールプロセスを開始します。

スクリーンショット 2025-05-27 23.24.06.png

以下のような画面が表示されるので「OK」を押します。

スクリーンショット 2025-05-27 23.25.10.png

再度「OK」を押します。

スクリーンショット 2025-05-27 23.25.28.png

再度静的IPアドレスに関する設定を促されるため、既に設定済みの場合は「Continue」を選択します。

スクリーンショット 2025-05-27 23.26.20.png

任意のインターフェースを選択します。

スクリーンショット 2025-05-27 23.27.54.png

何も選択せずに「OK」を選択します。

スクリーンショット 2025-05-27 23.28.34.png

ブロックリストを利用するにあたり「Yes」を選択します。

スクリーンショット 2025-05-27 23.28.55.png

デフォルトのまま「Continue」を選択します。

スクリーンショット 2025-05-27 23.29.22.png

パスワードを確認して「OK」を押します。

スクリーンショット 2025-05-27 23.30.56.png

Web UIのアクセス方法を確認して「OK」を押します。

スクリーンショット 2025-05-27 23.32.19.png

Pi-holeのWeb UIは以下のURLよりアクセスできます。また、デフォルトの認証情報はdietpiです。

  • HTTP:http://<IP>:8089/admin/
  • HTTPS:https://<IP>:8489/admin/

/var/log/pihole/pihole.logへのDNSクエリのログ記録が無効になりました。これはWeb UIとデータベースのクエリログには影響しませんが、pihole -t/pihole tailコマンドを実行してもDNSクエリが表示されなくなります。このコマンドを使用したい場合、または他の理由で/var/log/pihole/pihole.logにクエリログが必要な場合は、Web UIのプライバシー設定またはsudo pihole-FTL --config dns.queryLogging trueで再度有効にすることができます。

データベースへのDNSクエリのログ記録が2日間に短縮されました。これはWeb UIのプライバシー設定またはsudo pihole-FTL --config database.maxDBdays 7を実行すことで、7日間に変更できます。

インストール完了後、他のPCなどからブラウザを起動してWeb UIにアクセスします。

スクリーンショット 2025-05-27 23.33.39.png

ログインすると、以下のようなダッシュボードの画面が表示されます。

スクリーンショット 2025-05-27 23.33.49.png

DNSクエリが発生すると、クエリ結果がダッシュボードに反映されます。

スクリーンショット 2025-05-27 23.36.54.png

実践

広告ブロックを試してみましょう。

事前にクライアント側でDNSサーバのIPアドレスをPi-holeのIPアドレスに設定変更します。

広告ブロック

以下では、Qiitaのトップページを例に広告ブロックを試しています。

Pi-holeに切り替前は、画面右上に広告が表示されているのが分かります。

スクリーンショット 2025-05-27 23.44.13.png

DNSサーバ切り替え後、再度アクセスすると、画面右上の煩わしい広告が表示されなくなりました。

スクリーンショット 2025-05-27 23.48.13.png

Deny Listの登録

Deny Listに登録することで、アクセスさせたくないURLを制限できます。

特定のドメインに対するアクセスを禁止したい場合は「Query Log」より対象のクエリログを選択して「Deny」ボタンを押すと、Deny Listに登録できます。

スクリーンショット 2025-05-30 20.26.08.png

登録したDeny Listから解除したい場合は「Domain」より対象のドメインを選択してゴミ箱のアイコンを押します。

スクリーンショット 2025-05-30 20.34.27.png

Domain management

Domain managementでは、特定のドメインを許可または拒否する設定が可能です。

一部のWebサイトでは、広告に関するドメインがページの表示に必要な場合があります。このような場合、広告がブロックされると、ページの読み込みを停止することがあります。

特定のドメインを除外したい場合は、ホワイトリストに追加することで回避できます。例えば、Google アナリティクスを許可したい場合は、以下のように「Type」にExact allowを指定して対象のドメインをリストに登録します。

スクリーンショット 2025-06-13 9.52.59.png

おわりに

Pi-holeを導入して1週間が経過しました。

日にもよりますが、多かった日で合計のDNSクエリ数は約11万件、ブロック率は15.6%を記録しました。日常的に大量のDNSリクエストが発生し、その中に相当数の広告及びトラッキングに関するドメインが含まれていたことが明らかになりました。

改めてPi-holeによる広告ブロックが効果的に機能していることを確認しました。

Pi-holeに感謝します。

参考

  1. クライアントから受け取ったDNSクエリを、自身で再帰的に解決することなく、あらかじめ設定された別のDNSサーバーに転送するだけのDNSサーバ

  2. クライアントからのDNSクエリに対して、ルートDNSサーバからTLD、権威DNSサーバまで順に問い合わせを行い、最終的なIPアドレスを取得してクライアントに返すDNSサーバ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?