项目/网络基础设施
网络基础设施 · 运行中

网络过滤 AdGuard Home

全家 DNS 去广告 + 域名分流,保护全家设备上网体验。

AdGuard HomeDNS去广告

它是什么

AdGuard Home 是我在家里跑的一台 DNS 服务器。全家所有设备的上网请求先经过它,再由它转发到上游。它在解析这一层拦掉广告和追踪域名,同时按域名做分流,让国内、国外的解析各走各的线路。设备这边什么都不用装,改一下路由器的 DNS,全部设备就都生效了。

为什么做

家里的设备太杂:手机、电视、平板,还有一堆 IoT,一台台装去广告插件不现实,很多设备根本装不了。把过滤放到 DNS 这一层,只用维护一个地方,全家的上网体验就一起变好。顺手把分流也做了,省去每台设备单独折腾。

现在状态

运行中,是全家网络的第一跳。配套有个 adguard-healthcheck.sh 定时跑,用来盯 DNS 是否还正常。之前排查过手机 5G 打不开站点的问题,最后结论是运营商链路,不是 DNS——这类故障我的习惯是先分层确认再动配置,不要一上来就改上游。

功能

  • 全家设备统一走一个 DNS 入口,改路由器就对所有设备生效
  • 按域名分流上游,国内、国外解析走不同线路
  • 在解析层拦截广告与追踪域名,减少页面加载干扰
  • 配 adguard-healthcheck.sh 定时巡检,DNS 异常能及时发现
  • 保留备用 DNS,主服务出问题时还有退路

技术栈

AdGuard HomeDNSDockerShell上游转发健康检查

使用 / 部署教程

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 查询会被链路上的设备看得很清楚。