用 Docker 部署 AdGuard Home:全家网络去广告,一条命令搞定

概述

手机刷视频有广告,电脑浏览网页有弹窗,智能电视开机还要看三十秒片头。一个个装插件太麻烦,路由器改 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 设置向导:

  1. 语言选「简体中文」
  2. 设置管理员用户名和密码
  3. Web 管理面板端口保持 80
  4. 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 服务器,所有设备受益。

这篇文章对你有帮助吗?