AdguardHome Docker 部署实战:从零搭建家庭网络隐私堡垒
1. 为什么家庭网络需要AdguardHome?
家里智能设备越来越多,从手机平板到智能电视、摄像头,每台设备都在悄悄发送数据。去年我家小孩用平板看动画片,突然跳出一个不适合的广告,这才意识到问题严重性。传统方案是在每个设备装广告拦截插件,但智能家居设备根本装不了,这时候就需要网络层面的解决方案。
AdguardHome就像给全家网络装了"净水器",所有设备流量都经过它过滤。我实测下来最明显的三个好处:一是拦截效果覆盖所有联网设备,连智能冰箱的广告都能屏蔽;二是减少30%以上的网络请求,老旧路由器都能感觉变流畅了;三是能屏蔽那些偷偷收集数据的追踪器,比如某些智能电视会持续上传观看记录。
2. 十分钟搞定Docker环境
很多朋友卡在第一步的Docker安装,其实现在Linux系统部署Docker已经非常简单。以最常见的Ubuntu系统为例,只需要三条命令:
sudo apt update sudo apt install docker.io sudo systemctl enable --now docker装完别急着下一步,先做个健康检查:docker run hello-world。这个测试镜像只有13KB,能快速验证Docker是否正常工作。我遇到过阿里云ECS默认的防火墙规则会阻断容器网络,这时候需要额外开端口:
sudo ufw allow 53/tcp sudo ufw allow 53/udp提示:国内用户推荐配置镜像加速,在/etc/docker/daemon.json添加:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
3. 容器部署的三大关键步骤
3.1 持久化存储的正确姿势
AdguardHome运行时会产生两类重要数据:配置文件(conf目录)和工作数据(work目录)。直接挂载到/home目录可能遇到权限问题,我的推荐做法是:
mkdir -p /opt/adguard/{conf,work} chown -R 1000:1000 /opt/adguard # 确保容器用户有写入权限遇到过最坑的情况是SELinux导致的权限拒绝,这时候要么关闭SELinux(不推荐),要么添加正确的安全上下文:
chcon -Rt svirt_sandbox_file_t /opt/adguard3.2 端口映射的智能方案
原始方案直接暴露53端口可能和系统dnsmasq服务冲突。更稳妥的做法是:
- 先用非标准端口测试(比如5353)
- 确认服务正常后再切换
docker run -d \ --name adguard \ -v /opt/adguard/conf:/opt/adguardhome/conf \ -v /opt/adguard/work:/opt/adguardhome/work \ -p 5353:53/tcp -p 5353:53/udp \ -p 3000:3000/tcp \ adguard/adguardhome等通过3000端口完成初始化配置后,再停用系统DNS服务并改用53端口。对于家庭网络,建议把DoH(DNS-over-HTTPS)的443端口也映射出来。
3.3 首次配置避坑指南
访问http://服务器IP:3000 时会遇到几个关键选项:
- 监听接口:选0.0.0.0才能被局域网访问
- 上游DNS:不建议直接用ISP提供的DNS,推荐组合:
- 国内:119.29.29.29 + 223.5.5.5
- 国外:tls://dns.google
- 查询日志:家庭用户建议关闭,既保护隐私又节省资源
配置完成后一定要测试DNS泄漏,在https://www.dnsleaktest.com 跑扩展测试,确保所有查询都经过AdguardHome。
4. 家庭网络专属优化技巧
4.1 路由器联动方案
普通家用路由器一般支持三种部署模式:
- DNS重定向(推荐):在路由器DHCP设置中将DNS服务器指向AdguardHome的IP
- 透明网关:需要路由器支持iptables重定向53端口
- 替代路由器DNS:直接修改WAN口DNS设置
以OpenWRT为例,具体操作路径:
网络 → 接口 → LAN → DHCP服务器 → 高级设置 → DNS服务器4.2 家长控制实战
AdguardHome的"家长控制"比路由器自带的功能更灵活:
- 按时间段阻断社交/视频网站(比如19-21点)
- 屏蔽特定类型内容(赌博/成人网站)
- 自定义过滤列表(封杀某音等短视频)
# 在自定义过滤规则中添加 ||douyin.com^$important ||tiktok.com^$important4.3 智能设备特别处理
IoT设备经常需要放行特定域名,比如小米设备需要:
@@||mi.com^$important @@||xiaomi.com^$important电视盒子类设备建议单独创建客户端规则,禁用加密DNS(DoH/DoT),否则可能无法正常使用。
5. 高阶维护与监控
5.1 自动化更新方案
官方镜像更新频繁,推荐用watchtower自动更新:
docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ --interval 86400 # 每天检查一次5.2 性能监控技巧
通过Grafana+Prometheus监控关键指标:
- DNS查询量/拦截量
- 平均响应时间
- 内存/CPU使用率
AdguardHome自带Prometheus接口,配置示例:
# prometheus.yml 片段 scrape_configs: - job_name: 'adguard' static_configs: - targets: ['adguard:3000']5.3 备份策略
我用的rsync增量备份方案,每天凌晨3点同步到NAS:
0 3 * * * rsync -avz --delete /opt/adguard/ user@nas:/backups/adguard/关键配置建议导出为文本备份:
docker exec adguardhome /opt/adguardhome/AdGuardHome -c /opt/adguardhome/conf/AdGuardHome.yaml --export > config.yaml