家庭网络拓扑优化:基于 PVE + Alpine LXC 部署 AdGuard Home 实现全栈 DNS 治理
背景与动机
随着 HomeLab 服务的增多(如 PVE 面板、Aria2 等),单纯通过 IP+端口访问已显笨拙。同时,终端广告和 DNS 劫持严重影响了使用体验。
本文旨在通过在 PVE 中建立一套中心化的 DNS 逻辑,实现以下目标:
- 去广告:在 DNS 层级拦截广告域名。
- 内网映射:通过私有后缀(如
.home)访问内网资源。 - 性能优化:通过缓存常用域名解析结果,提升响应速度。
环境准备
- 宿主机:Proxmox VE 8.4
- 容器:Alpine Linux (LXC)
- 优势:极低的资源占用(通常内存占用 < 50MB),适合作为基础网络设施。
- 核心组件:AdGuard Home (v0.107+)
容器部署与基础环境
创建 LXC 容器
在 PVE 菜单中创建 CT,选择 Alpine 镜像。建议分配:
- CPU: 1 核
- 内存: 512MB (实际使用远低于此)
- 硬盘: 2GB (Rootfs)
- 网络: 静态 IP
192.168.1.53,网关192.168.1.1
基础环境初始化
登录容器后,更新软件源并安装基础工具:
1 | apk update && apk upgrade |
安装与配置 AdGuard Home
自动化安装
执行官方安装脚本:
1 | curl -s -S -L [https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh](https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh) | sh -s -- -v |
(注:若国内拉取缓慢,建议预先在宿主机下载二进制文件并拷贝进容器。)
初始设置
访问 http://192.168.1.53:3000 进入 Web 安装界面:
监听端口:Web 界面设为
80,DNS 服务器监听53端口。上游 DNS 设置:
为了保证解析速度,建议配置混合上游 DNS:
1
2
3
4https://dns.alidns.com/dns-query
https://doh.pub/dns-query
223.5.5.5
119.29.29.29
规则集
这是本次部署的核心。默认的规则库地址多为 GitHub Raw 链接,国内拉取极不稳定。
引入 anti-AD 规则
进入 过滤器 -> DNS 拦截列表,添加 anti-AD。
优化方案:弃用原 GitHub 链接,改用国内高可用镜像加速节点。
URL 地址:
https://mirror.ghproxy.com/https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt
配置自动更新
在 设置 -> 常规设置 中,将“过滤器更新间隔”设为 24 小时。利用镜像节点,AdGuard Home 将在后台静默完成每日规则迭代。
局域网 DHCP 劫持
为了让全家设备(手机、电视盒子、PC)免配置生效,需在主路由(以中兴路由器为例)进行设置。
配置流程
进入路由器后台:**网络 -> 局域网配置 -> IPv4 (LAN)**。
- 主 DNS 服务器:
192.168.1.53 - 备用 DNS 服务器:
0.0.0.0(强制全量经过 AGH) 或192.168.1.1(高可用兜底)
验证生效
在 PC 终端执行:
1 | nslookup baidu.com |
若返回的 Server 项显示为 192.168.1.53,则说明劫持成功。
内网域名重写 (DNS Rewrite)
进入 AGH 后台:过滤器 -> DNS 重写。
添加规则以解决内网 IP 难记的问题:
pve.home->192.168.1.100blog.home->192.168.1.101
此后,局域网内直接输入 http://pve.home:8006 即可访问 PVE 宿主机。
常见问题排障
LXC 网络不通:
检查 PVE 侧防火墙设置,确保 UDP 53 端口未被拦截。
DNS 泄漏:
部分 Android 手机会自带“私人 DNS”设置(DoH),需手动在手机端关闭,否则会绕过 AGH。
总结
通过本次实践,我们建立了一套以 Alpine LXC 为底座、以 AdGuard Home 为逻辑核心的家庭解析系统。它不仅干掉了烦人的开屏广告,更通过 DNS 重写为未来的内网反向代理(如 Nginx Proxy Manager)做好了铺垫。