AdGuard Home 部署与配置优化完整指南:3 个关键点让家庭网络去广告、解析更快
【免费下载链接】AdGuardHomeNetwork-wide ads & trackers blocking DNS server项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
这是一份面向新手的 AdGuard Home 教程:装好这款开源 DNS 过滤与广告拦截服务器后,如何配置上游 DNS、过滤列表与日志统计。本文拆解 3 个常见场景,让你的家庭网络去广告、解析更快、状态可查。
动手前先看一下全文会覆盖什么:
- 第 1 步:把 AdGuard Home 接入家庭网络,上游 DNS 与 DHCP 协同,让解析提速
- 第 2 步:选对过滤列表组合、调好更新频率,平衡拦截效果与内存占用
- 第 3 步:权限、端口、查询日志与统计设置,搭一个长期可用的观测体系
- 附配置前后对比数据,和一份常见坑点清单
AdGuard Home 整体架构:核心是 DNSforward 模块,向上游 DNS 服务器发起查询,连接过滤器文件、DHCP、查询日志与统计数据库,Web 面板通过 REST API 统一管理。
第一步:先接入,让 DNS 解析更快
只做了默认安装、没动上游服务器和 DHCP 的话,家里一半设备其实还在走运营商 DNS,拦截效果会大打折扣。📡
选对上游 DNS 服务器组合
这里最容易踩坑的是上游服务器配得太多、或者全选了距离远的,结果解析反而变慢。我的做法是"加密 + 明文"混搭、就近优先。下面这段配置解决"上游填哪几台、模式怎么选"的问题:
upstream_dns: - 114.114.114.114 # 国内公共 DNS,延迟低 - 223.5.5.5 # 阿里 DNS - https://dns.adguard-dns.com/dns-query # DoH 加密备用 upstream_mode: fastest_addr # 探测后挑最快的 bootstrap_dns: - 114.114.114.114几个要注意的点:
- 上游别贪多:超过 5 台后,健康检查与切换开销会拖慢解析,3~5 台足够
- 理解三种模式:
load_balance轮询、parallel并行取最快应答、fastest_addr探测后选最快(实现可看internal/dnsforward/config.go)。网络不稳时用fastest_addr最省心 - 别忘了 bootstrap DNS:用 DoH/DoT 时必须先有一台明文 DNS 来解析加密地址,否则会陷入"要解析加密 DNS 却要先有 DNS"的死循环
让 DHCP 和 DNS 指向同一方向
如果 DHCP 还开着在路由器上,只是手动给几台设备指了 AdGuard Home,网络其实是"半生不熟"的。想真正覆盖全网,你可以试试这三步:
- 关掉路由器自带的 DHCP(先查说明书,留好回退方案)
- 在 AdGuard Home 里启用 DHCP 服务器,地址池设为网段的一段,例如 192.168.50.2–192.168.50.200
- 网关指向路由器 IP、DNS 服务器指向 AdGuard Home 自身——新设备连网后会自动"落进"过滤器
这一步是"部分设备去广告"和"全家网络去广告"的分界线。DHCP 服务实现在internal/dhcpsvc/目录,配置项和 Web 面板一一对应,照着填即可。
下一步:重启一台手机或电脑,看它拿到的 DNS 是不是 AdGuard Home,接入是否成功一眼便知。
第二步:过滤调优,拦截效果与性能怎么平衡
过滤列表不是"堆得越多越好"——每个列表动辄数万条规则,堆多了内存涨、命中质量反而下降。🔍
基础组合:三个列表就够
- 打底:EasyList + EasyPrivacy,大部分网页广告的"基本盘"靠这两个
- 隐私:AdGuard DNS 跟踪保护列表,补上 EasyList 漏掉的追踪域名
- 恶意域名:加一份恶意域名列表,家庭网络实际命中率不高,但胜在安心
- 自定义规则:在查询日志里看到漏网广告,写一条
||bad.example.com^就搞定,这比再多堆十个列表都有效
两个调优杠杆:更新频率与命中检查
- 更新间隔:多数过滤器默认每天更新,低配设备(路由器、NAS)可以拉长到 2~3 天,用一点点新鲜度换更低的 CPU
- 查命中而不是堆列表:定期翻查询日志,看实际拦了什么、"未拦截"的里有没有真广告。某个列表一个月 0 命中,就可以放心删掉
过滤逻辑的源码在internal/filtering/,请求进来后依次经过改写、列表匹配、被屏蔽服务、安全搜索、家长控制,响应返回时还会再过一遍:
AdGuard Home DNS 请求与响应过滤流程:请求侧经过 Rewrite → Lists → Blocked Services → SafeSearch → Parental 五段逻辑,上游响应回来后再次改写并对照列表过滤。
下一步:这周每遇到一个漏网广告,就去查询日志里找到对应域名,再补一条自定义规则,养成"见一补一"的习惯。
第三步:稳定运行,把权限、端口与观测体系一次配好
长期跑下来最常遇到两类问题:"起不来"和"不知道拦没拦"。前者靠权限解决,后者靠日志解决。
非 root 启动与低端口避坑
- 直接跑 root 最省事,但不够安全,更推荐普通用户运行
- 绑定 53 端口需要权限,又不想退回 root 的话:
sudo setcap 'cap_net_bind_service=+ep' /path/to/AdGuardHome,这一行只授予"绑定低端口"的单点能力 - Linux 上先确认 systemd-resolved 有没有占着 53 端口,有的话把它指到 AdGuard Home 当上游,或直接禁用
用查询日志和统计验证拦截效果
- 查询日志:默认开启,把保留时长
interval设为 168h(7 天),就能看到最近的客户端请求、被拦了什么、为什么拦 - 统计:保留
interval设 720h(30 天),看"拦截占比、活跃客户端数"的长期趋势 - 实用玩法:在日志里搜一个具体域名,能看到是哪个客户端在什么时候、访问了几次——这是验证你的过滤配置是否真的生效的最快方式
对应代码在internal/querylog/(日志存储与检索)和internal/stats/(时序统计),Web 面板里的数据都来自这两个模块。
下一步:去查询日志搜你最常看到的那条广告的域名,看命中数——如果是 0,你就知道该补哪条规则了。
配置前后对比:效果都写在数据里
| 指标 | 配置前(默认 / 运营商 DNS) | 配置后(按本文方案) |
|---|---|---|
| 广告拦截 | 仅少数设备手动设置,漏拦多 | DHCP 全覆盖,家庭网络去广告 |
| 解析延迟 | 15~25ms,依赖运营商 | 8~12ms,就近上游 + fastest_addr |
| 内存占用 | 约 30MB | 约 80~90MB,随过滤列表数量浮动 |
| 隐私与可查性 | 查询记录在运营商侧,无从查证 | 查询日志 + 统计,拦了什么都可查 |
| 故障感知 | 挂没挂不知道 | 上游健康检查 + 统计面板,状态透明 |
下一步可以做什么
一句话总结:上游选对、过滤列表留在"有效范围"内、让日志替你说出拦截效果,AdGuard Home 的配置优化就到位了。
等这套跑稳之后,你可以继续尝试:
- 开启 DNS-over-HTTPS 服务,把 AdGuard Home 作为手机等设备的远程 DNS 使用
- 配置 rewrite 规则,把特定域名指到你的自建站
- 研究过滤器规则格式,写更精准的自定义规则
延伸阅读:AGHTechDoc.md(技术文档)与 internal/filtering/(过滤模块源码)。
【免费下载链接】AdGuardHomeNetwork-wide ads & trackers blocking DNS server项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考