はじめに
自宅の広告ブロック環境(Pi-hole)をDockerで構築しました。
ネットワーク構成のポイント
UGREEN NASでPi-holeをDockerで動かす際、ポート53の衝突を避けるために macvlan を使用しました。 UGREEN NASではポート53が最初から使用済みです。
- Pi-hole IP:
192.168.1.200(macvlan) - NAS本体 IP:
192.168.1.151(物理NIC) - 注意点: macvlanの仕様上、ホスト(NAS)とコンテナ(Pi-hole)間の直接通信はできません。これが後のDNS設定で重要な意味を持ちます。
Pi-holeの構築手順
Docker Composeで構築します。 ※あらかじめdnsmasq.dとpiholeディレクトリを作成しておくこと。 volume1は各自の環境で読み替えてください。 – /volume1/docker/pihole/dnsmasq.d:/etc/dnsmasq.d – /volume1/docker/pihole/pihole:/etc/pihole
docker-compose.yml
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole-macvlan
cap_add:
- CAP_NET_RAW
- CAP_NET_BIND_SERVICE
- CAP_CHOWN
environment:
- TZ=Asia/Tokyo
- FTLCONF_webserver_api_password=yourpassword # ログインパスワードを設定
- DNSMASQ_LISTENING=all
- FTLCONF_webserver_port=8000
- DNSMASQ_USER=pihole
- FTLCONF_LOCAL_IPV4=192.168.1.200 # Pi-holeに割り当てるIP
volumes:
- /volume1/docker/pihole/dnsmasq.d:/etc/dnsmasq.d
- /volume1/docker/pihole/pihole:/etc/pihole
networks:
pihole_net:
ipv4_address: 192.168.1.200 # 上記と同じIPを指定
restart: always
networks:
pihole_net:
driver: macvlan
driver_opts:
parent: eth0 # コントロールパネルのネットワーク設定で、実際にLANケーブルが刺さっているポート名を確認してください
ipam:
config:
- subnet: 192.168.1.0/24 # 自宅のネットワーク範囲
gateway: 192.168.1.1 # ルーターのIP
ip_range: 192.168.1.200/32 # Pi-hole専用に確保するIP
広告ブロックリスト追加
pihole(http://192.168.1.200:8000/) にログインし、Listsより、Add blocklistで追加していく。 追加後、ToolsにあるUpdate GravityでUpdateボタンをクリックしてデータベースを更新する。
【断念したこと】外出先からのDNS利用
当初はTailscaleの「Override local DNS」を使い、外出先のスマホからも自宅Pi-hole経由で広告ブロックを試みましたが、最終的にこの構成は断念しました。
発生した事象
Tailscale管理画面でPi-holeのIP(192.168.1.200)をGlobal Nameserverに登録し、Override設定を有効にしたところ、外部ネットワーク(4G/5G)から名前解決ができず、インターネット接続が不能になりました。
技術的な考察とハマりポイント
解決のために以下の確認も行いましたが、安定稼働には至りませんでした。 Pi-holeのインターフェース設定: Settings > DNS > Interface settings を Permit all origins に変更。Tailscale(100.x.y.z)からのクエリを許可するようにしましたが、macvlanとの相性か、パケットが正しくルーティングされませんでした。
