openclash+adguarddhome+MosDNS广告拦截DNS防泄漏国内外分流解析我们常用来实现 DNS 广告拦截、智能分流与DNS防污染功能。此前的我们多种设置,包括passwall+adguardhome+MosDNS结合使用使用都能稳定高效运行,但发现了一个问题OpenClash里的 Fake-IP 模式无法生效,这也是在先前的视频小伙伴留言反应了这个问题,之前并没有察觉。所以多少呢影响了某些代理规则与访问效率以及安全性问题。近期,经过反复测试与调试,最终实现了 Fake-IP 生效、DNS防泄漏、并且对比先前配置AdGuardHome广告拦截效果增强效果更好、配合MosDNS作为DNS缓存智能化的三重优化目标。


本篇文章将分享科技老王经过实测验证的一套完整闭环 DNS 架构:让Open Clash的 Fake-IP 正常生效、Adguardhome广告拦截更强、MosDNS 缓存稳定高效,并避免 DNS 污染与重复解析问题。
当然了声明一下这里的DNS解析逻辑呢可能会有一些争议因为openclash与Mosdns自我形成了一个闭环,所以也可能会形成一个死循环或者解析错误反而反应滞后,小伙伴需要谨慎尝试,看是否适合自己使用场景
✅ 核心目标
- ✔️ Fake-IP 模式恢复生效,增强代理解析能力 – 这是这里的重要今天我们就是要解决这个问题
- ✔️ AdGuardHome 广告拦截更彻底,减少漏网之鱼 – 这是这里的重要今天我们就是要解决这个问题
- ✔️ MosDNS 作为中转缓存与加速器,轻量且高效 – 这里只是测试使用,并不是唯一性,仅供参考
- ✔️ 构建完整闭环链路,由 OpenClash 做最终 DNS 决策,保证全局解析安全
🔁 数据流逻辑(完整闭环版)
整体流量走向如下:
客户端请求
↓
OpenClash 劫持 DNS
↓
AdGuardHome(监听 533 端口,广告拦截)
↓
MosDNS(监听 5335 端口,仅做缓存)
↓
OpenClash(监听 7874 端口,最终解析)
↓
上游 DNS(DoH / DoT)

🔧 核心变更点:我经过多种测试发现,只有将 DNS 流量首先导入 OpenClash 并由其进行 Fake-IP 处理,才能让该模式生效。因此,调整后的关键设置是将 OpenClash 置于 DNS 链路的起始位置,其他组件以此为基础进行配置,然后MosDNS 的上游再设为 OpenClash 自身(7874 端口),形成解析闭环,让 OpenClash 全权决定出境/境内,并确保 Fake-IP 正常工作。
📌 各组件配置详解
1️⃣ OpenClash 设置
- 启用 Fake-IP 模式
- 启用 dnsmasq 劫持 DNS 请求
Nameserver
: 指向 AdGuardHome →127.0.0.1#533
Fallback DNS
: 国外加密 DNS(如tls://1.1.1.1
,tls://8.8.8.8
)Default Nameserver
: 国内备用(如114.114.114.114
)- 保持监听 7874 端口作为最终 DNS 转发接口
✅ 重点:OpenClash 是首端劫持入口,也是最终上游解析出口(MosDNS 的上游就是它)

Nameserver
: 指向 AdGuardHome → 127.0.0.1#533

Fallback DNS
: 国外加密 DNS(如 tls://1.1.1.1
, tls://8.8.8.8
)
114.114.114.114
或者运营商DNS)2️⃣ AdGuardHome 设置(广告过滤核心)
- 监听端口:533
- 上游 DNS 设置为 MosDNS:
127.0.0.1:5335
- 关闭缓存让MosDNS做缓存服务器、开启广告规则过滤(如 EasyList、AdGuard 中文规则等)
✅ 重点:AdGuardHome 专注广告拦截,避免劫持与分流职责干扰效果。

3️⃣ MosDNS 设置(轻量缓存节点)
- 监听端口:5335
- 上游 DNS 设置:
127.0.0.1:7874
(OpenClash 的 DNS 监听端口) - 关闭 53 端口监听,放弃 dnsmasq 接管
- 保持缓存开启,但不做复杂国内外分流逻辑
✅ 重点:MosDNS 不再直接处理国内/国外域名,而是缓存+转发给 OpenClash,自身负担大大减轻。

✅ 效果验证
测试项目 | 结果 |
---|---|
Fake-IP 模式 | ✅ 正常生效,策略匹配完整 |
广告拦截效果 | ✅ 明显增强,干净清爽 |
DNS 分流与污染处理 | ✅ 稳定,未出现污染 |
MosDNS 缓存命中率 | ✅ 提升,减少重复查询 |

⚠️ 注意事项
- MosDNS 的上游必须是 OpenClash 的监听端口(如 7874),否则闭环无法形成
- 各组件监听端口不要冲突,建议使用非标准端口如 533 / 5335
- 如果出现 DNS 死循环或请求失败,请逐层排查(可用 nslookup 工具)
- 关闭系统本地 DNS 服务(如 systemd-resolved)避免干扰
❗注意逻辑关键点:
- OpenClash 首次接管 DNS:确保 Fake-IP 生效。
- AdGuardHome 在中间层:只负责广告拦截,不做复杂分流。
- MosDNS 不再做主控分流:只做缓存转发。
- MosDNS 的上游回到 OpenClash:形成“闭环”。
✅ 为什么这个配置可以正常上网?
这是因为 OpenClash 同时承担了:
- 初始 DNS 劫持入口(处理 fake-ip、生效策略)
- 最终 DNS 出口(通过 DoH/DoT 出境解析)
而 MosDNS 和 AdGuardHome 在这个链路中仅起到“缓存”与“广告清洗”的作用,不再主导分流与出境路径,所以不会造成 DNS 循环或错误。
⚠️ 可能的风险或不完美之处
项目 | 说明 |
---|---|
❗潜在死循环 | 如果 OpenClash 被配置为再回去找 AdGuardHome 解析(比如 fallback 时),可能造成循环。确保 OpenClash 的 DNS 设置中,不要再指向 AdGuardHome 或 MosDNS 作为 fallback。 |
⚠️ MosDNS 失去智能分流 | MosDNS 原本支持国内/国外判断,但现在上游改为 OpenClash,已经“失去智能性”,它成了纯粹的缓存转发器。但如果你只需要性能优化,这也没问题。 |
⚠️ 不好排错 | 如果链路中出现解析错误(如某层挂掉),排查成本会较高,建议保留日志、用 dig 工具测试每层响应。 |
🔚 闭环型优化方案:
- ✅ 可以实现 fake-ip 模式
- ✅ 可以实现广告拦截增强
- ✅ MosDNS 有缓存优化效果
- ⚠️ 不建议新手用户部署,设置需谨慎
本方案的关键在于:让 OpenClash 成为 DNS 的起点和终点,其他组件如 AdGuardHome 与 MosDNS仅做中转与优化工作。通过这种方式,不仅 Fake-IP 能恢复正常、广告拦截效果提升,整个 DNS 架构也更清晰、可控、灵活,适合对网络环境有较高需求的用户部署。
如你也遇到 DNS 混乱、Fake-IP 失效、广告拦不干净的问题,不妨尝试这套方案。当然,部署前请务必做好备份,并在测试环境中仔细验证。
发表回复