Install Pi-hole
Install Pi-hole
Ubuntu 22.04 をインストールした Raspberry Pi 4 に Docker 版の Pi-hole をインストールします。
Pi-hole の詳細は本家の説明を読んで頂くとして、私が利用を初めたのは家の古い端末でウェブサイトを表示した際のページの表示速度を何とか早くできないか?と考えたのがきっかけです。
広告の画像や動画が表示されない分、表示が早くなってインターネットが快適になるはず。
実際、スマホではいくつかのアプリ内の広告も非表示になるので余計な情報が目に入らないだけでも快適。
家庭のネットワークに導入すると家族全員が恩恵を受けられるなら、休日に作業してても家族に言い訳できる?というのも理由かもしれません。
Environment
- Raspberry Pi 4
- OS: Ubuntu Server 22.04
Installation
Docker をインストールした後に Docker 版の Pi-hole をインストールします。
Install Docker
手順に従って、Docker が提供している Apt repository から Dokcer をインストールします。
過去に Ubuntu 標準の Docker をインストールしている場合は競合するのでアンインストールが必要です。
今回は初期セットアップなので不要でした。
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
Apt repositroy の GPG キーをインストール
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Apt repository を追加
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Docker をインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
バージョンを確認
$ docker --version
Output:
Docker version 24.0.6, build ed223bc
Free-up port 53
Ubuntu 22.04 では Port 53 が systemd-resolved によって利用されているので Pi-hole を起動する前にポートを開放します。
systemd-resolved
の設定を変更
echo '
# Cloudflare DNS
DNS=1.1.1.1
DNSStubListener=no' | \
sudo tee -a /etc/systemd/resolved.conf > /dev/null
systemd-resolved
を再起動
sudo systemctl restart systemd-resolved
Port 53 が利用されていた場合、次のようなエラーが出て Pi-hole の起動に失敗します。
Error response from daemon: driver failed programming external connectivity on endpoint pihole (xxxxx): Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use
Install Pi-hole Docker
Cloudflare DNS を参照。
IPv4:
- 1.1.1.1
- 1.0.0.1
IPv6:
- 2606:4700:4700::1111
- 2606:4700:4700::1001
sudo mkdir /opt/pi-hole
sudo chown $USER:$USER /opt/pi-hole
cd /opt/pi-hole
Docker compose file
file path: /opt/pi-hole/compose.yaml
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
# network_mode: "host" # For DHCP server
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
environment:
# https://github.com/pi-hole/docker-pi-hole#environment-variables
TZ: 'Asia/Tokyo'
PIHOLE_DNS_: 1.1.1.1;1.0.0.1;2606:4700:4700::1111;2606:4700:4700::1001 # Cloudflare
DNSMASQ_LISTENING: single
DNSSEC: true
DHCP_ACTIVE: false
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
# cap_add:
# - NET_ADMIN # Required only if you are using Pi-hole as your DHCP server
restart: unless-stopped
Run Pi-hole
cd /opt/pi-hole
sudo docker compose up -d
Restart Pi-hole
設定ファイル compose.yaml
の変更を反映させる為には container の down と up が必要になります。
stop と start または restart では設定は反映されません。
cd /opt/pi-hole
sudo docker compose down
sudo docker compose up -d
Password reset
今回の設定では Pi-hole の管理画面にログインする際のパスワードはランダムなものが設定されてるので、改めてパスワードを設定します。
sudo docker exec -it pihole pihole -a -p
Update docker image
Pi-hole の Docker image を更新する際は次のように down → pull → up の順でコマンドを実行します。
sudo docker compose down
sudo docker compose pull
sudo docker compose up -d
Static IP for eth0
DNS サーバーの IP address が変わらないように固定 IP を設定します。
現在のネットワークの Gateway (Default route) と空いてる IP address を調査して Static IP を設定します。
Docker や Pi-hole のインストール前にやった方が良かったかも。
例)
デフォルトゲートウェイ (router):
- IPv4: 192.0.2.1
- IPv6: 2001:db8::1
Raspberry Pi の eth0 に設定する IP アドレス:
- 192.0.2.10
- 2001:db8::10
DNS server (nameserver) は Cloudflare を参照:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
File path: /etc/netplan/99_config.yaml
network:
version: 2
ethernets:
renderer: networkd
eth0:
dhcp4: false
dhcp6: false
addresses:
- 192.0.2.10/24
- 2001:db8::10/32
nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
- 2606:4700:4700::1111
- 2606:4700:4700::1001
routes:
- to: default
via: 192.0.2.1
metric: 100
on-link: true
- to: default
via: 2001:db8::1
# wifis: # disable wifi after confirming the eth0 works
# renderer: networkd
# wlan0:
# dhcp4: false
# dhcp6: false
# optional: true
Wi-Fi (wlan0) は eth0 の Static IP の動作が確認できた後に無効化します。
設定を反映
sudo netplan apply
Update DHCP configuration
最後に、ネットワークに接続しているデバイスが Pi-hole を利用するように DHCP の設定を変更します。
Discussion