为什么需要按域名的 DoH:和「规则分流」不是一回事
很多教程会把「打不开某个站」直接引导去改 rules。确实,最终连哪条隧道由规则决定,但若解析阶段就拿错了 IP(例如境内站被境外递归给了次优的 CDN 边缘,或流媒体需要特定地区的权威应答),后面再怎么切换节点都只能在错误的目的地上反复握手。
nameserver-policy 的作用,是在内核收到某次 DNS 查询时,先看被查询的名字是否命中策略键:命中则使用你为该键配置的专用上游列表;未命中则回落到常规的 nameserver 流程,并仍受 fallback 与 fallback-filter 约束。把它理解成「DNS 版的按域名选表」,比单纯堆更多全局 DoH 更可控,也更好排查。
若你尚未搭过完整的 Meta DNS 栈,建议先通读 Meta 内核 DNS 防泄漏终极指南:FakeIP、DoH、DoT 完整配置,建立 dns 各字段的全景;本篇只深挖 policy 的写法与落地验证,避免与泛化 DNS 长文重复。
1和 policy 联动的前置字段:先排好「默认池」
在动手写 nameserver-policy 之前,务必保证三件事清晰:① 谁负责引导启动阶段解析你的 DoH 主机名(通常是 default-nameserver,用轻量 UDP/TCP 或运营商 DNS 即可);② 无策略命中时,默认递归用哪几条(nameserver);③ 何时启用备用池(fallback + fallback-filter)。policy 不是替代品,而是在默认池之上插入的例外映射。
实务上常见组合是:nameserver 放对「大部分大陆域名友好」的 DoH/DoT,fallback 放境外可信递归;再用 nameserver-policy 把 geosite:cn 或具体后缀钉死到国内 DoH,把 +.google.com、+.openai.com 等钉到你希望的境外 DoH,让解析意图与后续代理组/geo 规则一致。这样做比在 fallback-filter 里硬凑所有场景更直观——policy 直接回答「这个名字找谁问」。
policy 命中后还会不会走 fallback?
高层理解:policy 指定的是本次查询优先使用的上游集合;是否进一步触发 fallback,取决于该上游返回的结果是否被判定为「需要降级」以及你的 fallback-filter 设置。别把 policy 当成「绕过所有保护」的开关;若你发现 policy 上游偶发污染,仍应保留全局的降级逻辑,只是在调试时可以用单个域名缩小问题面。
2教学用骨架:nameserver-policy 在 dns 段中的位置
下面是一段强调结构的 YAML:nameserver-policy 与 nameserver、fallback 并列于 dns 下。示例中的 URL 仅为演示,请替换为你可信、且在当前网络可达的端点;企业环境还需遵守内部网络与合规要求。
dns:
enable: true
ipv6: false
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query
fallback:
- https://dns.google/dns-query
- tls://1.1.1.1
nameserver-policy:
"geosite:cn":
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
"+.google.com":
- https://dns.google/dns-query
"+.cloudflare.com":
- https://1.1.1.1/dns-query
fallback-filter:
geoip: true
geoip-code: CN
键名支持多种形式:完整主机名、带 +. 前缀的后缀规则、以及 geosite:某分类(需你的运行环境已加载对应路由与数据集)。同一后缀 family 建议先汇总再精修:从少量条目验证路径正确,再逐步扩展,避免一次粘贴超大表后难以 diff。
3常见写法模式:境内外、流媒体、内网与「单站调试」
境内外分路最简单也最常用:把大陆域名字典映射到国内 DoH,把海外常用业务域指向你愿意信任的境外递归。其直觉目标是让解析轨迹尽量与路由意图同向,减少「规则走了代理但 IP 仍像在大陆」或相反的割裂感。注意 geosite:cn 覆盖面大,若与你的自定义直连表存在冲突,应以更具体的后缀策略微调优先。
流媒体与区域敏感业务常需要特定地区的应答;policy 适合把明确后缀绑到对这些业务更友好的上游。务必同时检查代理节点的地理位置与账号区域,否则「解析对了、出口仍不对」依旧会失败。若你通过 Clash Meta 的 GEOIP 与 GEOSITE 分流 把某族流量固定到指定策略组,DNS 上也建议用同样的域名集合做 policy,形成端到端一致的预期。
企业内网后缀(例如 +.corp.example)应指向可达的内网转发器或 Split DNS,而不是公网 DoH;这类名字往往还要出现在 fake-ip-filter 与局域网直连域名 一节中提到的 fake-ip-filter,否则 FakeIP 可能先制造「假地址」,让 policy 根本来不及按你设想工作。内网与 FakeIP 的耦合排错顺序在同站 fake-ip 专文里写得更细,此处只强调两条配置要一起核对。
单站调试推荐新增一行极具体键(完整域名或单一后缀),观察日志里对应查询是否切换上游;通过后再合并进更大的 geosite 或规则集。遇到「看起来像 policy 没生效」,很多时候是合并配置被覆写或实际查询名与想象不同(CNAME 链、前缀差异、国际化域名等),需要用日志里的原始 QNAME 对照。
4FakeIP 场景下的协作顺序
在 enhanced-mode: fake-ip 下,未被 fake-ip-filter 放行的查询会进入 FakeIP 语义;被放行的查询则会去做真实递归,此时 nameserver-policy 才有机会按域名挑选 DoH。若你观察到「policy 写了但永远走默认池」,第一步要确认该名字是否误入了 FakeIP 快路径、或客户端根本没有把查询送进内核 DNS。
第二步行文检查 dns-hijack 与 TUN 打开顺序:Clash Verge Rev TUN 模式完整开启教程 可以帮助你确认系统查询确实指向本机 DNS 监听地址。若应用使用 DoH 旁路直出,你需要不同的收口策略——那不是 policy 能单独解决的,但症状常被误判成「policy 写错」。
5验证:别只相信一次性 dig
验证分三层:配置是否加载(合并后的 YAML 是否含目标 policy 段);查询是否命中(日志里能看到为某 QNAME 选择了期望上游);解析结果是否与路由一致(连接阶段是否仍因规则顺序提前匹配而走错组——可对照 Clash Meta 规则顺序与 MATCH)。
FakeIP 模式下,系统自带的 dig 有时只能看到 198.18 段的映射,这并不代表 policy 无效;要以内核日志、调试面板或 API中对「真实域名 → 选用上游 → 返回记录」的链路为准。若你在 IPv6 双栈环境,顺便阅读 IPv6 与 DNS 双栈排查,避免 AAAA 路径与 policy 叠加后更难观测。
常见问题(速览)
- policy 与 nameserver 谁优先?对被查询名命中策略键时,使用 policy 指定的上游集合;未命中才用默认
nameserver。 - 可以只写 DoH 吗?可以,但请保证
default-nameserver能解析你的 DoH 主机名,且网络允许 HTTPS/TLS 出网。 - geosite 键需要额外规则吗?policy 使用的是 DNS 侧的 geosite 分类数据,与
rules里的 GEOSITE 相关但服务点不同;两者建议用同一套维护源,减少「规则认、DNS 不认」的偏差。 - 写了 policy 仍异常?先缩减到单个域名验证,再查覆写层、mixin、远程订阅是否在后加载阶段改写了
dns段。
合规提示:在企事业网络或受管设备上调整 DNS 与劫持范围前,请遵循当地法规与组织策略。本文示例仅供技术学习,请替换为你有权使用且可达的上游。
下载与源码:日常客户端安装包请优先使用 本站下载页;GitHub 上的 Mihomo 发行说明便于核对字段语义,与「获取已签名安装包」分开即可。
小结
nameserver-policy 是 Clash Meta 用户在 DNS 层实现「按域名指定 DoH」的核心手段:先把 default-nameserver、nameserver、fallback 理顺,再用策略键把境内外、流媒体或内网后缀映射到合适的上游,并与 fake-ip-filter、TUN 劫持与应用真实查询路径交叉验证。
与只能在界面里二选一「系统 DNS / 加密 DNS」的轻量工具相比,支持 Meta 的客户端让你能在同一份 YAML 里维护可版本化的 DNS 策略,长期演进成本更低;出了问题也能从日志逐条回放「谁先匹配、谁该背锅」。
若你还没用过带规则编辑与连接日志的图形客户端,从零手搓多个 DNS 出口往往容易在合并层迷失;统一管理订阅、覆写与 DNS 段能显著降低这类心智负担。
如果你希望省去来回比对配置文件与查找文档的时间,可以免费下载 Clash,配合本文示例在本地用最小用例验证 policy,再渐进合并进自己的主力配置。