Podman で Pi-hole を使う備忘録です.
Pi-hole を DNS サーバーとしてのみ使う
Pi-hole を広告ブロック機能付きの DNS として使うだけの場合は,Podman でも Docker の場合とほぼ同様に使えます.詳しくは以前の記事
をご覧ください.ただし,restart: unless-stopped は使えないので,この部分は restart: always とする必要があります.
Pi-hole を DNS + DHCP サーバーとして使う
Pi-hole コンテナで DHCP を使うには,dhcphelpler
を使う必要があります.また,上記の dhcphelper のページには Pi-hole 用の docker-compose.yaml の設定例が載せられていますが,残念ながらそのままだと DHCP サーバーを起動時にエラーが出て Pi-hole が停止してしまいます.
試行錯誤した結果,以下のように docker-compose.yaml を書き換えることで DNS + DHCP サーバーとして Pi-hole を起動できています.
# 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" - "80:80/tcp" environment: TZ: 'Asia/Tokyo' WEBPASSWORD: 'xxxxxxxxxxxx' volumes: - '/var/lib/containers/volumes/pihole/etc-pihole:/etc/pihole' - '/var/lib/containers/volumes/pihole/etc-dnsmasq.d:/etc/dnsmasq.d' depends_on: - dhcphelper cap_add: - NET_ADMIN - NET_RAW restart: always networks: pihole: ipv4_address: 172.31.0.100 dhcphelper: restart: always container_name: dhcphelper network_mode: "host" image: homeall/dhcphelper:latest environment: IP: '172.31.0.100' TZ: 'Asia/Tokyo' cap_add: - NET_ADMIN networks: pihole: driver: bridge name: pihole enable_ipv6: true ipam: driver: default config: - subnet: 172.31.0.0/16 gateway: 172.31.0.1 - subnet: fd3a:3aa4:b089:1::/64 gateway: fd3a:3aa4:b089:1::1
Pi-hole の起動と停止は以下の通りです.
$ sudo podman-compose up -d $ sudo podman-compose down
ただし,上記のままだと,Pi-hole から割り当てられる DNS アドレスが 172.31.0.100 となります.つまり,Pi-hole コンテナに割り当てられる Podman ネットワークのアドレスがそのままクライアントに割り当てられてしまいます.
これを避けるには,/var/lib/containers/volumes/pihole/etc-dnsmasq.d に(上の設定ファイルの volumes に指定しているフォルダ)に以下の内容のファイルを作成してください.
$ sudo vi 07-dhcp-options.conf dhcp-option=option:dns-server,192.168.0.10 # コンテナを起動しているサーバーのアドレス
なお,DHCP でのアドレスの割り当てがうまくいかない場合は,podman サーバーのファイアウォールの設定を見直してください.dhcphelper を使うには 67/udp が開いていないといけません.Github の dhcphelper のページに,uc コマンドを利用してこれをチェックする方法が記されています.Ubuntu 24.04.1 の場合は以下のようにすることでチェックできます.
$ sudo apt install netcat-openbsd $ nc -uzvw3 127.0.0.1 67 Connection to 127.0.0.1 67 port [udp/bootps] succeeded!
Pihole の使い勝手
Pi-hole を DNS + DHCP サーバーとして利用することで,DHCP でアドレスが割り当てられると同時に DNS で当該機器の名前解決ができるようになり,かなり使い勝手が向上しました.あと,GUI で簡単に機器に応じて IP アドレスと FQDN 名を DHCP で固定割当できるのもとても良い.
市販のルーターでも最近のものは同様の機能を持っているもの多いですが,Pi-hole ほどには柔軟性は高く無いです.と言うのも Pi-hole の DNS + DHCP は基本的には dnsmasq なので,困ったときは Pi-hole コンテナの dnsmasq の設定を書き換えれば済みますし,実際,Pi-hole はこの書き換えを考慮した設計になっています.
と言うことで,Pi-hole で DNS + DHCP サーバー,オススメです.もちろん,コンテナを起動できるような環境のある逸般の誤家庭でなければならないという条件を満たさないと使えないんですけどね.
以上!