Pi-hole 備忘録

Networks
Photo by hyt.

Pi-hole 備忘録です.

なお,Pi-Hole を使った雑感についてはいろいろ思うところもありますので本記事とは別に記事を書きたいと考えています.

Pi-hole とは?

公式 Git サイト

Pi-hole
A black hole for Internet advertisements. Pi-hole has 21 repositories available. Follow their code on GitHub.

によると,

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 に入れ替えた結果,これが使えなくなってしまったことから,その代わりとして新たに導入してみました.

NEC X2207 雑感
NEC X2207 雑感です. いつもの通り結論から記すと, ファームウェアがそれなりに新しいならいろいろできるので良い選択! だと思います. 導入理由 自宅用のメインルーターとして導入しました. いままで,Ubiquiti Edgerou...

導入方法について

公式サイト

Pi-hole – Network-wide Ad Blocking

によると,導入方法は,

  1. Linux の docker のコンテナとして導入
  2. Linux に直接導入

の2つです.また,

  1. Pi-Hole を DNS サーバーとして使う
  2. 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 も導入しました.

EGINX PROXY MANAGER 備忘録と雑感
Eginx Proxy Manager 備忘録と雑感です. いつもの通り結論から書くと, 自宅で複数 Web サービスを運用するときの飛び道具! だと思います. NGINX PROXY MANAGER って? 高速が売りの Web Serv...

実際の導入方法は,以下のように 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 の初期設定を行なっていきます.

Photo by hyt.

最低限の初期設定

ログインすると以下のような Pi-Hole の管理画面が現れます.なお,この画面の右上の hostname に表示されるのは Pi-Hole の docker CONTAINER ID です.

Photo by hyt.

Pi-Hole を使うため最低限行わなければならない設定は Pi-Hole が問い合わせを行う DNS の設定とクライアントの DNS を Pi-Hole に向ける(つまりクライアントの DNS のアドレスが 192.168.0.10 になるよう DHCP 等の設定を変更する)だけです.

Pi-Hole が問い合わせを行う DNS は,左側メニューの「Settings」を選びと上部に現れるタブから「DNS」を選択することで現れる以下のような画面で行えます.

Photo by hyt.

私の場合はローカルのサーバーの名前解決のため,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 設定画面の最も下の方に設定場所が用意されています.

Photo by hyt.

設定すべき内容は以下の2つです.

  • Local network in CIDR notation
  • IP Address of your DHCP Server (router)

2つめは Adlists の追加です.これは Pi-Hole 設定画面の左側メニューの「Adlists」から行えます.

残念ながら Pi-Hole は初期状態だと広告フィルタリングの効果があまり高くなく,これを改善するにはブロックするアドレスのリストを Adlists からある程度追加してやらなければなりません.

Photo by hyt.

実際に利用できるリストとして,

The Big Blocklist Collection
Pi-hole compatible blocklists for you to have a more enjoyable online presence
GitHub - lightswitch05/hosts: Hostfile blocklist for ads and tracking, updated regularly
Hostfile blocklist for ads and tracking, updated regularly - GitHub - lightswitch05/hosts: Hostfile blocklist for ads an...
BlockList:Project
Generated by create next app
oisd | domain blocklist
oisd domain blocklist official homepage

などがあります.

アップデート

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 で確認できます.

なお,アップデート手順については,記事

Upgrading a Pi-hole Docker container
Upgrading Pi-hole is easy: pihole -up However, this doesn't work if you're running a Docker container. docker exec -it p...

を参考にしましたが,この記事の通りだと古いイメージがそのまま起動してきてしまいました.このため,上の手順では旧イメージを削除する部分を追加しています.

以上!

NetworksServer
スポンサーリンク
Following hyt!
hyt adversaria
タイトルとURLをコピーしました