Clash DNS 配置详解:nameserver、fallback 与 DNS 劫持逐项拆解

逐项讲清 Clash DNS 段的 nameserver、fallback、fallback-filter 与 enhanced-mode 劫持参数,说明国内外解析分流的原理,并给出一份可直接套用的推荐配置。

为什么代理配好了,DNS 却还在拖后腿

很多人第一次接触 Clash 配置文件时,会把注意力全放在 proxiesrules 两段——毕竟节点和分流规则看起来才是"决定能不能用"的部分。但实际排障中,相当一部分"某个网站打不开""明明用了代理还是加载国内 CDN""切换节点后网页变慢"的问题,根源都在 dns 段没配对。

原因很简单:代理规则大多数情况下按域名匹配,但网络请求最终要落到 IP 地址上。如果域名解析这一步就被污染或者走错了路径,后面规则写得再精细也救不回来。DNS 配置的核心任务,就是保证"该走代理的域名解析出真实 IP,该走直连的域名解析出国内 CDN 就近的 IP",两条路互不干扰。

DNS 段的骨架:nameserver、fallback 分别管什么

Clash 和 Clash Meta(mihomo 内核)的 DNS 模块结构大同小异,常见字段可以分成三层来理解:

  • nameserver:默认使用的解析服务器列表,大多数域名走这里。
  • fallback:备用解析服务器列表,专门用来应对 nameserver 结果"看起来不对"的情况。
  • fallback-filter:判断"结果对不对"的规则,决定什么时候该用 fallback 的结果而不是 nameserver 的结果。

一个最基础的骨架大致如下:

dns:
  enable: true
  ipv6: false
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

default-nameserver 是一个容易被忽略的字段:它只用来解析 nameserverfallback 里那些写成域名形式(比如 DoH 地址)的服务器本身,必须填纯 IP,否则会出现"解析 DNS 服务器地址"这种循环依赖问题。

nameserver-policy:让不同域名走不同 DNS 的分流开关

只有一组 nameserver 时,所有域名都走同一批服务器解析,这在有明确分流需求的场景下并不够用。nameserver-policy 允许按域名规则指定专属解析服务器,写法类似规则匹配:

dns:
  nameserver-policy:
    "geosite:cn":
      - 223.5.5.5
      - 119.29.29.29
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

这段配置的意思是:命中 geosite:cn(国内域名合集)的请求,固定用国内 DNS 解析,拿到的自然是就近的 CDN 节点;命中海外域名合集的请求,固定用加密的境外 DNS 解析,避免国内运营商 DNS 在中间"顺手"返回一个错误结果。这样配置之后,国内网站不会因为走了境外解析而绕远路、变慢,海外网站也不会因为用了国内 DNS 而解析出无法访问的 IP。

需要注意,nameserver-policy 的匹配优先级高于普通的 nameserver,规则命中就直接生效,不会再走 fallback 判断逻辑——这是它和下面要讲的 fallback 机制最大的区别:一个是"预先分流",一个是"事后纠错"。

fallback-filter 到底在过滤什么,又是怎么触发的

fallback 机制的设计初衷,是应对"不知道该走国内 DNS 还是境外 DNS"的域名——尤其是没有覆盖在 nameserver-policy 分流规则里的域名。它的判断逻辑大致是这样运作的:

  1. 请求同时(或按顺序)发给 nameserverfallback 两组服务器;
  2. 拿到 nameserver 返回的 IP 后,对照 fallback-filter 里的条件做检查;
  3. 如果这个 IP 命中了 geoip-code: CN(即被判定为中国大陆 IP)或者命中了 ipcidr 列表里的地址段,就认为这个结果"可信",直接采用;
  4. 如果没命中——也就是本该是境外网站,结果 nameserver 却返回了一个国内 IP 甚至无效地址——就判定这是一次疑似污染,转而采用 fallback 服务器的解析结果。

ipcidr 里常见的 240.0.0.0/4 是一段保留地址,部分运营商在 DNS 污染时会返回落在这个区间的假地址,把它加入过滤列表可以让 Clash 提前识别出污染结果。fallback-filter 还支持 domain 字段,可以按域名白名单强制走 fallback,常用于个别经常被污染的站点。

enhanced-mode:fake-ip 与 redir-host,劫持机制的两种实现方式

enhanced-mode 决定了 Clash 用什么方式把域名请求"接管"过来再按规则分流,常见两个取值区别很大:

fake-ip 模式

Clash 会在本机接管 DNS 请求,给每个域名临时分配一个位于 fake-ip-range 区间内的虚假 IP 返回给应用程序。应用程序拿着这个假 IP 发起连接时,Clash 核心会在内部把假 IP 还原成原始域名,再按规则做真正的解析和转发。这种方式的优点是解析请求完全不出本机、不会被运营商截获,配合 TUN 模式使用时体验最完整;缺点是少数依赖真实 IP 做校验的场景(比如某些局域网设备发现、P2P 直连)可能出现异常,需要用 fake-ip-filter 把相关域名排除出去。

redir-host 模式

这种模式下 Clash 会先用配置好的 DNS 服务器把域名解析成真实 IP,再按 IP 或域名规则分流。它的兼容性更好,不容易出现"假 IP 导致程序识别异常"的问题,但解析过程本身会经过一次完整的 DNS 查询,速度略慢,且如果规则库里同时存在 IP 段规则,可能因为解析结果和实际路由地址不完全一致而出现误判。

没有特殊兼容性需求的话,启用 TUN 模式时优先选 fake-ip;如果发现某些内网工具、游戏或设备发现功能异常,再把对应域名加入 fake-ip-filter,而不是直接切回 redir-host 牺牲整体体验。

一份可以直接套用的推荐配置

综合以上几个字段,下面这份配置适合大多数"国内直连、境外代理"的常规使用场景,可以整段替换进配置文件的 dns 段:

dns:
  enable: true
  ipv6: false
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
    - "+.stun.*.*.*"
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
  nameserver-policy:
    "geosite:cn":
      - 223.5.5.5
      - 119.29.29.29
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

这份配置的分流逻辑是:先看 nameserver-policy 有没有命中,命中就直接按对应服务器解析;没命中的走 nameserver 默认解析,再由 fallback-filter 判断结果是否可信,不可信才切到 fallback;整个过程配合 fake-ip 在本机接管,查询请求不会被运营商 DNS 截获。如果订阅商提供了自带的 DNS 优化方案,可以先保留默认配置再逐项对照替换,不必整段覆盖。

常见现象排查

配好之后如果还是遇到问题,可以按下面几个方向定位:

  • 国内网站访问变慢:多半是 nameserver-policy 没有覆盖到相关域名,或者国内 DNS 列表里只写了一个服务器且响应慢,建议补两个不同运营商的公共 DNS。
  • 启用 fake-ip 后某个局域网工具不工作:把对应域名或 IP 段加入 fake-ip-filter,不需要整体换成 redir-host
  • 境外网站仍偶尔解析到无效地址:检查 fallback-filter 里的 ipcidr 是否包含了当地运营商常用的污染地址段,必要时把该域名加进 fallback-filter.domain 强制走 fallback。
  • 切换节点后网页图片、脚本加载不全:通常不是 DNS 问题,而是分流规则把主域名和静态资源域名分到了不同策略组,建议检查规则集是否覆盖了该网站的全部相关域名。
下载客户端 ->