它是什么
AdGuard Home 是我在家里跑的一台 DNS 服务器。全家所有设备的上网请求先经过它,再由它转发到上游。它在解析这一层拦掉广告和追踪域名,同时按域名做分流,让国内、国外的解析各走各的线路。设备这边什么都不用装,改一下路由器的 DNS,全部设备就都生效了。
为什么做
家里的设备太杂:手机、电视、平板,还有一堆 IoT,一台台装去广告插件不现实,很多设备根本装不了。把过滤放到 DNS 这一层,只用维护一个地方,全家的上网体验就一起变好。顺手把分流也做了,省去每台设备单独折腾。
现在状态
运行中,是全家网络的第一跳。配套有个 adguard-healthcheck.sh 定时跑,用来盯 DNS 是否还正常。之前排查过手机 5G 打不开站点的问题,最后结论是运营商链路,不是 DNS——这类故障我的习惯是先分层确认再动配置,不要一上来就改上游。
功能
- 全家设备统一走一个 DNS 入口,改路由器就对所有设备生效
- 按域名分流上游,国内、国外解析走不同线路
- 在解析层拦截广告与追踪域名,减少页面加载干扰
- 配 adguard-healthcheck.sh 定时巡检,DNS 异常能及时发现
- 保留备用 DNS,主服务出问题时还有退路
技术栈
使用 / 部署教程
1. 准备
找一台常开的机器(我这台在 .164),给它固定局域网 IP,装好 Docker。确认 53 端口没被 systemd-resolved 或 dnsmasq 占用,占用了就先停掉,否则容器起不来。
2. 起容器
docker run -d --name adguardhome \
--restart unless-stopped \
-p 53:53/tcp -p 53:53/udp \
-p 3000:3000/tcp \
-v /opt/adguard/work:/opt/adguardhome/work \
-v /opt/adguard/conf:/opt/adguardhome/conf \
adguard/adguardhome
首次启动用 3000 端口进初始化向导,设管理端口和账号密码,装完把 3000 记得收掉或加鉴权。
3. 配上游与分流
在「上游 DNS 服务器」里分两组填:一组国内、一组国外,尽量用加密的 DoH/DoT。然后在「DNS 服务配置」里把域名按规则分到对应上游,先小范围试,确认解析结果对了再放开。
4. 开过滤规则
在「过滤器」里启用默认的广告规则列表即可,别一口气塞太多,规则越多排查越麻烦。
5. 下发到全家
把路由器 DHCP 下发的 DNS 改成这台机器的 IP。同时保留一个备用 DNS,别只填一个。下发后逐类设备验证:手机、电脑、电视各测一次,看「查询日志」里有没有对应记录。
6. 挂健康检查
把 adguard-healthcheck.sh 加到 cron 定时跑,探测 DNS 是否还能正常解析;异常时第一时间知道,而不是等家里人报「网打不开」。
7. 验证
nslookup example.com <DNS服务器IP>
返回正常、日志有记录,就算通了。后续改上游或规则后,都要再跑一遍这条命令。
注意
- DNS 是全家单点:务必保留备用 DNS,并确认出问题时会手动切回,否则服务一挂全家断网。
- 管理后台不要直接暴露公网,远程访问走内网/VPN 或反代加鉴权。
- 上游优先用 DoH/DoT,明文 DNS 查询会被链路上的设备看得很清楚。