1. 为什么你需要AdguardHome容器化部署家里智能设备越来越多我发现一个奇怪现象电视开机先播30秒广告智能音箱偶尔推送购物推荐连冰箱上的显示屏都会弹出促销信息。这些设备像长了眼睛一样时刻关注着我们的生活。后来才明白问题出在DNS查询这个最基础的网络环节上——所有设备上网的第一步都要经过DNS解析而默认的DNS服务器往往会收集我们的查询记录。AdguardHome就像给家里网络装了个净化器它能拦截广告域名、屏蔽跟踪器还能加密DNS查询。我最初在树莓派上直接安装结果系统升级时配置全丢了。后来改用Docker容器化方案不仅部署简单还能实现配置持久化、版本管理和快速迁移。现在家里所有设备包括访客WiFi都默认走这个DNS过滤手机上的开屏广告少了90%网页加载速度也快了不少。2. 十分钟搞定Docker环境2.1 选择最适合的硬件设备我用过三种硬件方案闲置笔记本功耗高但性能强、树莓派4B省电但ARM架构有兼容性问题、最后选定了一台迷你PCJ4125处理器/8G内存。实测带20设备毫无压力待机功耗仅6瓦。如果你刚开始尝试旧手机刷Ubuntu系统都能跑起来。关键指标要看内存1GB足够基础使用想开查询日志分析建议2GB存储系统盘8GB足够但广告规则库会持续增长网络必须有线连接WiFi做网关会有延迟波动2.2 一条命令安装Docker不同系统安装方式差异很大这里给出经过实测的通用方案# 国内用户推荐使用阿里云镜像加速 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 非root用户需要添加到docker组 sudo usermod -aG docker $USER newgrp docker # 验证安装 docker run --rm hello-world常见踩坑点Ubuntu默认会提示Permission denied需要注销重新登录树莓派等ARM设备要确认下载的是armhf/arm64版本企业网络可能屏蔽Docker仓库需要配置代理需符合相关规定3. AdguardHome容器深度配置3.1 数据持久化最佳实践官方推荐挂载两个目录但我发现实际需要三个关键目录# 配置文件核心 mkdir -p /opt/adguard/conf # 工作数据日志/缓存 mkdir -p /opt/adguard/work # 自定义规则重要 mkdir -p /opt/adguard/custom权限设置有个隐藏技巧AdguardHome默认用1000用户运行需要提前设置chown -R 1000:1000 /opt/adguard3.2 端口映射的智能方案标准部署需要开放5个端口但家庭网络可以简化docker run -d \ --name adguard \ --restart unless-stopped \ -v /opt/adguard/conf:/opt/adguardhome/conf \ -v /opt/adguard/work:/opt/adguardhome/work \ -v /opt/adguard/custom:/opt/adguardhome/custom \ -p 53:53/tcp -p 53:53/udp \ -p 3000:3000/tcp \ -p 853:853/tcp \ # DNS-over-TLS --dns 1.1.1.1 \ --dns 8.8.8.8 \ adguard/adguardhome端口安全建议3000端口初始配置完成后建议改为非标准端口53端口必须开放给内网设备DoT的853端口可以提升移动设备安全性4. 家庭网络无缝集成方案4.1 路由器配置技巧主流路由器有三种配置模式DHCP模式最推荐让AdguardHome分配IP并下发自身为DNSDNS转发模式路由器DHCP保持原样仅将DNS请求转发透明网关模式需要iptables规则重定向53端口以OpenWRT为例的配置示例# 修改DHCP配置 uci set dhcp.dnsmasq[0].noresolv1 uci set dhcp.dnsmasq[0].localuse1 uci add_list dhcp.dnsmasq[0].server127.0.0.1#5353 uci commit /etc/init.d/dnsmasq restart4.2 智能设备特殊处理IoT设备常有硬编码DNS需要强制拦截# 用iptables拦截所有出站DNS iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 53电视盒子这类设备更麻烦建议在AdguardHome中单独设置关闭安全搜索过滤允许部分视频广告域名添加白名单规则5. 高级维护与规则优化5.1 规则订阅的黄金组合经过三个月测试这套规则组合效果最佳基础防护AdGuard DNS filter中文增强anti-AD EasyList China隐私保护Peter Lowes List移动端专用AdGuard Mobile Ads filter自动更新配置# 在AdGuardHome.yaml中添加 filters: - enabled: true url: https://anti-ad.net/easylist.txt name: anti-AD id: 1 - enabled: true url: https://easylist-downloads.adblockplus.org/easylistchina.txt name: EasyList China id: 25.2 性能监控方案用PrometheusGranfana监控关键指标# 启动时添加监控端口 -p 3001:3000/tcp # 管理界面 -p 9090:9090/tcp # Prometheus # prometheus.yml配置示例 scrape_configs: - job_name: adguard static_configs: - targets: [adguard:3000] metrics_path: /metrics重点监控指标avg_processing_time应50msdns_queries突增可能是设备异常blocked_percentage正常在30-50%之间6. 隐私保护的进阶技巧6.1 加密DNS实战DoT配置示例需要域名和证书tls: enabled: true server_name: dns.yourhome.com force_https: true port_https: 443 port_dns_over_tls: 853 certificate_chain: /opt/adguard/conf/fullchain.pem private_key: /opt/adguard/conf/privkey.pem手机配置步骤安卓设置→网络→私人DNSiOS安装描述文件或使用第三方AppWindowsnetsh interface set dnsserver6.2 访客网络隔离方案通过VLAN实现双重保护# 创建访客VLAN ip link add link eth0 name eth0.100 type vlan id 100 ip addr add 192.168.100.1/24 dev eth0.100 # AdGuardHome单独配置 clients: - name: Guest ids: - 192.168.100.0/24 filtering_enabled: true parental_enabled: true safesearch_enabled: true7. 故障排查手册7.1 53端口冲突终极解决新版Ubuntu的解决方案# 禁用systemd-resolved sudo systemctl disable --now systemd-resolved # 手动创建resolv.conf echo nameserver 127.0.0.1 | sudo tee /etc/resolv.conf sudo chattr i /etc/resolv.conf # 防止被覆盖7.2 日志分析实战常用日志命令组合# 实时查看拦截记录 docker exec adguard tail -f /opt/adguardhome/work/data/querylog.json # 统计TOP被拦截域名 jq .data.answers[] | select(.is_filtered true) | .domain querylog.json | sort | uniq -c | sort -nr | head -20 # 检查上游DNS响应时间 grep upstream.*ms adguardhome.log | awk {print $NF} | sort -n | uniq -c
AdguardHome 容器化实战:从零搭建家庭网络隐私堡垒
1. 为什么你需要AdguardHome容器化部署家里智能设备越来越多我发现一个奇怪现象电视开机先播30秒广告智能音箱偶尔推送购物推荐连冰箱上的显示屏都会弹出促销信息。这些设备像长了眼睛一样时刻关注着我们的生活。后来才明白问题出在DNS查询这个最基础的网络环节上——所有设备上网的第一步都要经过DNS解析而默认的DNS服务器往往会收集我们的查询记录。AdguardHome就像给家里网络装了个净化器它能拦截广告域名、屏蔽跟踪器还能加密DNS查询。我最初在树莓派上直接安装结果系统升级时配置全丢了。后来改用Docker容器化方案不仅部署简单还能实现配置持久化、版本管理和快速迁移。现在家里所有设备包括访客WiFi都默认走这个DNS过滤手机上的开屏广告少了90%网页加载速度也快了不少。2. 十分钟搞定Docker环境2.1 选择最适合的硬件设备我用过三种硬件方案闲置笔记本功耗高但性能强、树莓派4B省电但ARM架构有兼容性问题、最后选定了一台迷你PCJ4125处理器/8G内存。实测带20设备毫无压力待机功耗仅6瓦。如果你刚开始尝试旧手机刷Ubuntu系统都能跑起来。关键指标要看内存1GB足够基础使用想开查询日志分析建议2GB存储系统盘8GB足够但广告规则库会持续增长网络必须有线连接WiFi做网关会有延迟波动2.2 一条命令安装Docker不同系统安装方式差异很大这里给出经过实测的通用方案# 国内用户推荐使用阿里云镜像加速 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 非root用户需要添加到docker组 sudo usermod -aG docker $USER newgrp docker # 验证安装 docker run --rm hello-world常见踩坑点Ubuntu默认会提示Permission denied需要注销重新登录树莓派等ARM设备要确认下载的是armhf/arm64版本企业网络可能屏蔽Docker仓库需要配置代理需符合相关规定3. AdguardHome容器深度配置3.1 数据持久化最佳实践官方推荐挂载两个目录但我发现实际需要三个关键目录# 配置文件核心 mkdir -p /opt/adguard/conf # 工作数据日志/缓存 mkdir -p /opt/adguard/work # 自定义规则重要 mkdir -p /opt/adguard/custom权限设置有个隐藏技巧AdguardHome默认用1000用户运行需要提前设置chown -R 1000:1000 /opt/adguard3.2 端口映射的智能方案标准部署需要开放5个端口但家庭网络可以简化docker run -d \ --name adguard \ --restart unless-stopped \ -v /opt/adguard/conf:/opt/adguardhome/conf \ -v /opt/adguard/work:/opt/adguardhome/work \ -v /opt/adguard/custom:/opt/adguardhome/custom \ -p 53:53/tcp -p 53:53/udp \ -p 3000:3000/tcp \ -p 853:853/tcp \ # DNS-over-TLS --dns 1.1.1.1 \ --dns 8.8.8.8 \ adguard/adguardhome端口安全建议3000端口初始配置完成后建议改为非标准端口53端口必须开放给内网设备DoT的853端口可以提升移动设备安全性4. 家庭网络无缝集成方案4.1 路由器配置技巧主流路由器有三种配置模式DHCP模式最推荐让AdguardHome分配IP并下发自身为DNSDNS转发模式路由器DHCP保持原样仅将DNS请求转发透明网关模式需要iptables规则重定向53端口以OpenWRT为例的配置示例# 修改DHCP配置 uci set dhcp.dnsmasq[0].noresolv1 uci set dhcp.dnsmasq[0].localuse1 uci add_list dhcp.dnsmasq[0].server127.0.0.1#5353 uci commit /etc/init.d/dnsmasq restart4.2 智能设备特殊处理IoT设备常有硬编码DNS需要强制拦截# 用iptables拦截所有出站DNS iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 53电视盒子这类设备更麻烦建议在AdguardHome中单独设置关闭安全搜索过滤允许部分视频广告域名添加白名单规则5. 高级维护与规则优化5.1 规则订阅的黄金组合经过三个月测试这套规则组合效果最佳基础防护AdGuard DNS filter中文增强anti-AD EasyList China隐私保护Peter Lowes List移动端专用AdGuard Mobile Ads filter自动更新配置# 在AdGuardHome.yaml中添加 filters: - enabled: true url: https://anti-ad.net/easylist.txt name: anti-AD id: 1 - enabled: true url: https://easylist-downloads.adblockplus.org/easylistchina.txt name: EasyList China id: 25.2 性能监控方案用PrometheusGranfana监控关键指标# 启动时添加监控端口 -p 3001:3000/tcp # 管理界面 -p 9090:9090/tcp # Prometheus # prometheus.yml配置示例 scrape_configs: - job_name: adguard static_configs: - targets: [adguard:3000] metrics_path: /metrics重点监控指标avg_processing_time应50msdns_queries突增可能是设备异常blocked_percentage正常在30-50%之间6. 隐私保护的进阶技巧6.1 加密DNS实战DoT配置示例需要域名和证书tls: enabled: true server_name: dns.yourhome.com force_https: true port_https: 443 port_dns_over_tls: 853 certificate_chain: /opt/adguard/conf/fullchain.pem private_key: /opt/adguard/conf/privkey.pem手机配置步骤安卓设置→网络→私人DNSiOS安装描述文件或使用第三方AppWindowsnetsh interface set dnsserver6.2 访客网络隔离方案通过VLAN实现双重保护# 创建访客VLAN ip link add link eth0 name eth0.100 type vlan id 100 ip addr add 192.168.100.1/24 dev eth0.100 # AdGuardHome单独配置 clients: - name: Guest ids: - 192.168.100.0/24 filtering_enabled: true parental_enabled: true safesearch_enabled: true7. 故障排查手册7.1 53端口冲突终极解决新版Ubuntu的解决方案# 禁用systemd-resolved sudo systemctl disable --now systemd-resolved # 手动创建resolv.conf echo nameserver 127.0.0.1 | sudo tee /etc/resolv.conf sudo chattr i /etc/resolv.conf # 防止被覆盖7.2 日志分析实战常用日志命令组合# 实时查看拦截记录 docker exec adguard tail -f /opt/adguardhome/work/data/querylog.json # 统计TOP被拦截域名 jq .data.answers[] | select(.is_filtered true) | .domain querylog.json | sort | uniq -c | sort -nr | head -20 # 检查上游DNS响应时间 grep upstream.*ms adguardhome.log | awk {print $NF} | sort -n | uniq -c