前言
家庭服务分布在不同 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 的控制台执行:
bash12345678apk 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 完成首次设置:
- Web 管理地址选择该 LXC 可访问的接口,管理端口设为
80。 - DNS 监听地址选 LXC 的局域网地址,端口使用
53。 - 创建管理员账号。
- 在 DNS 设置中配置可用的上游 DNS,先用页面提供的测试功能确认能解析外部域名。
- 在 DNS 重写中添加
home.example.com → 192.168.20.31,将导航域名指向 Lucky。
先在一台客户端将 DNS 指向 192.168.20.32,执行:
bash1nslookup home.example.com 192.168.20.32
结果应为 Lucky 的地址。此时只验证 DNS 重写;Lucky 会在下一篇部署,网页暂时不能打开是正常的。
三、将 DNS 接入客户端
先在一台客户端手动设置 DNS 并测试。查询普通域名及内部重写域名:
bash12nslookup 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:
bash12nslookup 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_USER、HOMEPAGE_VAR_ADGUARD_PASSWORD,填入 AdGuard Home 的登录账号与密码,再重新部署 Homepage。这里使用 Web 管理账号,不能把它当作只读 API Token。
把下面的服务合并进 services.yaml。已有“网络服务”分组时,只添加组内的 AdGuard Home 条目:
yaml12345678910111213- 网络服务: - 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-docker 或 container。
从客户端发起几次 DNS 查询,再对照 AdGuard Home 查询日志和 Homepage 指标。siteMonitor 检查的是管理网页,DNS 是否正常仍要用前面的 nslookup 验证;防火墙需要分别允许管理所用的 TCP 80 和客户端 DNS 所用的 TCP/UDP 53。
六、服务维护
程序和配置位于本例的 /opt/AdGuardHome。服务状态与运行日志可通过以下方式检查:
bash12/opt/AdGuardHome/AdGuardHome -s status rc-status
备份前停止服务,将整个程序目录中的 YAML 配置和 data 目录一起保存:
bash1234mkdir -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,从而形成循环。
参考
支付宝
微信