AdGuard Home:Docker 部署 DNS 去广告
本文属于「自托管 Docker 部署实战」系列(共 35 篇),第 1 篇。 示例中的 IP(192.0.2.10)、域名(example.com)、密码均为占位符,请按实际环境替换。
它是什么
全网 DNS 级广告拦截,兼做 DoH/DoT 解析器。
前置条件
- 一台 Linux 服务器(1C1G 起步;Java 类应用建议 2C4G 以上);
- 已安装 Docker 与 Compose v2,执行
docker compose version有版本号输出; - 所有示例里的 IP / 域名 / 密码都是占位符,实际部署请替换成自己的。
# 安装 Docker(已安装可跳过)
curl -fsSL https://get.docker.com | sh
# 目录约定:一个服务一个目录,后文的 ./data 均指栈目录内
mkdir -p /srv/docker/active/<stack> && cd /srv/docker/active/<stack>
镜像地址
adguard/adguardhome:v0.107.79
目录结构
/srv/docker/active/adguard/
├── docker-compose.yml
├── conf/ # AdGuardHome.yaml
└── work/ # 查询日志、统计数据库
部署步骤
services:
adguardhome:
image: adguard/adguardhome:v0.107.79
container_name: adguardhome
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp" # 初始化向导(可改)
- "443:443/tcp" # DoH/DoT(有冲突就换)
- "3000:3000/tcp" # 管理后台
- "853:853/tcp"
- "784:784/udp"
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
command:
- --no-check-update
- -c
- /opt/adguardhome/conf/AdGuardHome.yaml
- -w
- /opt/adguardhome/work
docker compose up -d
# 首次访问 http://<SERVER_IP>:3000 完成初始化
关键配置
- 初始化时 DNS 监听选 53,管理端口选 3000;
AdGuardHome.yaml在conf/,备份它 = 备份全部规则;- 上游 DNS 建议配两组 DoH(如 Cloudflare/Quad9),避免单点;
- 客户端把 DNS 指向
<SERVER_IP>即可全网生效。
注意事项
- 宿主机 53 端口常被
systemd-resolved占用:
bash
systemctl stop systemd-resolved
systemctl disable systemd-resolved
# 或改 /etc/systemd/resolved.conf 的 DNSStubListener=no
- 443 端口如果被 Nginx 占用,DoH 换 5443 之类的端口;
- AdGuard 挂了 = 全网断网,建议保留一个备用 DNS;
- 查询日志会涨,定期清理或关闭「记录查询日志」。
备份与升级
# 配置与统计数据库
tar czf "adguard-$(date +%F).tar.gz" ./conf ./work
# 升级
docker compose pull
docker compose up -d
conf/AdGuardHome.yaml是全部规则与上游配置,丢了要重配;- 升级后确认 DNS 仍在监听:
ss -lunp | grep :53。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果