TL;DR:DNS广告过滤的原理很简单——把广告和跟踪器的域名加入黑名单,当你的设备查询这些域名时,DNS服务器直接返回空地址(0.0.0.0)或「域名不存在」,浏览器就加载不出广告了。优点是全设备生效、不用装任何APP;缺点是拦不了网页内嵌的JS广告和视频贴片广告。想体验的话,最快的方式是把手机私人DNS改成 dns.adguard-dns.com。DNS广告过滤到底是怎么工作的?
要理解DNS怎么拦广告,先得知道一个基本常识:每个广告都来自某个域名。
你打开一个网页,浏览器要加载的东西远不止正文——它还要向一堆第三方域名发请求:广告联盟的域名、统计跟踪的域名、字体CDN的域名、图片CDN的域名等等。其中广告和跟踪请求往往来自独立的域名,比如 doubleclick.net、googleadservices.com、hm.baidu.com 这类。
DNS广告过滤就是在这个「域名查询」的环节动手脚:
- 你的手机要加载网页,先问DNS服务器:「
doubleclick.net的IP是多少?」 - DNS服务器查了一下黑名单,发现这个域名在广告拦截列表里
- 它不返回真实IP,而是返回
0.0.0.0(一个不存在的地址)或者直接说「NXDOMAIN,域名不存在」 - 浏览器拿到这个无效地址,尝试连接失败,广告就根本不会加载出来
整个过程发生在网络请求的最底层——DNS查询阶段,还没到真正下载广告内容那一步。所以它的好处是:只要你的设备走了这个DNS,所有APP、所有浏览器的广告请求都会被统一拦掉,不需要每个APP单独装插件。
哪些广告能拦?哪些拦不了?(务必先搞清楚局限)
很多人开了私人DNS之后发现怎么还有广告,然后觉得「DNS去广告是骗人的」。其实不是骗人,是你对它的能力边界理解错了。下面这张表说清楚:
| 广告类型 | DNS能不能拦 | 原因 |
|---|---|---|
| 独立域名的横幅广告 | 能拦 | 来自独立广告域名,DNS层直接掐断 |
| 第三方跟踪器/统计脚本 | 能拦 | 跟踪域名通常是独立的 |
| 恶意软件/钓鱼网站域名 | 能拦 | 靠威胁情报域名列表拦截 |
| 网页内嵌的JS弹窗广告 | 拦不了 | 广告脚本和正文在同一个域名下下发 |
| 视频网站贴片广告 | 拦不了 | 视频广告内容和视频本身同域名下发 |
| 已经缓存的广告 | 拦不了 | 浏览器缓存了广告资源,不会重新发DNS请求 |
| 微信公众号文章底部广告 | 拦不了 | 和正文同域名,DNS层无法区分 |
一句话总结:DNS过滤是「域名级」的拦截,只能按域名整块挡掉;同一个域名下面既放正文又放广告的情况,DNS就分不出来了。 这种时候你需要的是浏览器扩展(比如uBlock Origin)那种「元素级」的过滤,两者搭配使用效果最好。
开启DNS广告过滤的四种途径
途径一:直接用AdGuard公共加密DNS(最简单)
什么都不用装,直接在手机或电脑上把私人DNS改成AdGuard的公共地址就行:
- DoT地址:
dns.adguard-dns.com - DoH地址:
https://dns.adguard-dns.com/dns-query
AdGuard公共DNS内置了广告和跟踪域名拦截规则,你改完设置就能生效。适合不想折腾服务器、想要开箱即用的用户。本站有一篇免费加密DNS服务地址汇总,里面列了更多类似的选择。
途径二:自己搭AdGuard Home,完全可控
如果你想自己决定拦哪些规则、看自己的查询日志、完全掌握数据,可以自己在VPS上搭一个AdGuard Home。详细搭建步骤可以看这篇自建AdGuard Home教程。
自建的好处是规则列表你自己选、日志你自己管、用不用零日志由你定。缺点是你要自己维护服务器和证书。
途径三:在自建AdGuard Home里加规则订阅
搭好AdGuard Home之后,默认拦截能力很弱,你需要添加规则订阅才能真正去广告。推荐的规则源和添加方法,本站有一篇专门讲AdGuard Home规则订阅怎么配置的文章,里面列了OISD、Hagezi等几个口碑最好的规则源,跟着一步步加就行。
途径四:浏览器开启安全DNS(仅浏览器内生效)
如果你只想在浏览器里去广告,不想改系统级DNS,可以在Chrome、Firefox里开启「安全DNS」(也就是DoH),选AdGuard或Cloudflare的带过滤功能的DNS服务器。这种方式只对浏览器生效,手机APP里的广告还是拦不住。
DNS广告过滤 vs 浏览器广告拦截扩展,对比一下
很多人会纠结:我到底该用DNS过滤还是装个uBlock Origin?其实这俩不是二选一的关系,是互补的。
| 对比维度 | DNS广告过滤 | 浏览器扩展(uBlock Origin等) |
|---|---|---|
| 生效范围 | 全设备、全APP | 仅浏览器内 |
| 拦截精度 | 域名级,粒度粗 | 元素级,粒度细 |
| 视频广告 | 拦不了 | 能拦 |
| 网页内嵌广告 | 拦不了 | 能拦 |
| 手机APP广告 | 能拦(广告域名) | 管不到APP |
| 误拦风险 | 较高(域名整挡) | 较低(精确到元素) |
| 配置难度 | 改个DNS地址就行 | 需要安装和配置扩展 |
最佳实践是两者搭配用:DNS层拦掉一大批独立域名的广告和跟踪器,浏览器扩展再处理剩下的网页内嵌广告。这样既能全设备覆盖,又能保证拦截精度。
常见问题
Q:用私人DNS真的能拦视频广告吗?比如B站、YouTube的贴片广告?
A:不能。视频贴片广告的内容是和视频资源从同一个CDN域名下发的,DNS层没法区分「这一段是广告」还是「这一段是正片」。想拦视频广告需要用专门的浏览器扩展或者APP去广告工具,DNS做不到。
Q:为什么我开了过滤DNS,有些网站还是会弹出广告窗口?
A:弹窗广告很多是网页内嵌的JS脚本生成的,不是从独立域名加载的。DNS层只能拦域名级的请求,拦不住网页内部的JS行为。这种情况需要浏览器扩展来处理。
Q:DNS过滤会不会让网站变慢?
A:正常情况下不会,反而可能更快——因为广告域名的请求直接被挡掉了,不用再去连那些广告服务器。但如果你的DNS服务器本身离你很远、延迟很高,可能会感觉到打开网页变慢。选一个离你近的、有缓存的DNS很重要。
参考来源
- AdGuard DNS官方 - 广告过滤原理说明 — 支撑DNS过滤规则的工作机制
- AdGuard DNS官方隐私与功能介绍 — 支撑AdGuard公共DNS的广告拦截能力说明
- OISD官方网站 - 过滤范围说明 — 支撑DNS规则源的拦截范围与分类
- Cloudflare 1.1.1.1 官方文档 — 支撑加密DNS与安全DNS的工作方式