Podman で Pi-hole を使う備忘録

Environment
Photo by hyt.

Podman で Pi-hole を使う備忘録です.

https://amzn.to/4g2ld73

Pi-hole を DNS サーバーとしてのみ使う

Pi-hole を広告ブロック機能付きの DNS として使うだけの場合は,Podman でも Docker の場合とほぼ同様に使えます.詳しくは以前の記事

Pi-hole 備忘録
Pi-hole 備忘録です.なお,Pi-Hole を使った雑感についてはいろいろ思うところもありますので本記事とは別に記事を書きたいと考えています.Pi-hole とは?公式 Git サイトによると,Network-wide ad bloc...

をご覧ください.ただし,restart: unless-stopped は使えないので,この部分は restart: always とする必要があります.

https://amzn.to/4g2ld73

Pi-hole を DNS + DHCP サーバーとして使う

Pi-hole コンテナで DHCP を使うには,dhcphelpler

GitHub - homeall/dhcphelper: DHCP relay for DHCP Server in the docker container.
DHCP relay for DHCP Server in the docker container. - homeall/dhcphelper

を使う必要があります.また,上記の 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 サーバー,オススメです.もちろん,コンテナを起動できるような環境のある逸般の誤家庭でなければならないという条件を満たさないと使えないんですけどね.

https://amzn.to/4g2ld73

以上!

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