Pi-hole 備忘録です.
なお,Pi-Hole を使った雑感についてはいろいろ思うところもありますので本記事とは別に記事を書きたいと考えています.
Pi-hole とは?
公式 Git サイト
によると,
Network-wide ad blocking via your own Linux hardware
だそうです.つまり,Linux で動く機器を用いてネットワークレベルで広告ブロックを行ってくれるアプリというかアプライアンスです.もともとは確かシングルボードコンピュータ Raspberry pi を用いていたので,名称に Pi が入っていたと記憶しています.
広告を配信するドメインの IP アドレスを 0.0.0.0 などの無関係なアドレスに置き換えてしまうことで広告ブロックを実現する仕組みなので,ローカルネットワークの PC の DNS 問い合わせ先をこの Pi-Hole に向けるだけで,OS に関係なく広告ブロックを行うことができるのが特徴というか,良いところでしょう.自宅で使うクライアントをまとめて広告ブロックに対応させられる訳ですね.
導入理由
つい最近まで使っていたルーターである openwrt on Edgerouter-X には同様のことができる Adblock というパッケージをがあり,非常に便利だったのですが,最近ルーターを NEC の IX2207 に入れ替えた結果,これが使えなくなってしまったことから,その代わりとして新たに導入してみました.
導入方法について
公式サイト
によると,導入方法は,
- Linux の docker のコンテナとして導入
- Linux に直接導入
の2つです.また,
- Pi-Hole を DNS サーバーとして使う
- Pi-Hole を DNS & DHCP サーバーとして使う
のどちらを選択するのかも考えなければなりませんが,今回は,最も簡単な
- Linux の docker コンテナとして導入
- Pi-Hole を DNS サーバーとして使う
前提としました.
なお,Pi-Hole を DNS & DHCP サーバーとして使うと,DHCP でアドレスを割り当てた機器の DNS の問い合わせ状況についても,IPアドレスではなく FQDN 名で Pi-Hole から参照できるようになるらしいのですが,私の場合はいまのところそこまでの必要性を感じていないので,DHCP については引き続きルーターの機能を利用することにしました.
導入から初期設定まで
私の場合はすでに Eginx Proxy Manager などが動いている docker 導入済みの Alpine Linux がありましたので,これに合わせて Pi-Hole も導入しました.
実際の導入方法は,以下のように docker-compose.yml を作成して,
$ cd compose $ mkdir pihole $ vi docker-compose.yml version: "3" # More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/ services: pihole: container_name: pihole image: pihole/pihole:latest ports: - "53:53/tcp" - "53:53/udp" - "4080:80/tcp" environment: TZ: 'Asia/Tokyo' WEBPASSWORD: 'XXXXXXXXXXXXXXXXXX' volumes: - '/var/lib/docker/volumes/pihole/etc-pihole:/etc/pihole' - '/var/lib/docker/volumes/pihole/etc-dnsmasq.d:/etc/dnsmasq.d' restart: unless-stopped networks: default: enable_ipv6: true ipam: config: - subnet: fd3a:3aa4:b089:1::/64 gateway: fd3a:3aa4:b089:1::1
最後に,
$ docker-compose up -d
です.なお,最新の Alpine Linux では docker-compose がパッケージで導入できなくなってしまったので,この場合は,
$ docker compose up -d
とするだけです(私の場合は docker を一般ユーザー権限で使えるよう設定しているため,上のコマンドで良いのですが,もし設定していないなら sudo を前につけるか root 権限で起動する必要があります).
なお,この docker-compose.yml だと,
- Pi-Hole 管理画面の初期パスワードが XXXXXXXXXXXXXXXXXX
- Pi-Hole 管理画面のアドレスが http://192.168.0.10:4080
です.ただし,192.168.0.10 は docker server の IP アドレスで,ポート番号を4080番としたのはすでにこの docker server で Eginx Proxy Manager が動いていて 80 番ポートを使用済みだからです.
あとはブラウザで http://192.168.0.10:4080 にアクセスすると,以下のような管理画面へのログインページが開きますので,初期パスワードを用いてログインして Pi-Hole の初期設定を行なっていきます.
最低限の初期設定
ログインすると以下のような Pi-Hole の管理画面が現れます.なお,この画面の右上の hostname に表示されるのは Pi-Hole の docker CONTAINER ID です.
Pi-Hole を使うため最低限行わなければならない設定は Pi-Hole が問い合わせを行う DNS の設定とクライアントの DNS を Pi-Hole に向ける(つまりクライアントの DNS のアドレスが 192.168.0.10 になるよう DHCP 等の設定を変更する)だけです.
Pi-Hole が問い合わせを行う DNS は,左側メニューの「Settings」を選びと上部に現れるタブから「DNS」を選択することで現れる以下のような画面で行えます.
私の場合はローカルのサーバーの名前解決のため,Custom 1 (IPv4) に別のローカルの DNS サーバーのアドレスを指定していますが,その必要がなければ左側の Upstream DNS Servers から適当な DNS サービスにチェックを入れれば良いだけです.ただし,この部分,個人的には Custom にローカルの DNS サーバー(例えばルーターのアドレス)を設定しておくことをオススメしておきます(Pi-Hole にローカルの DNS サーバーを指定しておけば,ネットが切断されてもローカルのサーバーの名前解決は行えることが多いです.これにより,インターネットの接続に問題があるのか,ローカルのネットワークへの接続に問題があるのかすぐに分かる可能性が高まります).
推奨する追加設定
Pi-Hole を使うために最低限しなければならないことは上に書いた通りですが,合わせて以下の2つについてもはじめに設定しておくことをオススメします.
まず1つめは,Conditional Forwarding の設定です.この設定で,DHCP で IP アドレスを割り当てたクライアントの名称を(完全にではありませんが)Pi-Hole が FQDN で参照できるようになります.したがって,この設定は Pi-Hole を DHCP サーバーとして使う場合は必要ありません.
この設定項目は,上の DNS 設定画面の最も下の方に設定場所が用意されています.
設定すべき内容は以下の2つです.
- Local network in CIDR notation
- IP Address of your DHCP Server (router)
2つめは Adlists の追加です.これは Pi-Hole 設定画面の左側メニューの「Adlists」から行えます.
残念ながら Pi-Hole は初期状態だと広告フィルタリングの効果があまり高くなく,これを改善するにはブロックするアドレスのリストを Adlists からある程度追加してやらなければなりません.
実際に利用できるリストとして,
などがあります.
アップデート
Pi-Hole を Linux 上に直接導入した場合は,
$ pihole -up
とするだけでアップデートできるようですが,残念ながら docker で導入した場合はこれではうまくいきません.
Pi-Hole を docker で導入した場合はまず,最新の Pi-Hole イメージを pull します.
$ docker pull pihole/pihole Using default tag: latest latest: Pulling from pihole/pihole f03b40093957: Already exists 8063479210c7: Already exists 4f4fb700ef54: Already exists 061a6a1d9010: Pull complete 8b1e64a56394: Pull complete 8dabcf07e578: Pull complete bdec3efaf98a: Pull complete 40cba0bade6e: Pull complete 9b797b6be3f3: Pull complete Digest: sha256:8bc45afe1625487aef62859a5bf02f3d7b3429e480f4e29e4689635ab86ec312 Status: Downloaded newer image for pihole/pihole:latest docker.io/pihole/pihole:latest
その後,Pi-Hole のコンテナを停止します.
$ docker stop 79875b6d20b6 $ docker rm -f 79875b6d20b6
また,旧イメージファイルを削除します.
$ docker rmi 71b42cb09f14
最後に再度 Pi-Hole を起動します.
$ docker compose up -d [+] Running 1/1 ✔ Container pihole Started
実際にアップデートできているかどうかは Pi-Hole の Web 管理画面の一番下を見るか以下のようにして確認できます.
$ docker exec -it 325461296f33 pihole -v Pi-hole version is v5.17.1 (Latest: v5.17.1) AdminLTE version is v5.20.1 (Latest: v5.20.1) FTL version is v5.23 (Latest: v5.23)
ただし,ここで,
- 旧Pi-Hole のコンテナID: 79875b6d20b6
- 旧Pi-Hole のイメージID: 71b42cb09f14
- 新PI-Hole のコンテナID: 325461296f33
です.コンテナIDは docker ps で,イメージIDは docker images で確認できます.
なお,アップデート手順については,記事
を参考にしましたが,この記事の通りだと古いイメージがそのまま起動してきてしまいました.このため,上の手順では旧イメージを削除する部分を追加しています.
以上!