Pi-HoleはAd Block機能付きのDNSサーバとDHCPサーバを持つツールである.本ページではそれをDockerを用いてUbuntu上に導入する方法を記述する.
前提条件
- DNS,DHCPなどのネットワークの知識を有していること
- Dockerの知識をある程度有していること
- Pi-Holeについてある程度知識を有していること
準備
$ ip a
を使用して,listenするネットワークインタフェース名を調べる
例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 34:97:f6:8d:6a:68 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.102/24 brd 192.168.10.255 scope global noprefixroute enp0s31f6
valid_lft forever preferred_lft forever
inet6 fe80::3697:f6ff:fe8d:6a68/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:7a:85:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:29:6a:19:15 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
この場合「enp0s31f6」である.
/opt/pi-holeディレクトリの作成
設定ファイルなどをDocker上で保持するため「/opt/pi-hole」ディレクトリを作成する.そしてその中に,「etc-dnsmasq.d」と「etc-pihole」というディレクトリを作成する.
compose.yamlの作成
先ほど作成した/opt/pi-holeにcompose.yamlを次のように作成する
services:
pihole:
image: pihole/pihole
network_mode: host # DHCPを機能させるために必須
environment:
TZ: 'Asia/Tokyo'
WEBPASSWORD: hogehoge #好きなパスワードに設定してください
WEB_PORT: 8080 #好きなポートに設定してください
PIHOLE_INTERFACE: enp0s31f6 #「準備」で調べたネットワークインタフェース名
INTERFACE: enp0s31f6 #「準備」で調べたネットワークインタフェース名
volumes:
- './etc-pihole:/etc/pihole' # 先ほど作成したディレクトリをコンテナ内から見えるようにする
- './etc-dnsmasq.d:/etc/dnsmasq.d'# 先ほど作成したディレクトリをコンテナ内から見えるようにする
cap_add:
- NET_ADMIN
restart: unless-stopped
最後に$ docker-compose up -d --build
すればOK
筆者がハマったポイント
PIHOLE_INTERFACE: enp0s31f6 #「準備」で調べたネットワークインタフェース名
INTERFACE: enp0s31f6 #「準備」で調べたネットワークインタフェース名
の両方の環境変数を設定しないとリッスンするインタフェースが勝手にeth0になって困っておりました.ChatGPTに助けてもらって解決しました.