NAS 折腾日记(6)AdGuard Home 部署与内网 DNS
创建于 2026-09-15
更新于 2026-09-19
科技
nas
lxc
dns
adguardhome
2896 字 · 约 10 分钟

前言

家庭服务分布在不同 LXC 与应用容器中,使用 AdGuard Home 管理 DNS 查询和内网域名。本文记录独立 LXC 部署、DNS 重写、客户端接入和维护。

一、LXC 环境

按照 NAS 折腾日记(2)PVE 与 Docker 基础环境部署 创建独立 Alpine LXC。使用 CT ID 202、主机名 adguard,选择非特权容器,不启用 Docker nesting 或 NFS 挂载。本文示例地址为 192.168.20.32/24,网关 192.168.20.1,初始使用已有可用 DNS。起始资源可分配 1 核、512 MB 内存和 4 GB 根盘,在 PVE 设置开机启动。

进入该 LXC 控制台,确认能够访问外网。本文命令均在此容器执行。

二、安装与初始化

AdGuard Home LXC 的控制台执行:

bash
1
2
3
4
5
6
7
8
apk update apk add curl ca-certificates tar mkdir -p /opt cd /opt curl -fL https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz \ -o /tmp/AdGuardHome.tar.gz tar -xzf /tmp/AdGuardHome.tar.gz -C /opt /opt/AdGuardHome/AdGuardHome -s install

安装包中的 -s install 用于注册系统服务,具体安装说明见 AdGuard Home 文档。访问 http://192.168.20.32:3000 完成首次设置:

  1. Web 管理地址选择该 LXC 可访问的接口,管理端口设为 80
  2. DNS 监听地址选 LXC 的局域网地址,端口使用 53
  3. 创建管理员账号。
  4. 在 DNS 设置中配置可用的上游 DNS,先用页面提供的测试功能确认能解析外部域名。
  5. 在 DNS 重写中添加 home.example.com → 192.168.20.31,将导航域名指向 Lucky。

先在一台客户端将 DNS 指向 192.168.20.32,执行:

bash
1
nslookup home.example.com 192.168.20.32

结果应为 Lucky 的地址。此时只验证 DNS 重写;Lucky 会在下一篇部署,网页暂时不能打开是正常的。

三、将 DNS 接入客户端

先在一台客户端手动设置 DNS 并测试。查询普通域名及内部重写域名:

bash
1
2
nslookup example.com 192.168.20.32 nslookup home.example.com 192.168.20.32

同时打开 AdGuard Home 的查询日志,确认请求来自测试客户端,响应与重写规则一致。然后在 SRX 的 DHCP 设置中下发该 DNS,客户端重新获取租约。

IPv6 客户端还需要检查路由通告或 DHCPv6 下发的 DNS。浏览器启用安全 DNS、系统运行代理软件时,实际查询路径也可能另有设置。遇到“命令行能解析但浏览器不对”的情况,先对照查询日志判断请求有没有到达 AdGuard Home。

四、内网域名与反向代理

本例将 home.example.com 重写到 Lucky 的 192.168.20.31,再由 Lucky 转发到 Homepage。DNS 只填写 IP 地址,HTTP 端口与上游地址在反代规则中配置。

代理入口见 NAS 折腾日记(7)Lucky 部署与反向代理。完成 Lucky 篇的监听和转发规则后,在使用 AdGuard Home 作为系统 DNS 的客户端先验证 DNS,再验证 HTTP:

bash
1
2
nslookup home.example.com 192.168.20.32 curl -I http://home.example.com

如果实际域名还有 AAAA 记录,应一并检查 IPv6 访问路径。A 记录正确而 IPv6 指向另一入口时,客户端可能走与预期不同的路径。

五、接入 Homepage

沿用 NAS 折腾日记(5)Homepage 部署与服务导航 的配置目录与凭据替换方式。在 Homepage 容器的 Env 中增加 HOMEPAGE_VAR_ADGUARD_USERHOMEPAGE_VAR_ADGUARD_PASSWORD,填入 AdGuard Home 的登录账号与密码,再重新部署 Homepage。这里使用 Web 管理账号,不能把它当作只读 API Token。

把下面的服务合并进 services.yaml。已有“网络服务”分组时,只添加组内的 AdGuard Home 条目:

yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
- 网络服务: - AdGuard Home: href: http://192.168.20.32 siteMonitor: http://192.168.20.32 proxmoxNode: pve proxmoxVMID: 202 proxmoxType: lxc widget: type: adguard url: http://192.168.20.32 username: "{{HOMEPAGE_VAR_ADGUARD_USER}}" password: "{{HOMEPAGE_VAR_ADGUARD_PASSWORD}}" fields: ["queries", "blocked", "filtered", "latency"]

proxmoxNode 改为自己的 PVE 节点名,并与 Homepage 的 proxmox.yaml 一致。这项关联显示独立 LXC 的状态;应用组件显示 DNS 查询、拦截和响应时间。它没有运行在 Docker 中,因此不填写 server: local-dockercontainer

从客户端发起几次 DNS 查询,再对照 AdGuard Home 查询日志和 Homepage 指标。siteMonitor 检查的是管理网页,DNS 是否正常仍要用前面的 nslookup 验证;防火墙需要分别允许管理所用的 TCP 80 和客户端 DNS 所用的 TCP/UDP 53。

六、服务维护

程序和配置位于本例的 /opt/AdGuardHome。服务状态与运行日志可通过以下方式检查:

bash
1
2
/opt/AdGuardHome/AdGuardHome -s status rc-status

备份前停止服务,将整个程序目录中的 YAML 配置和 data 目录一起保存:

bash
1
2
3
4
mkdir -p /srv/backups /opt/AdGuardHome/AdGuardHome -s stop tar -czf /srv/backups/adguardhome-backup.tar.gz -C /opt AdGuardHome /opt/AdGuardHome/AdGuardHome -s start

更新可以通过管理页面提供的更新入口进行,完成后复查上游解析、重写和客户端查询日志。配置上游时避免把上游指回最终又转发至 AdGuard Home 的路由 DNS,从而形成循环。

参考

手机扫码阅读
本文作者: 有次元袋的 tiger
本文链接: https://www.superheaoz.top/2026/09/2845/
版权声明: 本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的个人天地