おそらく、ウェブサイトの記事を読んでいるときにポップアップ広告に悩まされているかもしれません。すべての広告をブロックするにはどうすればいいでしょうか? DockerにPi-holeをインストールし、Pi-holeをネットワーク全体での広告ブロッカーとして使用してネットワークのパフォーマンスを向上させる方法を紹介します。
このチュートリアルでは、Dockerコンテナ内でPi-holeを設定して実行し、広告とウェブサイトをブロックする方法を学びます。興味がありますか?続けて読んで詳細を学んでください!
前提条件
このチュートリアルは実践的なデモンストレーションです。一緒に進める場合は、以下のものを準備してください:
- Windows 10にDockerをインストールする(ただし、サポートされている他のOSでも動作します)。
- A Windows 10 PC – This tutorial uses Windows 10 OS Build 19042.1165.
2つの永続的なDockerボリュームの作成
Pi-holeをDockerコンテナで設定する際には、まずPi-holeアプリケーションとDNS設定を保存するためのDockerボリュームを作成する必要があります。
以下のコマンドを実行して、Docker で pihole_app
と dns_config
という名前の2つのボリュームを作成します。必要に応じて名前を変更できます。
次に、以下のコマンドを実行して、マシン上で利用可能なすべての Docker ボリュームをリストアップすることで、Docker ボリュームが正常に作成されたことを確認します。
以下に、pihole_app
と dns_config
という名前の2つの新しく作成されたボリュームが表示されます。

環境変数を使用して Docker コンテナーで Pi-hole を実行します。
これで、2つの永続ボリュームが利用可能になったので、Pi-hole の基本 Docker イメージを使用して Docker コンテナーを実行する準備が整いました。ただし、まず、ローカル IP アドレスをメモする必要があります。
以下のコマンドを実行して、ローカル IP アドレスを取得します。単一の Docker コマンドを正しく実行するためには、ローカル IP アドレスが必要です。
次に、以下のコマンドを実行して、Docker ハブから pihole/pihole
のベースイメージを取得します。以下の表を参考にして、値を適切に置き換えます。表は、コマンドの目的ごとに各フラグを説明しています。
Command Flags | Definition |
—name=pihole | Names a Docker container as pihole. There will be an error if a container with the same name already exists on your machine |
-e TZ=Asia/Manila | Environment variable for time zone. Asia/Manila was used for this tutorial, but you can input anything that has the same format listed in on a GitHub gist. |
-e WEBPASSWORD=password | Sets a password for the Pi-hole interface. |
-e SERVERIP=YourIPAddressHere | Set your IP address for the Docker container. You will use this again later for making Pi-hole work. |
-v pihole_app:/etc/pihole | Mounts the volume pihole_app and use subdirectory /etc/pihole for storing the Pi-hole files |
-v dns_config:/etc/dnsmasq.d | Mounts the volume dns_config and use subdirectory /etc/dnsmasq.d for storing DNS configurations as required. |
p 81:80 -p 53:53/tcp -p 53:53/udp | Maps the ports of host machine to the ports of the Docker container (port 81 in host machine maps to port 80 of Docker container) |
—restart=unless-stopped | Sets a restart policy so the Docker container always restarts unless it is manually stopped by the user. |
pihole/pihole | Tells the docker run command to use the official pihole/pihole base image from Docker hub. |
以下、コマンドがDocker Hubからpihole/pihole
ベースイメージを取得します。

pihole/pihole
イメージがマシンにダウンロードされたら、コマンドは自動的に続行し、コマンドで設定したパラメータをフォローします。

pihole/pihole
ベースイメージを取得した後、コンテナからPi-holeダッシュボードをすでに実行できることを示す以下のような出力が表示されます。
Pi-holeダッシュボードのWebインターフェースにアクセスするには
、作成したDockerコンテナが実行されている場合、Pi-holeダッシュボードにアクセスできます。 Pi-holeダッシュボードは、独自のブラックリストまたはコミュニティが維持するブラックリストを介してどの広告をブロックするかを構成できるグラフィカルインターフェースです。 http://localhost:81にブラウザで移動します。前にホストマシンのポート81
をDockerコンテナのポート80
にマッピングしたので、ウェブブラウザはページをPi-holeダッシュボードにリダイレクトします。
前の
docker
コマンドを実行するときに異なるポートを設定した場合は、Pi-holeダッシュボードにアクセスするポートを変更します。たとえば、http://localhost:n、ここで’n’はポート番号を表します。
今、以前のdocker
コマンドを実行して環境変数でPi-hole Dockerコンテナを実行したときに設定したパスワードでPi-holeダッシュボードにログインします。 このチュートリアルでは、パスワードは「password」です(引用符なし)。

Pi-holeのコンテナは広告を積極的にブロックしておらず、待機モードになっています。これは「クエリ」と呼ばれるもの、または広告リクエストを評価するためのものです。

ホストのDNSサーバーをPi-holeのIPアドレスに設定する
Pi-holeサーバーが稼働している場合、ローカルシステムで広告をブロックするにはどうすればよいですか? ローカルシステムにすべてのリクエストをPi-holeのIPアドレスにルーティングし、一致する広告をブロックするように設定する必要があります。以下に続けて読んでください!
1. Windowsシステムトレイにあるネットワーク設定アイコンを右クリックし、「ネットワークとインターネットの設定を開く」を選択して、マシンのすべてのネットワークアダプターのリストを表示します。

2. 次に、ネットワークアダプターを右クリックし、「プロパティ」を選択します。ネットワークアダプターの設定ウィンドウが表示されます。

3. ネットワークタブのリストから「インターネットプロトコルバージョン4(TCP/IPv4)」を選択し、「プロパティ」ボタンをクリックします。

4. IPv4プロパティを以下のように設定します:
- 「次のIPアドレスを使用する」オプションを選択して静的IPアドレスを設定します。ホストマシンへの静的IP割り当てにより、他のデバイスが接続して広告ブロッカーを使用できるようになります。ルーターのデフォルトゲートウェイは、お使いのISPプロバイダーの設定によって異なります。
- DNSサーバーを設定するために、次のDNSサーバーアドレスを使用するオプションを選択し、優先DNSサーバーフィールドにDNSサーバーを追加してください。前の
docker
コマンドで設定したDockerサーバーのIPアドレスを入力します(「環境変数を使用してPi-hole Dockerコンテナを実行する」セクション参照)。 - 「代替DNSサーバー」フィールドにGoogleサーバーの8.8.8.8などの代替サーバーを追加し、OKをクリックします。代替DNSサーバーは、Pi-hole Dockerコンテナが何らかの理由で停止した場合にDNSサーバーとして機能します。好みの他の値を代替DNSサーバーに指定することもできます。

単一デバイスのDNSの設定
スマートフォンや他のデバイスが同じネットワークに接続されていると仮定し、そのデバイスのDNSサーバーをホストのIPアドレスに合わせることができます。このチュートリアルでは、スマートフォンが同じネットワークに接続されています。
1. スマートフォンの無線ネットワーク設定で、手動をタップし、ホストマシンのIPアドレスを入力します。Pi-holeが失敗した場合のために、代替IPアドレスも追加することができます。
スマートフォンの無線ネットワーク設定インターフェースは異なる場合があります。

2. スマートフォンのウェブブラウザで広告が多いウェブサイトを訪れてください。
この例では、Daily MailのウェブサイトとNew York Timesのウェブサイトが5〜10分間繰り返し訪れられました。Pi-holeダッシュボード上のライブブラウザ管理者は、デバイスからのブロックされた広告の数を示しています。以下に示すように。
このバーチャートは、この執筆時点でのPi-holeの最新バージョンの新しい追加機能です。一部の古いバージョンでは、代わりに折れ線グラフがあります。

ルーター設定を介したホームネットワーク全体のブロックを有効にする
単一のデバイスでDNSサーバーを構成する代わりに、ルーター設定ですべてのデバイスのDNSサーバーを構成してみてください。ルーターによっては、IPアドレスを使用するための規定がある場合とない場合があります。
このデモでは、ルーターがDNSサーバーやDHCPの変更にアクセスを許可しなかったため、ルーターの制約により、ホームネットワーキングは完全に探求されませんでした。
サンプルの管理者ビューでは、DNSサーバーIPを単一のデバイスで行ったのと同じ方法でエンコードできる場合があります。このデモでは、ISPにロックされたProlink PRS1841U-v2ルーターを使用しています。
DNS構成インターフェースはルーターによって異なりますが、設定は以下のように見えます。

ルーターでDHCPサーバーを無効にして、その後にPi-holeでDHCPサーバーを有効にすることもできます。Pi-holeコミュニティのサンプルディスカッションでは、これについて詳細が示されています。
Pi-holeダッシュボードを使用したウェブサイトのブロック
Pi-holeのデフォルトインストールでは、デフォルトで約92,725のウェブサイトがブロックされますが、Pi-holeメーカーのブラックリストや他のPi-holeファンによって共有されたリストからさらにウェブサイトを追加することもできます。
1. お好みの名前でテキストファイルにブロックするウェブサイトを保存します。この例では、ファイルの名前はblocklist.txtです。
2. 以下のdocker
コマンドを実行して、blocklist.txtファイル(cp blocklist.txt
)をDockerコンテナのボリュームにblacklist.txtという名前のファイルにコピーします。Pi-holeが自動的に検出できるように、blacklist.txtファイルをDockerボリュームに保持します。
最後に、Pi-hole管理ダッシュボードに戻ります。 左パネルのツールメニューをクリックして、Gravityを更新リンクをクリックします。 最後に、更新をクリックして、Pi-holeがブロックするURLの更新されたリストを取得します。

A successful update will look like the one below.

コンソールを使用してWebサイトのブロックリストを更新する
おそらく、Pi-holeダッシュボードを操作する代わりに、コンソールコマンドを実行したい場合があります。 その場合は、PowerShellでdockerコマンドを実行してWebサイトをブロックできます。 以下のdocker exec
コマンドを実行して、コマンドを実行できるpihole_app
Dockerコンテナーへの対話型ターミナルセッションを作成します。
ターミナルセッションが開いたら、以下のコマンドを実行してPi-holeのURLのブラックリストを更新します。
定期的に
pihole -g
を再実行して、広告ブロッカーを更新してください。
URLのコミュニティメンテナンスされたブラックリストを使用してWebサイトをブロックする
一部のURLは定期的に更新されていますが、他のURLはそうではないため、古いリストからブラックリストをアップロードすると、最新の変更が反映されない場合があります。
Pi-holeのAdlistブロックリストグループ管理機能を活用します。 Pi-holeダッシュボードで、左パネルのグループ管理→Adlistsメニューをクリックし、追加をクリックして、Pi-holeに追加するURLリストを選択します。

結論
このチュートリアルでは、Pi-Hole Dockerイメージのダウンロード方法、アクティブなリスニングPi-holeウェブインターフェースのテスト方法、外部デバイスをPi-holeに接続してテストする方法を学びました。広告やウェブサイトをブロックする方法も学び、Pi-holeダッシュボードがそれらをブロックする様子を見ました。
この知識を活用して、なぜ他のホストマシンを使用して同じネットワーク内の他の接続されたデバイスに広告をブロックしないのでしょうか?