飞牛NAS(FnOS)的 Docker 应用自带 Compose 功能,通过"新增项目"界面填写 YAML 即可部署,无需命令行操作。本文将介绍如何通过这种方式搭建 AdGuard Home + SmartDNS 组合,实现局域网广告过滤和 DNS 解析加速。
为什么要搭配使用
SmartDNS 负责智能解析:它同时向多个上游 DNS 服务器发起查询,选择响应最快的 IP 返回。当某个域名被 DNS 污染时,SmartDNS 能通过测速从备选上游拿到正确结果。
AdGuard Home 负责广告过滤:基于域名规则拦截广告、跟踪器和恶意网站,还提供美观的 Web 管理面板和统计图表。
两者串联后,AdGuard Home 作为前端接收局域网设备的 DNS 请求,上游指向 SmartDNS,SmartDNS 再对接多个公共 DNS。这样既能在 AdGuard Home 中看到每台设备的查询日志,又能利用 SmartDNS 的速度优选和防污染能力。
设备 → AdGuard Home (:53) → SmartDNS (:6053) → 上游 DNS 服务器
环境准备
- 在路由器上为飞牛NAS 设置固定 IP,例如
192.168.31.100(小米路由器默认为192.168.31.x网段)
本文所有操作均在飞牛OS 网页管理界面中完成,无需 SSH。
安装 SmartDNS
创建配置目录和文件
打开飞牛OS 的"文件管理",进入 Docker 存储目录(如 /vol1/1000/),新建文件夹 smartdns,并在其中新建子文件夹 logs。
然后在 /vol1/1000/smartdns/ 下新建文件 smartdns.conf,写入以下内容:
| |
通过 Docker 新增项目部署
打开飞牛OS 的 Docker 应用,切换到 项目 标签页,点击 新增项目,填写:
- 项目名称:
smartdns - Compose 配置(粘贴以下 YAML):
| |
network_mode: host 表示容器直接使用宿主机网络,SmartDNS 监听在宿主机的 6053 端口,无需额外端口映射。
填写完毕后点击 部署,等待镜像拉取完成即可。
部署后在 Docker 的 容器 标签页可看到 smartdns 运行状态。待 AdGuard Home 部署完成后,通过 AdGuard Home 面板即可验证整体链路是否正常,无需单独测试 SmartDNS。
安装 AdGuard Home
AdGuard Home 更简单——连配置文件都不用手动创建。
同样在 Docker 的 项目 标签页点击 新增项目:
- 项目名称:
adguardhome - Compose 配置(粘贴以下 YAML):
| |
点击 部署,work 和 conf 目录会自动创建。部署完成后 AdGuard Home 直接监听宿主机 53(DNS)和 3000(管理面板)端口。
初始化配置
浏览器访问 http://192.168.31.100:3000,根据向导完成初始化:
- 管理界面端口:保持
3000 - DNS 服务器端口:保持
53
如果端口 53 被飞牛NAS 系统自带的服务占用(常见情况),先在飞牛 SSH 中停用系统 DNS 解析服务:
1 2sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved然后编辑
/etc/systemd/resolved.conf中的DNSStubListener=no。
- 设置管理员账户和密码
- 上游 DNS 服务器:填入
127.0.0.1:6053(即指向 SmartDNS) - 并行请求:勾选(可选,让 AdGuard Home 同时查询所有上游)
配置上游指向 SmartDNS
初始化完成后进入管理面板,在"设置 → DNS 设置"中:
- 上游 DNS 服务器:
127.0.0.1:6053 - Bootstrap DNS 服务器:留空
- 并行请求:勾选
- 启用 DNSSEC:不勾选
- 缓存大小:设为
0(关闭缓存,统一由 SmartDNS 负责缓存)
为什么要关闭 AdGuard Home 的缓存?
SmartDNS 已配置了缓存和测速机制,如果 AdGuard Home 也开启缓存,会导致两层缓存叠加:SmartDNS 测速选出的最优 IP 被 AdGuard Home 缓存后,即使此后 SmartDNS 测出更优结果,AdGuard Home 仍会返回旧缓存。关闭 AdGuard Home 缓存,让 SmartDNS 全权负责解析结果的选择与缓存,能保证每次返回的都是当前最优 IP。
添加广告过滤规则
在"过滤器 → DNS 拦截列表"中,添加以下常用规则:
| 规则名称 | 地址 |
|---|---|
| AdGuard DNS filter(内置) | 在"过滤器 → DNS 拦截列表"中直接启用 |
| 217heidai adblockfilters | https://raw.githubusercontent.com/217heidai/adblockfilters/main/rules/adblockdns.txt |
内置规则已能过滤大部分广告和跟踪器,补充一条 217heidai 规则即可覆盖国内常用场景,不必贪多。
将局域网设备指向 AdGuard Home
在路由器 DHCP 设置中,将 DNS 服务器地址改为飞牛NAS 的 IP(192.168.31.100),所有局域网设备就会自动使用 AdGuard Home 进行 DNS 解析。
如果路由器不支持修改 DHCP DNS,可以手动在每台设备的网络设置中,将 DNS 设为飞牛NAS 的 IP。
验证效果
- 打开 AdGuard Home 管理面板(
http://192.168.31.100:3000),观察仪表盘中的查询统计 - 在浏览器访问一些带广告的网站,确认广告是否被拦截
- 使用
nslookup从局域网设备查询域名,确认返回结果来自 AdGuard Home:
| |
常见问题
Q:飞牛NAS 重启后容器没有自动启动?
A:检查 Docker Compose 中是否设置了 restart: always,飞牛NAS 的 Docker 默认会在开机后自动启动该策略的容器。
Q:某些网站打不开?
A:可能被广告规则误杀。在 AdGuard Home 的"查询日志"中找到被拦截的域名,点击"解除封锁"并加入自定义白名单。
Q:如何更新规则?
A:AdGuard Home 默认每 24 小时自动更新过滤规则,也可在"过滤器"页面手动点击"检查更新"。
Q:路由器重启后 DNS 失效?
A:确保飞牛NAS 为固定 IP,且路由器 DHCP DNS 设置指向该固定 IP。