昨天站里发了 Pi-hole 的项目介绍(《开源项目 Pi-hole:全家广告拦截,一台树莓派就够》),评论区和掘金帖子里问得最多的就是「到底怎么装」。这篇把两种主流部署方式一次讲透:树莓派/软路由一键脚本,和 Docker 方式。跟着走,半小时内全家广告消失。
开始前:先记下你现在的 DNS
这是最重要的准备工作,没有之一。动手前把当前的上网设备(或路由器)的 DNS 设置截图/记下来——万一 Pi-hole 配错了,全家断网时你能 30 秒回滚。昨天掘金帖子里我也强调过:填错一行,全家断网。
硬件二选一:树莓派(3B+ 及以上,7×24 开机)或软路由/旁路由(x86 小主机、OpenWrt 设备)。记住铁律:Pi-hole 必须装在 7×24 开机的设备上,它一关,全家裸奔——DNS 解析直接挂掉。
方式一:一键脚本(树莓派/ Debian 系最省事)
Pi-hole 官方提供了一键安装脚本,Debian/Ubuntu/Raspbian 上直接跑:
curl -sSL https://install.pi-hole.net | bash
脚本是交互式的,会一步步问你:上游 DNS 选哪个(建议选 Cloudflare 或 Google,二选一就行)、要不要装 Web 管理界面(选 Yes)、要不要开查询日志(建议开,方便排查)。全程 5-10 分钟,装完它会给你一个管理界面地址和初始密码——密码当场记下来,丢了就得重置。
装完先别急着切全家 DNS,用单台电脑手动把 DNS 指向 Pi-hole 的 IP,刷几个常去的网站确认广告确实没了、管理界面能看到拦截统计,再推广到全家。
方式二:Docker 部署(软路由/ NAS 用户推荐)
已经在跑 Docker 的设备,直接一条命令:
docker run -d
--name pihole
-e TZ=Asia/Shanghai
-e WEBPASSWORD=自己设一个强密码
-p 53:53/tcp -p 53:53/udp
-p 80:80
--restart=unless-stopped
pihole/pihole
注意 53 端口:Ubuntu/Debian 系统上 systemd-resolved 默认占着 53 端口,会导致容器起不来。先 sudo lsof -i :53 看一眼,被占了就把 systemd-resolved 的 DNSStubListener 关掉再起容器——这是 Docker 方式最常见的坑,没有之一。
让全家设备走 Pi-hole:改 DHCP 就行
最省事的办法不是一台台改设备,而是去路由器后台,把 DHCP 下发的 DNS 改成 Pi-hole 的内网 IP。这样家里所有新连入的设备自动走 Pi-hole,老设备重连一次 Wi-Fi 就生效。光猫拨号的用户注意:改的是你自己路由器的 DHCP,不是光猫。
旁路由模式的用户:记得在 Pi-hole 里把上游 DNS 填好,并确认旁路由的网关指向正确,否则会出现「能上 QQ 打不开网页」这种诡异现象——本质都是 DNS 没走通。
常用命令:这 5 条够用 90% 的场景
pihole -w example.com # 白名单:某个网站打不开了,先加白名单试试
pihole -b ads.example.com # 黑名单:手动拉黑某个广告域名
pihole -up # 升级 Pi-hole 到最新版
pihole -t # 实时看 DNS 查询日志,排查利器
pihole status # 看服务状态,断网时先跑这个
管理界面里还有个宝藏功能:Query Log(查询日志)。家里哪个设备在半夜疯狂请求奇怪域名,一眼就能看到,顺手还能发现流氓软件。
踩坑清单:这 4 个坑 80% 的人会踩中一个
1. 银行/政务类 App 打不开。这类 App 对 DNS 环境异常敏感,Pi-hole 拦截了它们的统计域名就可能罢工。别硬扛,直接白名单放行——广告拦截和能用之间,永远选能用。
2. 53 端口冲突。上面 Docker 部分讲过,systemd-resolved 是头号嫌疑人,OpenWrt 上则是 dnsmasq 本身占着 53,记得先停掉或改端口。
3. IPv6 漏网。只配了 IPv4 的 DNS,广告走 IPv6 照样进来。要么在路由器上把 IPv6 的 DNS 也指向 Pi-hole,要么干脆关掉 IPv6 下发——二选一,别留一半。
4. 规则列表贪多。新手容易一口气订阅十几个拦截列表,结果正常网站大面积误杀。建议从默认列表开始,只在有漏网广告时再针对性加。拦截率和误杀率永远是跷跷板。
日常维护:装完不是一劳永逸
每月跑一次 pihole -up 升级;Web 界面的密码定期换;偶尔看看 Query Log 里拦截量 Top 的域名,确认没有误伤常用服务。Pi-hole 本身资源占用极小,树莓派 Zero 级别的设备都能带,维护成本基本就是「记得它存在」。
和 AdGuard Home 二选一就行:AdGuard Home 界面更现代、规则订阅更傻瓜,Pi-hole 社区更老、资料更多。昨天站里两篇都发了,选哪个看眼缘,效果大差不差。
站长点评:我自己家里跑 Pi-hole 快两年,最大的体会是:广告拦截只是附赠品,真正的价值是「你终于看得见家里每台设备在跟谁说话」。那次半夜发现电视盒子每小时请求几百次统计域名,比拦掉几个横幅广告震撼得多。动手前记住两件事:DNS 原值先记下来;别在出差前一天折腾——这两条都是血泪换来的。