概述
手机刷视频有广告,电脑浏览网页有弹窗,智能电视开机还要看三十秒片头。一个个装插件太麻烦,路由器改 hosts 又容易出错。
AdGuard Home 是一个开源的 DNS 级广告拦截器。部署到 VPS 后,所有设备把 DNS 指向它,广告和追踪请求直接在 DNS 层面被拦截。
不用装浏览器扩展,不用改每台设备。一个服务,全家干净。
准备工作
- 一台 VPS,Ubuntu 22.04 或 Debian 12 均可,1核1G 足够
- Docker 和 Docker Compose 已安装
- 能正常访问外网
- 约 100MB 磁盘空间
步骤
第一步:创建数据目录
mkdir -p ~/adguard/work ~/adguard/conf
work 放运行数据,conf 放配置文件。分开放,以后迁移或升级都方便。
第二步:编写 Docker Compose 配置
在 ~/adguard 下新建 docker-compose.yml:
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80"
- "443:443"
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
启动容器:
cd ~/adguard
docker compose up -d
第三步:完成初始化向导
浏览器打开 http://你的VPS_IP,进入 AdGuard Home 设置向导:
- 语言选「简体中文」
- 设置管理员用户名和密码
- Web 管理面板端口保持 80
- DNS 监听端口保持 53
点完成,进入后台面板。
第四步:配置设备 DNS
在需要拦截广告的设备上,把 DNS 服务器改成 VPS IP。
Wi-Fi 设备直接在路由器设置里改 DNS,所有连接设备一次生效。Linux 临时修改:
sudo nmcli con mod "网络名" ipv4.dns "你的VPS_IP"
sudo nmcli con down "网络名" && sudo nmcli con up "网络名"
第五步:添加过滤规则
后台 → 过滤器 → 过滤 URL,默认已开启内置广告列表。
国内用户建议额外添加 anti-ad 列表:
https://anti-ad.net/easylist.txt
保存后生效,广告拦截量会明显上升。
验证
检查容器运行状态
docker ps | grep adguardhome
STATUS 显示 Up 即正常。
测试 DNS 拦截效果
dig @你的VPS_IP www.googleadservices.com +short
返回空或 0.0.0.0,说明广告域名已被拦截。
查看拦截统计
浏览器打开 http://你的VPS_IP,仪表盘会显示查询总数、过滤数量和 Top 被拦截域名。
常见问题
Q: 改了 DNS 之后上不了网?
检查设备 DNS 是否指向 VPS IP。建议同时设置一个备用 DNS,如 223.5.5.5,防止主 DNS 故障时断网。
Q: 端口 53 被占用?
systemd-resolved 可能占用了 53 端口。执行:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo docker restart adguardhome
Q: 想配 HTTPS?
后台 → 设置 → HTTPS,直接填入证书路径即可。也可以用 Nginx 或 Caddy 做反向代理,搭配 Let’s Encrypt 自动续签。
Q: 性能消耗大吗?
1核1G VPS 轻松跑,日常几百 QPS 没问题。内存占用通常在 50-100MB 左右。
总结
AdGuard Home 是家庭网络去广告最省心的方案之一。Docker 部署不到五分钟搞定,后续维护成本几乎为零。
如果你还在每台设备上装广告拦截插件,不如试试这个思路。一个 DNS 服务器,所有设备受益。