【去广告 01】Pi-hole 自托管去广告 DNS:把整屋广告掐在域名解析层
2026-08-15 · DevCraft Studio
介绍用低价 VPS 搭建 Pi-hole 作为全网 DNS 黑名单网关,讲清它拦广告/追踪器的原理边界(只挡域名层,挡不了 YouTube 内嵌广告),以及配合 DoH/DoT 与家庭路由器组网的实战配置。
去广告自托管 · 共 2 篇
结论先说在前面:Pi-hole 是圈内最经典的自托管去广告方案。把它装在一台低价 VPS 上,做成全网的 DNS 黑名单网关,就能一次把家里手机、电视、游戏机、智能音箱的广告和追踪器,统一掐在"域名解析"这一层。但它有明显的边界:它只挡"域名层",挡不了 YouTube、Spotify 那种和正片同域名的视频内嵌广告。本文是这套方案的"原理与家庭落地"篇——我会把 DNS 黑洞的工作机制拆到字节级,讲清 blocklist 是怎么被编译成引力库(Gravity)的,再手把手把整屋设备(含装不了插件的电视和 IoT)都纳进过滤,并给上游套上 DoH/DoT 加密防止运营商偷看。至于"跨地点随身防护"和 Pi-hole 与 AdGuard Home 的取舍,留在本系列第 02 篇:/vps-selfhost-pihole-adguard-2026。
延伸阅读
更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用、Ollama AI系列(2):VPS上的AI推理与API应用、【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPS、ARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?、Ollama AI系列(2):VPS上的AI推理与API应用。
一、Pi-hole 是什么:为什么它是网络级去广告的基石
要理解 Pi-hole,先得理解 DNS。你打开一个网页,浏览器先问 DNS 服务器:"raspberrypi.com 的 IP 是多少?"DNS 服务器回个地址,浏览器才去连。整个过程里,DNS 只负责"域名转 IP",它根本不在乎这个域名是给你看的正文,还是某家广告联盟的追踪脚本。Pi-hole 干的事,就是"横插"在你家和真实 DNS 服务器之间,自己扮演局域网里的 DNS 服务器。所有设备的 DNS 查询先打到 Pi-hole,它拿查询的域名去比对一份黑名单(blocklist)。如果域名在黑名单里,Pi-hole 不向上游询问,直接回一个"空地址"(通常是 0.0.0.0 或 NXDOMAIN),设备拿不到 IP,广告请求当场作废。如果域名不在黑名单,它才正常转发给上游解析,把真 IP 还给你。
这个机制有个好听的名字:DNS 黑洞(DNS sinkhole)。因为被拦的请求连你的局域网都没出去,所以不占带宽、不耗流量,页面加载反而常常更快。Pi-hole 官方把它定义为"网络层的广告与追踪拦截器",区别于只在单个浏览器里生效的插件。它最大的价值不在"能挡多少广告",而在"覆盖多少设备":只要设备的 DNS 指向它,无论电视、游戏机还是智能灯泡,全部被统一过滤,而这一切对设备本身完全透明。
二、一次 DNS 查询在 Pi-hole 里走完的完整旅程
把视角拉到一次具体查询,你就能看清 Pi-hole 到底做了什么。假设你的手机要打开某新闻 App,后台想拉取 ads.example.com 这个广告域名:
- 第一步,手机按系统 DNS 设置,把查询发给 Pi-hole(在你的 VPS 上,通常通过 WireGuard 隧道抵达)。
- 第二步,Pi-hole 在内存里的高速缓存里先找一遍:这个域名最近解析过吗?命中就直接回缓存结果,毫秒级应答。
- 第三步,缓存未命中,Pi-hole 拿域名去比对引力库(Gravity)——也就是汇总后的黑名单。命中黑名单,直接返回 0.0.0.0 或 NXDOMAIN,查询到此结束,广告请求被静默丢弃。
- 第四步,不在黑名单,Pi-hole 把查询转发给上游解析器(如 Cloudflare、或你自己跑的 Unbound),拿到真 IP 后回给手机,同时把结果写进缓存供下次复用。
整套流程里,真正"拦广告"的动作发生在第三步的比对。而引力库的质量,决定了能拦多少、会误杀多少。黑名单本身来自社区维护的列表,最常见的有 StevenBlack 的统一 hosts、OISD、Hagezi 等。一份默认列表通常覆盖几万到上百万个域名。Pi-hole 把这些列表汇总、去重、编译成自己的"引力库"(Gravity),你可以随时用 pihole -g 刷新。质量好的列表误杀率低,但没有任何列表能 100% 精准,偶尔某个正常网站因为依赖广告联盟的脚本而变怪,这时在后台点一下加白名单即可。理解了这个旅程,后面所有配置都是围绕"让查询可靠地经过 Pi-hole、且比对用的引力库足够好"展开的。
三、它能挡什么、挡不了什么:边界讲清,避免误判翻车
边界必须讲清楚,免得你装完发现 YouTube 还有广告就以为翻车了。下面分三类说:
- 能挡:独立广告域名的展示广告、视频贴片前的第三方广告、追踪像素、Google Analytics 这类第三方分析、智能电视和 App 的遥测上报、部分恶意软件与钓鱼域名。
- 挡不了:YouTube、Spotify、Hulu 这类把广告和正片放在同一个域名下投放的服务。DNS 只看到域名、看不到网址路径,分辨不出同域内的广告流量,硬拦 youtube.com 会把整个网站一起搞挂。
- 挡不了:用了 HTTPS 之后,Pi-hole 只能看到"你在访问哪个域名",看不到页面内容,所以无法做浏览器插件那种"把广告占位块隐藏掉"的美化过滤;也挡不了少数写死自己 DNS(如某些 Chromecast 直连 8.8.8.8,或 Firefox 内置 DoH)从而绕过 Pi-hole 的 App。
所以 Pi-hole 的定位是"网络级域名过滤",和浏览器里的 uBlock Origin 是互补关系,不是替代。下面的表把两者差异列清楚,帮助你建立正确预期:
| 对比项 | Pi-hole(网络层) | uBlock Origin(浏览器插件) |
|---|---|---|
| 覆盖范围 | 全网所有设备,含电视、游戏机、IoT | 仅装了插件的那个浏览器 |
| YouTube/Spotify 广告 | 挡不了 | 能挡(HTTP 层) |
| 美化隐藏广告占位 | 不能 | 能 |
| 电视/IoT 覆盖 | 能 | 不能 |
| 查询可见性 | 有完整 DNS 日志 | 无 |
| 部署复杂度 | 中等,需一台常开设备 | 极低,装一下就行 |
四、在 VPS 上装 Pi-hole:最小可行部署
落到能装的步骤。Pi-hole 官方提供一条安装脚本:在终端运行官方安装命令,按提示选择网卡、上游解析器、要启用的 blocklist,记下后台管理员密码即可。装完后在浏览器打开后台(默认 80 端口,建议用反代加 HTTPS),你会看到一个饼图显示今天拦了多少查询。最小可行部署只需要做一件事来确保安全:把监听模式设为"Allow only local requests"(仅允许本地请求)。因为你是通过 WireGuard 隧道访问 Pi-hole 的,对端会被识别为本地一跳,既安全又不影响使用;千万别设成"Permit all origins"把解析器敞开给全网,否则几小时就会被抓去参与 DNS 放大攻击。关于 WireGuard 隧道本身怎么搭、怎么让手机随身接入,这是本系列第 02 篇的核心内容,详见:/vps-selfhost-pihole-adguard-2026。
五、给上游套上 DoH/DoT:别让运营商偷看、劫持你的查询
默认情况下,Pi-hole 向上游转发查询走的是明文 UDP 53。这意味着两件事:第一,你的运营商能清楚看到你在查哪些域名;第二,部分运营商会"DNS 劫持"——把查不到的域名导向自己的广告页,或者篡改结果。要解决这个,得给 Pi-hole 的上游套上加密传输:DNS over HTTPS(DoH)或 DNS over TLS(DoT)。需要说清一个事实:Pi-hole 自身并不原生支持加密上游传输,它需要一个跑在本机的本地代理来"翻译"。两种主流做法:
- cloudflared 做 DoH 代理:在 VPS 上装 cloudflared,让它监听 127.0.0.1:5053,向上游走 HTTPS(比如 https://1.1.1.1/dns-query)。然后在 Pi-hole 的 DNS 设置里把上游设成 127.0.0.1#5053。这样 Pi-hole 到公网这一段就是加密的。
- Unbound 做递归解析器:装 Unbound,让它直接从根服务器一层层查(端口通常 5335),不依赖任何第三方公共解析器。好处是"没有第三方能看到你的查询",隐私最彻底;代价是冷启动稍慢、要自己维护。它同样支持把查询通过 DoT 转发给 Quad9 之类带安全过滤的解析器。
对于大多数人的隐私需求,DoH 代理已经够用;对"不想让任何解析商看到我"的偏执派,Unbound 递归是更彻底的答案。无论哪种,都建议在 Pi-hole 里打开 DNSSEC 校验(设置、DNS、Use DNSSEC),让 DNS 回答带加密签名、防止被中间人篡改。一个小提醒:如果你用 Unbound 自己做了 DNSSEC 校验,就别在 Pi-hole 里重复开 DNSSEC,否则会变成双重校验导致解析失败。二选一即可。
六、把整屋设备都纳入:家庭路由 / 旁路由改 DNS
Pi-hole 最爽的地方,是让那些装不了浏览器插件的设备也变干净。核心就一句话:让全家设备的 DNS 都指向 Pi-hole(在 VPS 上即指向 WireGuard 隧道内侧地址,如 10.8.0.1)。具体落地有两种姿势:
- 路由器改 DNS(推荐给有网关权限的家庭):在路由器(或旁路由)的 DHCP 设置里,把"下发 DNS"改成 Pi-hole 的隧道地址。这样电视、游戏机、智能音箱连上 Wi-Fi 时自动拿到这个 DNS,全程无感。你不需要逐台设备去设置。
- 逐设备指定(适合租房/公司网络动不了路由器的场景):在手机、笔记本的 Wi-Fi 或 VPN 配置里手动填 DNS 为 10.8.0.1。代价是要给每台设备配一次,但灵活。
这里有个关键认知:家里那堆无法装 VPN 的设备(老电视、IoT),必须靠"路由器拨 WireGuard 隧道"来被纳入——也就是让路由器本身成为 VPN 客户端,再把 LAN 的 DNS 指到隧道内侧。隧道一通,全屋自动继承过滤。手机、笔记本则各自装 WireGuard,配置里把 DNS 设成隧道地址。所有 DNS 流量都包在加密隧道里,既安全又过滤。路由器怎么拨隧道、手机怎么导入配置,这类"跨地点随身防护"的细节请移步本系列第 02 篇:/vps-selfhost-pihole-adguard-2026。
七、性能与隐私:1 核 1G 足够,日志主动收口
性能方面完全不用慌。Pi-hole 极轻量,官方和社区普遍共识是 512MB 内存就能舒服跑,一台 1 核 1GB 的低价 VPS 绰绰有余;它主要靠本地缓存应答,查询量大的家庭也吃不满资源。磁盘占用很小,主要花在黑名单和日志上。所以挑 VPS 时不用追配置,最便宜那档通常就够,把预算留给月付的可持续性。
隐私是另一个要主动管的点。Pi-hole 默认会记录查询日志和长期数据库,里面是你家每个设备访问了哪些域名的明细——虽然文件在你自己掌控的机器上、后台有独立密码,但如果你在意,可以收紧:
- 隐私级别:后台设置里有 0 到 3 四级。级别 0 全记录;级别 1 隐藏域名;级别 2 连客户端 IP 也藏成 0.0.0.0;级别 3 匿名模式,不存任何历史、查询日志也关掉。家用想兼顾统计可设 1 或 2,偏执隐私直接 3。
- 关文件日志:命令行 pihole logging off 可关闭 /var/log/pihole.log 的写入,代价是实时统计变少。
- 限制保留天数:配置 MAXDBDAYS 控制长期库保留天数,设小一点减少历史堆积。
- 定期备份:用后台 Teleporter 导出一份配置归档,重装或迁移时一键恢复。
八、常见维护动作:更新列表、加白、备份、升级
- 更新引力库:社区列表会持续更新,建议每周用 pihole -g 刷新一次(可加 cron 定时)。列表越新,越能拦住新冒出来的广告域。
- 加白名单:遇到正常站点因依赖广告脚本而异常,在后台"Whitelist"里加一条域名即可,不必动整体列表。
- 善用分组:Pi-hole v6 支持把客户端分组、套不同策略。比如给孩子设备开更激进的屏蔽,给电视单独放宽,这是它相对 AdGuard Home 的强项之一。
- 升级:Pi-hole v6 是大版本,API、配置文件、Web 后台都和 v5 不同。升级前先用 Teleporter 备份,照着 v6 的文档操作,别拿 v5 老教程硬套。
最后提醒一句:本文只讲"在自己的设备上过滤广告与追踪"这件事本身,不涉及任何翻越网络边界的手段;Pi-hole 的 DNS 过滤与流量加密是两回事,它不隐藏你的出口 IP,也不替代正规的 VPN 隐私能力,两者配合才是完整方案。
#Pi-hole #自托管 #去广告 #DNS #VPS