家里设备一多,去广告就成了件麻烦事。手机装个浏览器插件,电脑再装一个,智能电视和那一堆 IoT 小设备基本没辙——它们要么不支持装插件,要么系统锁死。更别提家里人各自用各自的设备,你拦了别人还在看。
后来我换了个思路:不去拦”设备”,去拦”域名”。所有设备上网第一步都是 DNS 查询,只要让全屋的 DNS 请求先过一台我自己控制的过滤器,广告和追踪域在解析阶段就被干掉,设备本身什么都不用装。干这事最顺手的,就是 AdGuard Home。
它到底是什么
AdGuard Home 是个跑在局域网里的网络级广告/追踪拦截器,Go 写的,开源(GPL-3.0),一个 Docker 镜像就能起。它接管你网络的 DNS,对外表现得就像个正常的 DNS 服务器,但背后挂着一大堆过滤规则。设备问”ads.example.com 在哪”,它直接返回空,广告请求根本发不出去。
和浏览器插件比,最大的区别是无感且全覆盖:十来年的老电视、智能音箱、甚至你根本碰不到系统的公司配的平板,只要连的是你家网络、DNS 走这台,就都被拦了。而且它是”全屋统一策略”,不用逐台维护。
怎么跑起来
我把它扔在常开的那台小主机上(就是 NAS 旁边那台),一条 Docker 命令起好,核心是把 53 端口(DNS)和初始配置用的 3000 端口映射出来:
docker run -d
--name adguardhome
--restart=unless-stopped
-v /opt/adguardhome/work:/opt/adguardhome/work
-v /opt/adguardhome/conf:/opt/adguardhome/conf
-p 53:53/tcp -p 53:53/udp
-p 80:80/tcp -p 443:443/tcp
-p 3000:3000/tcp
-p 853:853/tcp -p 784:784/udp
adguard/adguardhome
第一次访问 3000 端口会走一个初始化向导,设好管理员密码、选上游 DNS(我用的带 DoH 的公共解析),再把监听端口定下来。向导走完,面板就常驻在 80/443 上了。更多端口(DoQ 等)在 Docker Hub 的镜像说明里都能查到,按需要开。
关键一步是把路由器 DHCP 下发的 DNS 指到这台 AdGuard Home 的地址。这样新设备一连 Wi-Fi 就自动用它解析,不用逐台改。软路由上更简单,直接在 DNS 转发里填过去就行。

好玩的地方:按设备分策略
全屋一套规则虽然省事,但有时候需要区别对待。比如小孩的平板想拦得狠一点,自己的手机保留某些白名单。AdGuard Home 的”客户端”功能可以给每台设备(按 IP 或 MAC 识别)单独套规则、单独统计。


面板里还能直接看到谁在疯狂请求广告域名、今天总共拦了多少、Top 被拦域名排行。那种”原来我家的智能电视每天偷偷回调几百次追踪器”的顿悟,基本都是从这块看板来的。
顺手能干的别的
除了拦广告,它还能干点周边活:自定义 DNS 重写(把某个内网域名指到固定 IP,等于轻量 hosts)、上游走 DoH/DoT 加密防嗅探、甚至当个简单的家庭内部 DNS 服务器。更新也省心,面板里点一下就能升,不用手动去拉镜像。

几个坑
端口 53 冲突。小主机上如果已经跑了别的 DNS 服务(dnsmasq、systemd-resolved 之类),AdGuard Home 起不来。先腾出 53,或者让它监听别的端口再转发过去。
它拦不了 HTTPS 流量里的广告。DNS 层只能按域名拦,那种把广告和正片塞进同一个域名的视频站,它没辙——那是内容层拦截的活,得靠别的手段。别指望一台 DNS 过滤器解决所有广告。
它是单点故障。DNS 一挂,全家断网(解析不了域名)。所以我留了备用 DNS,真出问题时设备能 fallback,不至于全员失联。真要稳,可以考虑两台做冗余。
规则别贪多。一股脑叠十几个大列表,误杀正常域名的概率直线上升,某些网站功能会诡异失效。先用默认列表,按需再加,出问题再排。
别裸奔到公网。面板有管理权,千万别不加密码直接暴露。我只在局域网里用,需要远程就走内网穿透,不开放公网端口。
小结
折腾下来,AdGuard Home 是我家里”投入产出比”最高的小服务之一。一次部署,全屋设备(包括那些你碰不了系统的)一起清净,还能反过来看清家里到底哪些设备在偷偷打电话。如果你也烦透了给每台设备装插件,建议从它开始。