用私人DNS拦截广告:DNS广告过滤原理与开启方法

用私人DNS拦截广告:DNS广告过滤原理与开启方法

234
234
2026-10-01 / 0 评论 / 2 阅读 / 3304 字 / 正在检测是否收录...
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广告过滤就是在这个「域名查询」的环节动手脚:

  1. 你的手机要加载网页,先问DNS服务器:「doubleclick.net 的IP是多少?」
  2. DNS服务器查了一下黑名单,发现这个域名在广告拦截列表里
  3. 它不返回真实IP,而是返回 0.0.0.0(一个不存在的地址)或者直接说「NXDOMAIN,域名不存在」
  4. 浏览器拿到这个无效地址,尝试连接失败,广告就根本不会加载出来

整个过程发生在网络请求的最底层——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很重要。

参考来源

  1. AdGuard DNS官方 - 广告过滤原理说明 — 支撑DNS过滤规则的工作机制
  2. AdGuard DNS官方隐私与功能介绍 — 支撑AdGuard公共DNS的广告拦截能力说明
  3. OISD官方网站 - 过滤范围说明 — 支撑DNS规则源的拦截范围与分类
  4. Cloudflare 1.1.1.1 官方文档 — 支撑加密DNS与安全DNS的工作方式
0个赞
取消