进阶配置 预计阅读 12 分钟

Clash DNS 配置详解:nameserver、fallback 与 fake-ip 劫持逐项说明

逐字段拆解 dns 段:enhanced-mode 选择、nameserver 与 fallback 分工、fallback-filter 条件、dns-hijack 劫持与常见组合示例。

DNS 配置的四个环节

排查 Clash DNS,先把查询接入、解析模式、上游选择和连接分流分开。应用把域名交给哪个 DNS 服务,由系统、浏览器和接管方式决定;Clash 收到查询后,才会按 dns 配置处理。最后的连接出口由代理模式与 rules 决定,并不是填了某个 DNS 地址就一定走某个节点。

环节关键字段检查目标
查询接入listen、tun.dns-hijack应用查询是否进入内核
解析模式enhanced-mode返回真实地址还是映射地址
上游选择nameserver、fallback-filter接受哪一组解析结果
连接分流rules、proxy-groups实际连接使用哪个出口

订阅原文、客户端编辑器与最终运行配置可能是三个不同文件。订阅更新会覆盖原文时,应通过客户端提供的覆写或合并配置保留修改。合并后检查最终结果:同一个 YAML 映射中不要重复写两个 dns: 或两个 tun:。

nameserver、fallback 与引导解析

nameserver:常规上游,不是代理节点

nameserver 是 DNS 解析上游列表,可以填写普通 DNS 地址,也可以使用内核支持的 DoH、DoT 地址。普通地址 223.5.5.5 通常表示使用 UDP 53;https://1.1.1.1/dns-query 表示 DoH,通常通过 HTTPS 443 连接。上游必须在当前网络中可达,协议名称本身不保证请求成功。

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  enhanced-mode: redir-host
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

这是用于解释字段关系的片段,不是完整的节点配置。127.0.0.1:1053 只在本机监听,便于显式查询测试;操作系统不会因为这个监听端口存在就自动把所有 DNS 请求交给它。ipv6: false 控制此 DNS 模块的 AAAA 应答行为,不等于关闭操作系统 IPv6,也不等于阻止所有 IPv6 连接。

default-nameserver:解析 DNS 上游的域名

如果上游写成 https://dns.example.com/dns-query 这样的域名形式,建立连接前需要先取得它的 IP。default-nameserver 负责这类引导解析。为避免引导环路,示例使用字面 IP 地址。它不是“所有业务域名都先查询一次”的默认服务器,也不是代理节点专用解析器。

mihomo 还提供 proxy-server-nameserver,用于代理节点域名解析。节点地址本身是域名、且解析路由产生循环依赖时,需要单独检查这一层。不要把“网站域名解析失败”和“节点域名无法解析”归为同一个问题。

fallback:备用结果,不是串行等待链

配置 fallback 后,常见处理路径会并行发起主组与备用组查询,再依据过滤条件决定采用哪组结果。不要按“先等 nameserver 超时,再逐条尝试 fallback”理解。多个地址的应答竞争、缓存与失败处理受内核实现影响,列表顺序也不能直接当作严格的优先级。

DoH 只说明到解析服务这一段使用 HTTPS。它不会自动启用代理出口,也不能阻止浏览器使用自己的安全 DNS。DNS 请求是否遵循路由规则,需要结合内核字段、最终配置和日志确认。

fallback-filter:哪些结果需要切换

fallback-filter 不会修改 IP 所属地区,而是为选择备用结果提供条件。在上面的配置里,geoip: true 配合 geoip-code: CN,表示主组返回的地址若不符合指定地区条件,就倾向采用备用组结果。它依赖 GeoIP 数据;数据过期、CDN 调度变化或地址归属不准确,都可能改变选择结果。

  fallback-filter:
    geoip: false
    ipcidr:
      - 240.0.0.0/4
    domain:
      - '+.example.com'

此片段应放在现有 dns 下,用来替换前例的 fallback-filter。example.com 是保留的文档示例域名,不是推荐的实际业务名单。这里关闭地区判断,只保留地址段和域名条件,方便隔离问题。不要未经验证就过滤所有私有网段:企业内部域名、路由器管理页和家庭 NAS 可能本来就应该解析到私有地址。

另一个常见误区是把 fallback-filter.domain 当成代理规则。它只控制 DNS 结果来源,不会生成 DOMAIN-SUFFIX 规则。网站即便使用备用解析结果,连接仍可能被 DIRECT 规则接走。

fake-ip 与 redir-host 的区别

fake-ip:先建立域名映射

enhanced-mode: fake-ip 会为适用的查询返回映射地址。应用连接这个地址后,内核可以找回原始域名,再进行规则匹配与连接处理。因此,在命令行看到 198.18.x.x 不等于解析污染;它可能正是本机配置的映射结果。

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - '*.local'
  default-nameserver:
    - 223.5.5.5
  nameserver:
    - https://1.1.1.1/dns-query

198.18.0.1/16 位于基准测试专用地址空间。使用前仍要检查本地路由,避免与实验网络冲突。返回映射地址以后,相关连接必须能够再次进入内核;如果 DNS 走了 Clash,但数据连接绕过接管,应用就可能无法访问这些地址。

fake-ip-filter 用来让指定域名返回真实解析结果。上述示例使用通常的黑名单过滤语义,不同时配置其他过滤模式。内网服务可以按实际域名加入列表;但 .local 常由 mDNS 处理,把它加入过滤列表并不意味着 Clash 会代理所有组播发现请求。

redir-host:返回真实地址

redir-host 返回实际解析地址,并利用解析记录关联域名与连接。它适合需要真实 IP 的兼容性场景,但多个域名共享地址、应用自行解析或缓存过久时,域名关联未必完整。两种模式都不等同于嗅探:mihomo 的 sniffer 是从后续连接信息识别域名的另一套机制。

TUN dns-hijack:把查询接入内核

dns-hijack 属于 tun,不是 dns 的子字段。mihomo 中常见的写法如下;将它与上一节的 DNS 片段合并时,两个顶层字段应保持同级。

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

any:53 接管进入 TUN 的常规 UDP 53 查询,tcp://any:53 补充 TCP 53。接管后的查询由内核 DNS 模块处理,不要求系统把服务器显式写成 127.0.0.1:1053。但前提仍是数据包实际经过 TUN 路径,且当前平台支持相应的路由与接管功能。

不要为了接管方便直接把 dns.listen 改成 0.0.0.0:53。这会改变监听范围,还可能与系统解析服务发生端口冲突。只有确实需要为局域网设备提供 DNS 时,才应配置对外监听,并同时限制防火墙来源与可访问网络。

常见组合与配置选择

使用条件建议起点重点验证
先排查解析上游redir-host + 本机 1053 监听显式查询能否取得真实地址
需要按域名稳定分流fake-ip + TUN 接管映射地址对应的连接进入内核
企业内网或家庭服务较多按域名指定 DNS 与过滤例外内部域名没有发往公共解析器
需要比较两组解析结果nameserver + fallback + 明确过滤条件选用结果符合预设条件

mihomo 可通过 nameserver-policy 为特定域名指定上游。例如,公司 DNS 位于 192.168.50.1,且内部域名使用文档示例后缀 corp.example 时,可以在现有 dns 下加入:

  nameserver-policy:
    '+.corp.example':
      - 192.168.50.1

实际使用时必须换成真实的内部后缀与可达的 DNS 地址,并验证相关域名是否还需要加入 fake-ip-filter。域名策略、备用过滤与连接规则是不同层次的选择;排障时先去掉互相重叠的策略,确认基础解析,再逐项加回。

如果希望 DNS 连接遵循分流规则,mihomo 的 respect-rules 需要结合 proxy-server-nameserver 等设置规划,避免“解析节点需要先连接节点”的循环。基础配置尚未验证前,不建议把该开关与多个域名上游策略一次性加入。

验证顺序与故障定位

第一步:验证配置与监听

使用对应的 mihomo 可执行文件检查语法,再通过客户端重载。下面假定当前目录存在实际配置文件 config.yaml,并已安装 dig:

mihomo -t -f config.yaml
dig @127.0.0.1 -p 1053 example.com A
dig @127.0.0.1 -p 1053 example.com A +tcp

语法检查成功不代表所有上游均可达。UDP 查询成功、TCP 查询失败时,先确认监听与本机防火墙;两者均超时时,检查 dns.enable、端口占用和最终运行配置。fake-ip 模式返回映射地址只能证明本地映射路径工作,不能单凭这一项确认真实上游健康。

第二步:验证系统路径

显式指定 127.0.0.1 与端口,是在测试内核监听。接着执行 nslookup example.com,测试系统默认解析路径。两者结果不同不一定是故障,但如果预期所有查询都经由内核,就需要检查系统 DNS、TUN 路由和浏览器安全 DNS 设置。

第三步:验证连接与出口

  1. 清理缓存,关闭旧标签页或旧应用连接,再发起一次访问。
  2. 在客户端连接列表中检查目标域名、命中的规则和最终策略组。
  3. 若解析成功但连接超时,检查节点可达性、代理协议和目标端口,不要立即更换 DNS。
  4. 若只有内部服务失败,分别查询内部 DNS 与公共 DNS,确认是否缺少域名上游策略。
  5. 若怀疑 DNS 绕过,结合抓包查看离开物理网卡的 UDP/TCP 53、853 及已知 DoH 连接。公共测试页显示的解析器位置不能独立证明本机请求路径。

一次只调整一个环节:先让内核可以解析,再确认应用查询进入内核,最后观察连接规则。这样才能区分上游不可达、过滤条件错误、fake-ip 连接绕行和 TUN 未接管这四类问题。字段的完整上下文可继续查阅配置大全;首次安装与导入流程见使用教程。

下载Clash客户端与系统要求