DockerコンテナーでPiholeをセットアップする方法

おそらく、ウェブサイトの記事を読んでいるときにポップアップ広告に悩まされているかもしれません。すべての広告をブロックするにはどうすればいいでしょうか? DockerにPi-holeをインストールし、Pi-holeをネットワーク全体での広告ブロッカーとして使用してネットワークのパフォーマンスを向上させる方法を紹介します。

このチュートリアルでは、Dockerコンテナ内でPi-holeを設定して実行し、広告とウェブサイトをブロックする方法を学びます。興味がありますか?続けて読んで詳細を学んでください!

前提条件

このチュートリアルは実践的なデモンストレーションです。一緒に進める場合は、以下のものを準備してください:

2つの永続的なDockerボリュームの作成

Pi-holeをDockerコンテナで設定する際には、まずPi-holeアプリケーションとDNS設定を保存するためのDockerボリュームを作成する必要があります。

以下のコマンドを実行して、Docker で pihole_appdns_config という名前の2つのボリュームを作成します。必要に応じて名前を変更できます。

docker volume create pihole_app
docker volume create dns_config

次に、以下のコマンドを実行して、マシン上で利用可能なすべての Docker ボリュームをリストアップすることで、Docker ボリュームが正常に作成されたことを確認します。

docker volume ls

以下に、pihole_appdns_config という名前の2つの新しく作成されたボリュームが表示されます。

Creating two Docker Volumes for the Pi-hole Configurations.

環境変数を使用して Docker コンテナーで Pi-hole を実行します。

これで、2つの永続ボリュームが利用可能になったので、Pi-hole の基本 Docker イメージを使用して Docker コンテナーを実行する準備が整いました。ただし、まず、ローカル IP アドレスをメモする必要があります。

以下のコマンドを実行して、ローカル IP アドレスを取得します。単一の Docker コマンドを正しく実行するためには、ローカル IP アドレスが必要です。

ipconfig /all

次に、以下のコマンドを実行して、Docker ハブから pihole/pihole のベースイメージを取得します。以下の表を参考にして、値を適切に置き換えます。表は、コマンドの目的ごとに各フラグを説明しています。

docker run --name=pihole -e TZ=Asia/Manila -e WEBPASSWORD=password -e SERVERIP=YourIPAddressHere -v pihole_app:/etc/pihole -v dns_config:/etc/dnsmasq.d -p 81:80 -p 53:53/tcp -p 53:53/udp --restart=unless-stopped 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ベースイメージを取得します

Downloading pihole/pihole image.

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

Seeing the Pi-hole Docker Container Running Properly.

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」です(引用符なし)。

Accessing the Pi-hole dashboard.

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

Viewing Pi-hole dashboard Default Page.

ホストのDNSサーバーをPi-holeのIPアドレスに設定する

Pi-holeサーバーが稼働している場合、ローカルシステムで広告をブロックするにはどうすればよいですか? ローカルシステムにすべてのリクエストをPi-holeのIPアドレスにルーティングし、一致する広告をブロックするように設定する必要があります。以下に続けて読んでください!

1. Windowsシステムトレイにあるネットワーク設定アイコンを右クリックし、「ネットワークとインターネットの設定を開く」を選択して、マシンのすべてのネットワークアダプターのリストを表示します。

Accessing Network & Internet Settings

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

Accessing Network Adapter Properties.

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

Accessing IPv4 Properties.

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サーバーに指定することもできます。
Configuring IPv4 Properties

単一デバイスのDNSの設定

スマートフォンや他のデバイスが同じネットワークに接続されていると仮定し、そのデバイスのDNSサーバーをホストのIPアドレスに合わせることができます。このチュートリアルでは、スマートフォンが同じネットワークに接続されています。

1. スマートフォンの無線ネットワーク設定で、手動をタップし、ホストマシンのIPアドレスを入力します。Pi-holeが失敗した場合のために、代替IPアドレスも追加することができます。

スマートフォンの無線ネットワーク設定インターフェースは異なる場合があります。

Configuring DNS server on smartphone

2. スマートフォンのウェブブラウザで広告が多いウェブサイトを訪れてください。

この例では、Daily MailのウェブサイトとNew York Timesのウェブサイトが5〜10分間繰り返し訪れられました。Pi-holeダッシュボード上のライブブラウザ管理者は、デバイスからのブロックされた広告の数を示しています。以下に示すように。

このバーチャートは、この執筆時点でのPi-holeの最新バージョンの新しい追加機能です。一部の古いバージョンでは、代わりに折れ線グラフがあります。

Running Docker Pi-hole in Action with a Smartphone Usage for 5-10 Minutes

ルーター設定を介したホームネットワーク全体のブロックを有効にする

単一のデバイスでDNSサーバーを構成する代わりに、ルーター設定ですべてのデバイスのDNSサーバーを構成してみてください。ルーターによっては、IPアドレスを使用するための規定がある場合とない場合があります。

このデモでは、ルーターがDNSサーバーやDHCPの変更にアクセスを許可しなかったため、ルーターの制約により、ホームネットワーキングは完全に探求されませんでした。

サンプルの管理者ビューでは、DNSサーバーIPを単一のデバイスで行ったのと同じ方法でエンコードできる場合があります。このデモでは、ISPにロックされたProlink PRS1841U-v2ルーターを使用しています。

DNS構成インターフェースはルーターによって異なりますが、設定は以下のように見えます。

Manually setting a router DNS settings.

ルーターで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ボリュームに保持します。

docker cp blocklist.txt d70:/etc/pihole/blacklist.txt

最後に、Pi-hole管理ダッシュボードに戻ります。 左パネルのツールメニューをクリックして、Gravityを更新リンクをクリックします。 最後に、更新をクリックして、Pi-holeがブロックするURLの更新されたリストを取得します。

Showing Update Gravity on Pi-hole UI after Copying Additional Website Blacklists on Text File

A successful update will look like the one below.

Showing Display of Update Gravity Success

コンソールを使用してWebサイトのブロックリストを更新する

おそらく、Pi-holeダッシュボードを操作する代わりに、コンソールコマンドを実行したい場合があります。 その場合は、PowerShellでdockerコマンドを実行してWebサイトをブロックできます。 以下のdocker execコマンドを実行して、コマンドを実行できるpihole_app Dockerコンテナーへの対話型ターミナルセッションを作成します。

docker exec -it pihole_app /bin/bash

ターミナルセッションが開いたら、以下のコマンドを実行してPi-holeのURLのブラックリストを更新します。

pihole -g

定期的にpihole -gを再実行して、広告ブロッカーを更新してください。

URLのコミュニティメンテナンスされたブラックリストを使用してWebサイトをブロックする

一部のURLは定期的に更新されていますが、他のURLはそうではないため、古いリストからブラックリストをアップロードすると、最新の変更が反映されない場合があります。

Pi-holeのAdlistブロックリストグループ管理機能を活用します。 Pi-holeダッシュボードで、左パネルのグループ管理Adlistsメニューをクリックし、追加をクリックして、Pi-holeに追加するURLリストを選択します。

Adding a Community-Maintained Blacklists of URLs for Pi-hole to Block

結論

このチュートリアルでは、Pi-Hole Dockerイメージのダウンロード方法、アクティブなリスニングPi-holeウェブインターフェースのテスト方法、外部デバイスをPi-holeに接続してテストする方法を学びました。広告やウェブサイトをブロックする方法も学び、Pi-holeダッシュボードがそれらをブロックする様子を見ました。

この知識を活用して、なぜ他のホストマシンを使用して同じネットワーク内の他の接続されたデバイスに広告をブロックしないのでしょうか?

Source:
https://adamtheautomator.com/pi-hole-in-docker/