开源自建 · 网络级 DNS 过滤

AdGuard Home
功能与拦截原理详解

用 Go 编写的开源网络级 DNS 广告与追踪拦截软件:在你的局域网里充当本地 DNS 服务器,一次部署,全屋设备自动去广告。

Go单二进制 · 跨平台
DNS 层解析阶段即拦截
全屋一次部署覆盖所有设备
DoH/DoT/DoQ加密上游查询
TL;DR · 核心结论

AdGuard Home 是一款用 Go 语言编写的开源(GPLv3)网络级 DNS 广告与追踪拦截软件,官方仓库见 github.com/AdguardTeam/AdGuardHome。它在局域网里充当一台本地 DNS 服务器:设备把域名查询交给它,它先对照过滤规则判断该域名是不是广告、追踪器或恶意域名——命中就直接返回拦截响应(NXDOMAIN / 0.0.0.0),未命中再转发给上游 DNS。相比浏览器插件只保护单个浏览器,它一次部署即可覆盖全屋所有设备;上游查询还支持 DoH / DoT / DoQ 加密通道。

What It Is

AdGuard Home 到底是什么

它不是浏览器插件,也不是一台专门的硬件,而是一个跑在你自己设备上的 DNS 服务

开源 GPLv3

源码完全公开,用 Go 语言编写,编译后是一个单二进制文件,可自由审计、二次编译与自托管,不存在任何"后门遥传"不透明的问题。

网络级拦截 Network-wide

定位是"network-wide software for blocking ads and tracking":在 DNS 解析这一网络基础设施层工作,而不是在浏览器里,所以能保护手机、电视、IoT 等所有设备。

跨平台 Linux / macOS / Win / BSD

官方提供 Linux、macOS、Windows、FreeBSD 的二进制发布(见 Releases),也支持 Docker 与 OpenWrt 安装包。

自带 DHCP 可选

除了 DNS 服务器角色,它还能兼任局域网的 DHCP 服务器,自动把自己的 DNS 地址推送给新入网设备,省去逐台手动配置。

How It Works

工作模式:一台跑在你家里的 DNS 服务器

理解它的关键,是把它想成"你自己家那台、多了过滤功能的 DNS"。

  1. 设备发起查询:手机/电脑/电视想打开一个网站,先向 DNS 服务器(通常就是路由器指向的那台)查询域名对应的 IP。在 AdGuard Home 方案里,这个 DNS 地址指向你部署的实例(默认监听 53 端口,UDP/TCP)。
  2. 规则匹配:AdGuard Home 拿到域名后,依次对照内置的过滤规则列表(AdGuard DNS filter、StevenBlack hosts、Hagezi 等)判断这个域名是不是广告联盟、追踪器或恶意域名。
  3. 命中即拦截:如果命中过滤规则,它直接按拦截模式返回 NXDOMAIN 或 0.0.0.0(可在设置里配置),设备拿不到广告服务器的真实 IP,广告/追踪请求自然发不出去。
  4. 未命中转发上游:如果是正常域名,它把查询转发给上游 DNS(可以是运营商 DNS、公共 DNS,或加密的 DoH/DoT/DoQ 端点),拿回结果后缓存并返回给设备。
  5. 缓存加速:重复查询直接命中本地缓存,无需再走上游,解析更快、上游负载更低。所有配置保存在 AdGuardHome.yaml,通过 Web 界面管理。
Browser Plugin vs DNS Filter

它和浏览器广告拦截插件有什么区别

很多人第一次会混淆——两者都能去广告,但工作层、覆盖范围完全不同

维度浏览器插件(uBlock Origin 等)AdGuard Home(DNS 层)
工作层浏览器内,网页渲染后过滤 HTML 元素/脚本DNS 解析层,在请求发出前就切断域名
覆盖范围仅限安装了插件的某个浏览器全屋所有设备:手机、电视、平板、IoT
新设备接入每台设备、每个浏览器都要单独装DNS 指过来即生效,无需任何客户端
能拦的东西页面元素、弹窗、跟踪脚本(粒度细)域名级别(广告/追踪/恶意域名,粒度粗)
资源消耗吃浏览器内存,页面越多越卡跑在路由器/小主机上,设备侧零感知
误杀风险较低,可逐元素自定义规则粒度粗,可能误伤正常域名,需白名单

实践中两者常常互补:AdGuard Home 负责在网络层大面积"清扫"广告域名,浏览器插件再精细处理页面内残留元素。

Encrypted Upstreams

上游查询:DoH / DoT / DoQ 加密通道

AdGuard Home 自己被设备查询,它再去查上游——这段"它→上游"的链路也可以加密

DoH https://

上游地址写成 https://dns.example/dns-query,DNS 查询封装在 HTTPS 里(443 端口),与网页流量混淆,防窃听防篡改。

DoT tls://

上游地址写成 tls://dns.example,走 TLS 专用隧道(853 端口),协议开销低、连接稳定。

DoQ quic://

上游地址写成 quic://dns.example,基于 QUIC(RFC 9250)的加密 DNS,利用 0-RTT 特性降低握手延迟。

明文 DNS 53

也可直接填 1.1.1.1、8.8.8.8 等明文上游,兼容性最好但链路可被窃听篡改,适合内网/调试。

官方 Wiki 对上游地址格式与加密协议支持有完整说明,见 AdGuard Home Wiki。

FAQ

常见问题

AdGuard Home 和浏览器广告拦截插件是同一个东西吗?+
不是。AdGuard Home 是跑在局域网里的 DNS 服务器,在域名解析阶段拦截,全屋设备自动生效;浏览器插件(如 uBlock Origin)只在单个浏览器内、渲染网页后过滤元素,需要逐台逐浏览器安装。
AdGuard Home 能拦截手机 App 里的开屏广告吗?+
可以拦掉一部分。App 开屏广告通常先向广告域名发请求再展示,把 DNS 指向 AdGuard Home 后,广告域名解析失败,开屏广告请求拿不到内容,等待超时后常常直接跳过。但深度集成在 App 内、与业务接口共用域名的广告无法仅靠 DNS 层完全去除。
部署 AdGuard Home 需要什么硬件?+
几乎没有门槛。它是 Go 编译的单二进制,内存占用很低,树莓派、软路由、群晖等 NAS、甚至一台 1 核 512MB 的 VPS 都能跑;也支持 Docker 与 OpenWrt 安装包。
AdGuard Home 会记录我的浏览记录吗?+
它默认会在本地查询日志里记录经过它的域名查询(可在设置中关闭或缩短保留时间),数据保存在你自己的服务器上、不上传;是否记录、保留多久完全由你控制。
References

参考来源