厌倦了每次上网或使用手机应用时都被广告狂轰滥炸?别担心,Pi-hole 提供了一个绝佳的解决方案,它本质上是一个智能 DNS 过滤器。最棒的是,你无需在家里的每台设备上都安装任何东西;该系统在你的网络核心运行,在垃圾内容到达你的屏幕之前就将其拦截并屏蔽。
要搭建这套系统,目前最明智的选择是使用 Docker。通过将 Pi-hole 放在容器中,您可以避免占用计算机操作系统资源,使更新变得极其简单,并最大限度地发挥硬件的性能——无论是树莓派、旧服务器,甚至是运行 Ubuntu 或 Debian 的虚拟机——而不会出现任何服务冲突。
先决条件和场地准备
在深入了解之前,值得一提的是,Pi-hole 非常轻量级。流畅运行它只需要大约512 MB 的内存和 2 到 4 GB 的磁盘空间。至于操作系统,它与使用 systemd 或 sysvinit 的发行版完美兼容,例如 Debian、Ubuntu、Fedora 或 Raspberry Pi OS。
网络是关键所在。为了保证系统稳定运行,Pi-hole 需要一个静态 IP 地址。如果您不想手动配置服务器,可以在路由器上预留一个 IP 地址,这样路由器就会始终为运行 Pi-hole 容器的计算机分配相同的地址。
使用 Docker 部署 Pi-hole
最简单的设置方法是通过docker-compose.yml文件。这种方法允许您一次性定义所有配置。务必将卷(例如 /etc/pihole 和 /etc-dnsmasq.d)映射到主机上的本地文件夹,这样即使更新容器镜像,也不会丢失所有配置或黑名单。
在配置文件中,请注意端口设置。端口 53 是 DNS 服务的核心端口,必须保持空闲。如果容器无法启动,很可能是主机上的systemd-resolved 或 dnsmasq 服务占用了该端口。在这种情况下,您需要禁用冲突的服务,或者配置一个网桥来重定向流量。
如果您决定同时使用 Pi-hole 作为 DHCP 服务器,请记住在 compose 的 cap_add 部分添加NET_ADMIN功能,并且最好使用主机网络模式 (network_mode: host) 以避免连接问题。
初始设置和访问管理
执行命令后 docker-compose up -d系统即将上线。要访问控制面板,请通过您分配的端口(默认端口为 80,但您可以将其更改为 8080 或 89 以避免与其他 Web 服务器冲突)连接到服务器的 IP 地址。如果您没有在环境变量中定义密码…… 网页密码系统会生成一个随机值,您可以通过以下命令查看日志来找到它。 docker logs pihole | grep random.
为了提高安全性,最好尽快更改密码。您可以使用以下方式访问容器终端: docker exec -it pihole /bin/bash 并运行命令 pihole -a -p 设置一个自己容易记住但别人难以记住的密码。
上游过滤和DNS优化
为了确保 Pi-hole 在无法识别地址时知道该向哪个 DNS 服务器查询,您需要配置一个上游 DNS 服务器。Quad9 是一个非常可靠的选择;只需在 DNS 设置选项卡中选择其过滤的服务器(例如 9.9.9.9)即可。这可以为您的浏览活动增加一层额外的安全性和隐私保护。
Pi-hole 的核心在于其屏蔽列表。如果您想从一份可靠的列表开始,可以添加StevenBlack的列表。无论何时修改列表,无论是使用 SQLite3 删除条目还是添加新的 URL,都必须前往“工具”菜单并运行“更新 Gravity”命令,以便刷新数据库并使更改生效。
进阶技巧:本地域名和管理
如果您在家中使用多种服务,您可以创建 本地域名 为了避免记住 IP 地址,请创建一个名为 `.ips` 的文件。 local.list 在已挂载的 Pi-hole 卷上,定义 IP 和域名格式。然后,创建一个引用该列表的 dnsmasq 配置文件,并重启容器。
无需访问网站即可管理系统,您可以从主机运行一些非常有用的命令。例如,要将域名添加到黑名单,请使用`pihole -b mydomain.com`;要暂时禁用过滤 10 分钟,可以使用`pihole disable 10m`,这在误屏蔽合法网站时非常方便。
通过结合适中的硬件和 Docker 的灵活性,确保 53 端口畅通,并正确配置数据卷以持久化数据,完全可以掌控家庭广告。一旦您调整了路由器上的 DNS 设置并优化了 Gravity 列表,您就能在所有设备上享受更流畅、更快速的网络体验。
