Pi-Hole Docker 笔记

之前因为 Pi-Hole 在家庭网络里的重要地位,甚至导致家庭控制器的 Ubuntu 系统升级推迟了一年。毕竟从 20.04 升级到 22.04 需要大量的重新配置工作。所以,把 Pi-Hole 移到 Docker 里面便成为一个必要的步骤。

之前尝试将设置导出,并且直接创建 Pi-Hole 容器,直接使用导出的设置。但是结果是 FTL 崩溃,不管是 bridge 网络还是 host 网络均以 FTL 崩溃告终。

后来发现,如果把 DHCP 关掉,只用 DNS 部分是没问题的。再进一步,终于找到了解决办法。

1. 清理 DHCP 的 IP 分配租约

IP 租约数据库是放在容器内路径 /etc/pihole/pihole-FTL.db。所以我们只要删了主机端映射目录下的文件就好。

rm /docker/pihole/etc-pihole/pihole-FTL.db

2. (可选)将主机端的 cloudflared 上游解析绑定到所有 IPv4 地址

这个通过向 /etc/cloudflared/config.yml 中加入以下一行即可实现。

proxy-dns-address: 0.0.0.0

3. 确保使用 host 网络并加入 NET_ADMIN 权限

具体 docker 命令可以参考以下示例。

sudo docker run -d \
    --name pihole \
    -v "/docker/pihole/etc-pihole:/etc/pihole" \
    -v "/docker/pihole/etc-dnsmasq.d:/etc/dnsmasq.d" \
    -v "/docker/pihole/log:/var/log/pihole" \
    --restart=unless-stopped \
    -e DNSMASQ_USER=root \
    -e FTLCONF_LOCAL_IPV4=192.168.1.1 \
    -e TZ="America/Toronto" \
    -e WEBPASSWORD="admin" \
    -e DNSMASQ_LISTENING=all \
    -e WEB_PORT=8080 \
    --cap-add=NET_ADMIN \
    --net=host \
    pihole/pihole:latest

4. 关掉 DHCPv6 支持

浏览器访问 Pi-Hole 管理界面,在左面导航栏点击“settings”,然后右侧上面选择“DHCP”选项卡,在右面的“Advanced DHCP settings”中,将“Enable IPv6 Support (SLAAC+RA)”一项关掉,拉到页面底部点“save”即可。

pi-hole-advanced-dhcp-settings.png

5. 有问题,查日志

日志在容器中的 /var/log/pihole 路径下,对应主机端的文件就是

tail /docker/pihole/log/FTL.log
添加新评论