news 2026/9/28 19:51:07

树莓派5+OMV7+Docker部署AdGuard Home:全屋DNS去广告实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派5+OMV7+Docker部署AdGuard Home:全屋DNS去广告实战

1. 为什么我要折腾树莓派5加OMV7这套组合

家里联网设备一多,电视开机先看十几秒广告,手机App里各种开屏推广,连智能音箱都时不时推个会员提醒。最开始我在每台设备上装去广告插件,电视端装不了,手机端浏览器和App各管各的,维护起来太碎。后来想着干脆从网络入口统一处理,所有设备走同一个DNS,谁也别想偷偷塞广告进来。

选树莓派5是因为它性能够用、功耗低、常年开机不心疼电费。我实测过树莓派4跑AdGuard Home,家里十几台设备同时在线,查询量一上来偶尔会卡顿,树莓派5的CPU和内存带宽提升明显,处理DNS查询这种轻量但高频的任务更从容。OMV7(OpenMediaVault 7)是基于Debian 12的NAS系统,自带Docker管理界面,省得我手动敲一堆命令,而且它本身就能管硬盘、做共享,顺便把家里闲置的移动硬盘利用起来。

AdGuard Home是我最终选定的去广告方案,原因有三个:第一,它同时支持DNS层面的广告拦截和自定义过滤规则,覆盖电视、手机、电脑全平台;第二,它有Web管理界面,看查询日志、加白名单、调过滤规则都很直观;第三,它跑在Docker里,升级和迁移都方便,哪天树莓派坏了,把配置目录拷到新机器上就能恢复。

这套方案适合谁?如果你家里有树莓派或者类似的小主机,愿意花一个周末下午折腾一次,之后全家设备都能受益,那这篇内容就是写给你的。不需要你懂太多Linux,但基本的SSH操作和Docker概念得有一点,完全没有也没关系,我会把每一步都拆开讲。

注意:AdGuard Home做的是DNS层拦截,它能挡住大部分域名级别的广告请求,但挡不住和内容同域名的广告(比如某些视频网站把广告和正片放在同一个域名下)。这是DNS拦截的天然边界,心里要有预期。

2. 硬件与系统准备:树莓派5装OMV7的完整流程

2.1 硬件清单与选型理由

先列一下我实际用的东西,你照着买或者用手头现有的替代都行。

部件我的选择说明
主板树莓派5 8GB4GB也够跑AdGuard Home,但OMV7加Docker加其他服务,8GB更从容
存储三星EVO Plus 128GB microSD系统盘,OMV7本身占不了多少空间
电源官方27W USB-C电源树莓派5对供电要求比4代高,别用旧手机的充电头凑合
散热官方主动散热器常年开机,被动散热压不住,主动风扇噪音很小
网线六类线走有线,DNS服务对延迟敏感,WiFi不稳
数据盘闲置2.5寸移动硬盘用来存OMV的共享文件,和系统盘分开

树莓派5的供电是个坑。我一开始用某个65W氮化镓充电头,标称支持PD,但树莓派5开机就报低电压警告,外接硬盘一插直接重启。后来换官方27W电源才稳定。如果你要用移动硬盘,建议选带独立供电的硬盘盒,或者用SSD加硬盘盒,功耗更低。

2.2 系统安装:从烧录到首次启动

树莓派5装OMV7,我的做法是先装Raspberry Pi OS Lite 64位,再用官方脚本转成OMV。为什么不直接刷OMV的镜像?因为OMV官方对树莓派5的镜像支持还在完善中,用Raspberry Pi OS做底再装OMV,兼容性更稳,遇到问题也容易搜到解决方案。

具体步骤:

  1. 用Raspberry Pi Imager烧录Raspberry Pi OS Lite 64位到microSD卡。烧录前在Imager的高级设置里开启SSH、设置用户名密码、配置WiFi(虽然最终走有线,但首次启动用WiFi方便)。
  2. 插卡启动,等两分钟,用SSH连上去。第一次登录后先更新系统:
sudo apt update && sudo apt full-upgrade -y
  1. 改主机名,方便后面在路由器里识别:
sudo raspi-config

在System Options里改Hostname,我改成omv-nas。同时把时区改成Asia/Shanghai。 4. 安装OMV7。官方提供了一键脚本:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

这个脚本会跑十几分钟,中途会问你几次确认,一路回车就行。跑完后重启,用浏览器访问http://树莓派IP,默认账号admin,密码openmediavault。

注意:OMV7默认会占用80端口,如果你后面想用80端口跑别的服务,记得先在OMV的Web管理里改端口。我改成8080,避免和AdGuard Home的Web界面冲突。

2.3 OMV7初始化设置

首次登录OMV,系统会提示你改密码,顺手改掉。然后做几件事:

  • 在“存储器”里挂载数据盘。如果硬盘之前有数据,OMV会提示你挂载而不是格式化,选挂载就行。
  • 在“共享文件夹”里建一个目录,比如media,后面Docker的配置目录可以放这里。
  • 在“用户”里确认你的SSH用户有权限访问共享文件夹。

OMV7的Docker管理需要装openmediavault-compose插件。在“系统”-“插件”里搜索compose,安装它。装完后左侧菜单会多出“服务”-“Compose”,这就是我们后面部署AdGuard Home的地方。

3. Docker部署AdGuard Home:配置与参数详解

3.1 为什么用Docker而不是直接装

AdGuard Home官方提供二进制安装和Docker镜像两种方式。我选Docker的理由很实际:OMV7本身就在用Docker跑一些服务,统一管理方便;升级AdGuard Home时,直接拉新镜像重启容器就行,不用管依赖;配置和数据都在挂载目录里,迁移时拷贝目录即可。

Docker Compose方式比docker run更适合我,因为配置写在YAML文件里,改端口、改挂载路径一目了然,重装时直接复用文件。

3.2 Compose文件编写与参数计算

在OMV的Compose界面新建一个文件,或者SSH到树莓派上手动创建。我习惯在/srv/mergerfs/.../docker/adguardhome这样的路径下放配置,你根据自己硬盘挂载点调整。

version: "3" services: adguardhome: image: adguard/adguardhome:latest container_name: adguardhome restart: unless-stopped ports: - "53:53/tcp" - "53:53/udp" - "3000:3000/tcp" - "8081:80/tcp" volumes: - /srv/dev-disk-by-uuid-xxxx/docker/adguardhome/work:/opt/adguardhome/work - /srv/dev-disk-by-uuid-xxxx/docker/adguardhome/conf:/opt/adguardhome/conf environment: - TZ=Asia/Shanghai

几个关键点解释一下:

  • 53端口:DNS服务端口,TCP和UDP都要映射。UDP用于常规查询,TCP用于大响应和区域传送。两个都开,别只开UDP。
  • 3000端口:AdGuard Home首次安装时的初始化Web端口。装完后管理界面默认走80,但80可能被OMV占用,所以我映射到8081。
  • 挂载目录:work存查询日志和统计,conf存配置和过滤规则。这两个目录必须持久化,否则容器重启后配置全丢。
  • TZ环境变量:设置时区,否则日志时间对不上,排查问题时很麻烦。

提示:如果你的树莓派上已经有服务占用了53端口(比如systemd-resolved),需要先停掉它。执行sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved,然后编辑/etc/resolv.conf把nameserver改成127.0.0.1。这一步不做,AdGuard Home起不来。

3.3 首次启动与初始化向导

Compose文件保存后,在OMV的Compose界面点“启动”,或者SSH执行docker compose up -d。等十几秒,浏览器访问http://树莓派IP:3000,进入AdGuard Home初始化向导。

向导会问你三件事:

  1. 管理界面端口:默认80,我改成8081,因为80被OMV占了。
  2. DNS服务端口:保持53。
  3. 用户名密码:设置一个强密码,别用默认的。

设置完成后,用http://树莓派IP:8081登录管理界面。这时候AdGuard Home已经在监听53端口了,但还没有设备用它。

4. 让全家设备走AdGuard Home:路由器与终端配置

4.1 路由器DHCP下发DNS

最省事的做法是在路由器里把DHCP下发的DNS服务器改成树莓派的IP。这样家里所有设备自动获取到的DNS就是AdGuard Home,不用一台台改。

不同路由器界面不一样,但逻辑相同:找到DHCP设置,把“主DNS”填树莓派IP,“备用DNS”留空或者填一个公共DNS(比如223.5.5.5)。为什么备用DNS要留空?因为如果填了公共DNS,设备在AdGuard Home响应慢时会直接走备用DNS,广告就漏过去了。留空的话,设备只能走AdGuard Home,拦截率最高。

我用的路由器支持自定义DHCP选项,直接把DNS指向树莓派。改完后,家里设备重新连WiFi或者重启网络,就会用新的DNS。

4.2 电视和手机的特殊处理

电视比较麻烦。有些电视系统会强制使用内置DNS,不理会路由器下发的设置。我遇到的情况是,电视连上WiFi后,DNS还是运营商的。解决办法有两个:

  • 在电视的网络设置里手动指定静态IP和DNS,DNS填树莓派IP。
  • 如果电视不允许改DNS,就在路由器里做端口转发,把电视的53端口请求强制转发到树莓派。这个操作因路由器而异,我的路由器支持“DNS重定向”功能,开启后所有53端口请求都走树莓派。

手机端相对简单。iOS和Android在WiFi设置里都能手动改DNS。但更彻底的做法是,如果家里有旁路由或者支持DNS重定向的路由器,直接全局劫持53端口,手机连上WiFi就自动生效,不用每台设备改。

注意:AdGuard Home的查询日志会记录每台设备的请求。如果你在意隐私,可以在设置里关闭日志记录,或者只保留统计不保留详细记录。我一般保留7天日志,方便排查哪个设备在疯狂请求广告域名。

4.3 验证是否生效

配置完后,用手机连WiFi,打开浏览器访问http://树莓派IP:8081,看“查询日志”里有没有这台手机的请求。如果有,说明DNS已经走AdGuard Home了。然后打开一个之前有广告的App,看广告是否消失。我实测下来,大部分App的开屏广告和横幅广告都能去掉,视频前贴片广告去不掉,因为那是同域名内容。

另一个验证方法是命令行查询:

nslookup doubleclick.net 树莓派IP

如果返回0.0.0.0或者NXDOMAIN,说明拦截生效。

5. 过滤规则与性能调优:让拦截更精准

5.1 过滤规则的选择与组合

AdGuard Home自带一个“过滤器”菜单,里面可以添加各种规则列表。我常用的组合:

规则列表用途特点
AdGuard DNS filter基础广告拦截官方维护,误杀少
AdAway移动端广告对App内广告覆盖好
EasyList China中文广告针对国内网站优化
1Hosts (Lite)综合拦截体积小,性能好
Anti-AD国内广告更新频繁,覆盖广

规则不是越多越好。我一开始加了十几条规则,结果有些正常网站被误杀,比如某些CDN域名被拦了,导致图片加载不出来。后来精简到5条,日常使用基本没遇到误杀。如果你发现某个网站打不开,先去“查询日志”里看是不是被规则拦了,然后加白名单。

5.2 性能调优与缓存设置

树莓派5跑AdGuard Home,默认配置下CPU占用很低,但查询量大时(比如家里有人刷短视频),可以调几个参数:

  • 缓存大小:在“DNS设置”里把缓存大小调到4194304(4MB),能缓存更多查询结果,减少上游查询。
  • 上游DNS:我用223.5.5.5和119.29.29.29,国内解析快。如果你有特殊需求,可以加tls://dns.pub这样的加密DNS,但会增加一点延迟。
  • 并发查询:开启“并行查询”,让AdGuard Home同时问多个上游,取最快响应。实测能降低平均延迟。

提示:不要开启“DNSSEC”除非你确定所有上游都支持。我开过一次,结果部分网站解析失败,排查了半天才发现是DNSSEC验证不通过。家用环境,DNSSEC带来的收益有限,稳定性更重要。

5.3 客户端分组与差异化规则

AdGuard Home支持按客户端设置不同规则。比如我给孩子用的平板,额外加了一条“安全搜索”规则,强制开启搜索引擎的安全模式。给电视单独设一组,只拦广告不拦其他。这个功能在“客户端设置”里配置,先给设备命名,然后绑定IP,再指定规则。

6. 常见问题与排查技巧实录

6.1 设备无法上网或解析失败

这是最常见的问题。排查顺序:

  1. 确认树莓派本身能上网:ping 223.5.5.5。
  2. 确认AdGuard Home在运行:docker ps看容器状态。
  3. 确认53端口没被占用:sudo netstat -tulpn | grep 53。
  4. 确认路由器DHCP下发的DNS是树莓派IP。
  5. 如果只有部分设备不行,检查那台设备的DNS设置是不是被手动改过。

我遇到过一次,手机能上网但电视不行。后来发现电视的WiFi设置里DNS是手动指定的运营商DNS,改成自动获取就好了。

6.2 广告拦截不生效

先看查询日志里有没有广告域名的请求。如果没有,说明DNS没走AdGuard Home。如果有请求但没被拦,检查规则是否启用、规则列表是否更新。AdGuard Home的规则需要手动点“更新”才会拉取最新版本,我设了每天自动更新。

还有一种情况:某些App用IP直连或者DoH(DNS over HTTPS)绕过DNS拦截。DoH在App内部加密发送DNS查询,AdGuard Home看不到。这种情况只能靠App自身的去广告版本,或者用更上层的拦截方案。

6.3 树莓派5温度与稳定性

树莓派5跑OMV7加Docker,待机温度大概45度,负载高时到60度。官方主动散热器能把温度压在70度以下,没问题。如果你用被动散热,夏天可能会降频。建议在OMV里装个温度监控,或者定期vcgencmd measure_temp看一下。

电源稳定性前面提过,再强调一次:别用杂牌充电头。我因为电源问题排查了一整个晚上,最后换官方电源解决。

6.4 常见问题速查表

现象可能原因解决方法
容器起不来53端口被占停掉systemd-resolved
设备无法上网DNS没指向树莓派检查DHCP设置
广告漏拦备用DNS没留空路由器里清空备用DNS
部分网站打不开规则误杀查询日志加白名单
查询延迟高上游DNS慢换国内DNS,开并行查询
配置丢失目录没挂载检查Compose挂载路径

7. 日常维护与扩展玩法

7.1 自动更新与备份

AdGuard Home的规则列表可以设自动更新,在“过滤器”-“自动更新”里开启,间隔设24小时。容器镜像的更新我用OMV的Compose界面手动拉取,因为自动更新偶尔会拉到不兼容的版本。更新前先备份conf目录,出问题能回滚。

备份很简单,把/srv/.../adguardhome/conf整个目录打包存到数据盘或者另一台机器上。恢复时解压回去,重启容器就行。

7.2 扩展:加个本地DNS记录

AdGuard Home支持自定义DNS记录。我在“DNS设置”-“DNS重写”里加了几条,把家里NAS的域名指向内网IP,这样在内网访问NAS不用记IP。比如nas.home指向192.168.1.100,手机和电脑都能直接用域名访问。

7.3 扩展:配合OMV做文件共享

OMV本身能做SMB共享,我把数据盘挂载后建了共享文件夹,电视和手机都能访问。这样树莓派5既是DNS服务器又是轻量NAS,一机两用。功耗实测待机5W左右,满载10W,一年电费可以忽略。

我在实际使用中发现,这套方案最大的价值不是省了多少钱,而是把全家网络入口统一管起来了。以前每台设备各自为战,现在改一条规则,所有设备生效。孩子平板上突然冒出来的广告,我在AdGuard Home里看一眼日志就能定位是哪个App在请求,然后加规则拦掉。这种掌控感是装单个去广告插件给不了的。

最后分享一个小技巧:如果你不确定某条规则会不会误杀,先在“查询日志”里找到那个域名,点“加入白名单”测试一天,确认没问题再决定是否保留规则。别一上来就加一堆规则,稳定比激进重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 19:50:21

EtherCAT主站时钟同步实战:SOEM分布式时钟配置与从站抖动排查

做EtherCAT主站开发有一阵子了,SOEM是我日常用得最多的开源方案,代码量不大、跨平台性好,非常适合快速搭建一个能跑通的主站。但前阵子在一个现场被一个“诡异”的问题卡了整整两天:一组伺服从站,明明都成功进入OP状态…

作者头像 李华
网站建设 2026/9/28 19:50:19

SOEM主站时钟同步全解析:从分布式时钟到从站抖动消除

1. 从一张波形图说起:主站时钟同步到底在解决什么问题我接触SOEM开发大概是从一个非常具体的现象开始的。当时我用正点原子RK3568的开发板跑EtherCAT主站,接了一个汇川的伺服驱动器做位置同步测试,目标是把三个轴跑起来,让它们严格…

作者头像 李华
网站建设 2026/9/28 19:50:08

ZYNQ PS-MAC通过EMIO扩展RGMII网口:电平标准不匹配的排查与解决

1. 问题现场:网口死活不通,数据全是乱码ZYNQ 平台上用 PS 端 MAC 控制器,通过 PL 侧的 EMIO 把 RGMII 信号引到外部 PHY,结果网口数据异常——要么链路起不来,要么能协商但丢包严重,要么收到的全是错帧。这…

作者头像 李华
网站建设 2026/9/28 19:49:40

卷积神经网络实现红外图像非均匀性校正:从原理到Python实战

简介:面向毕设项目、课程设计、大作业与工程实训场景,交付一套基于卷积神经网络的红外图像非均匀性校正完整方案。针对红外焦平面阵列输出中常见的条纹与固定图案噪声,方案采用两个残差块级联的残差学习结构(RNUC)&…

作者头像 李华
网站建设 2026/9/28 19:49:38

基于CNN的红外图像非均匀性校正:条纹消除实战指南

简介:基于Python与卷积神经网络的红外图像非均匀性校正毕业设计,聚焦红外图像中的非均匀性噪声问题,提出一种命名为RNUC的残差学习校正网络,通过级联两个残差块并配合合并式特征提取单元,实现端到端的校正处理。资源面…

作者头像 李华