Clash DNS 配置详解:nameserver、fallback 与 DNS 劫持怎么填

Clash 配置文件里的 dns 段决定域名解析走哪条路。本文逐项拆解 nameserver 与 fallback 的分工、fake-ip 与 redir-host 两种模式的差异、DNS 劫持判断的适用场景,并附可直接套用的配置示例。

DOC-01

DNS 段在 Clash 里的位置与作用

Clash 的配置文件里,dns 段是一个独立于 proxies 与 rules 的模块。它不管流量走哪个代理节点,只管一件事:域名怎么解析成 IP 地址。这一步发生在规则匹配之前——Clash 拿到域名后先要知道它对应的 IP,才能根据 GEOIP、IP-CIDR 一类规则判断走向。如果 dns 段配置不当,规则分流的准确性会直接受影响,典型症状是明明写了直连规则,却仍然走了代理,或者反过来。

dns 段的核心字段包括 enable(是否启用 Clash 自身的 DNS 处理)、listen(监听地址,通常配合 TUN 模式使用)、enhanced-mode(fake-ip 或 redir-host)、nameserver(主用解析服务器列表)、fallback(备用解析服务器列表)、fallback-filter(判断何时启用 fallback 的规则)。这几项互相配合,构成完整的解析链路。

注记

不启用 dns 段(enable: false)时,Clash 会把 DNS 解析交给操作系统处理,自身只做流量转发。多数场景建议启用,以获得更精确的分流控制。

DOC-02

nameserver 与 fallback 的分工

nameserver 是主用解析服务器列表,Clash 优先用这些服务器解析域名。fallback 是备用解析服务器列表,只在特定条件触发时才会被采用,并不是简单的"nameserver 失败就切换 fallback"。

nameserver 的常见填法

建议填入运营商解析速度快、地理位置就近的服务器,常见组合是国内公共 DNS 与本地运营商 DNS 混用:

nameserver:
  - 223.5.5.5
  - 119.29.29.29
  - 114.114.114.114

fallback 的触发条件

fallback 通常填入境外或跨网络的解析服务器,例如 1.1.1.1、8.8.8.8。它不是无条件的备用,而是配合 fallback-filter 使用——只有当 nameserver 解析出的结果被判定为"不可信"(例如落入 geoip 之外的地址段,或匹配特定规则)时,Clash 才会改用 fallback 重新解析。这个机制的意义在于:国内域名走国内 DNS 能获得就近的 CDN 节点,减少访问延迟;而被污染或需要代理访问的域名,则改用干净的境外 DNS,避免拿到错误的解析结果。

fallback:
  - tls://1.1.1.1:853
  - tls://8.8.8.8:853

fallback-filter:
  geoip: true
  geoip-code: CN
  ipcidr:
    - 240.0.0.0/4
  domain:
    - +.google.com
    - +.facebook.com

上面这段配置的含义是:如果用 nameserver 解析出来的 IP 不属于中国大陆(geoip-code: CN 之外),或者命中 domain 列表里的域名,就认为这次解析结果不可信,转而用 fallback 里的服务器重新查询。这样一来,访问被污染域名时能拿到正确的境外解析结果,而访问国内站点时依然走最快的本地 DNS。

DOC-03

fake-ip 与 redir-host:两种增强模式的差异

enhanced-mode 字段决定 Clash 用哪种方式处理 DNS 解析结果,可选值是 fake-ip 和 redir-host。这两种模式的设计目标不同,适用场景也不一样。

fake-ip 模式

fake-ip 模式下,Clash 拦截 DNS 查询请求,不返回域名真实对应的 IP,而是返回一个预留地址段(默认 198.18.0.0/16)里的虚拟 IP。应用程序拿到这个虚拟 IP 后发起连接,Clash 在流量经过时再把虚拟 IP 还原成真实域名,交给规则引擎判断走向,最后再解析出真实 IP 进行转发。

这种模式的优点是解析速度快(不需要每次都等真实 DNS 查询返回),规则匹配可以直接用域名而不依赖 IP,准确性更高。配合 TUN 模式使用时,fake-ip 几乎是标配选择。缺点是部分对 IP 地址有强依赖的软件(例如某些游戏联机、局域网发现协议)可能因为拿到虚拟 IP 而工作异常,需要在 fake-ip-filter 里为这些域名单独排除。

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.0/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
    - "time.*.com"

redir-host 模式

redir-host 模式下,Clash 直接向 nameserver/fallback 查询真实 IP 并返回给应用程序,不做虚拟地址替换。规则匹配阶段依赖的是这个真实 IP,或是在查询阶段记录下的域名对应关系。这种模式兼容性更好,几乎不会出现应用程序因为拿到"假"地址而工作异常的情况,但解析开销更大,规则匹配在某些复杂场景下不如 fake-ip 精确。

提醒

没有特殊兼容性问题的前提下,建议优先使用 fake-ip。只有在遇到局域网设备发现失败、特定客户端连接异常等问题,且确认与 DNS 模式相关时,才考虑切换到 redir-host 或者针对性地在 fake-ip-filter 里加排除项。

DOC-04

DNS 劫持的判断与应对场景

DNS 劫持指的是解析请求在传输过程中被中间节点篡改,返回错误的 IP 地址,导致访问被重定向到广告页面、错误页面,或者干脆无法连通。判断是否发生了 DNS 劫持,常见方法是用不同的 DNS 服务器分别解析同一个域名,对比返回结果是否一致——如果本地运营商 DNS 返回的 IP 与已知的公共 DNS 返回结果差异明显,且访问异常,基本可以确认存在劫持或污染。

在 Clash 的场景里,fallback-filter 机制本身就是应对 DNS 劫持的手段之一:通过 geoip 与域名列表判断解析结果是否可信,不可信就换用另一组服务器重新查询。除此之外,还可以考虑以下几点:

dns:
  enable: true
  use-hosts: true
  nameserver:
    - https://223.5.5.5/dns-query
    - https://120.53.53.53/dns-query
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN

hosts:
  example.local.test: 127.0.0.1

需要注意的是,DNS 劫持与代理规则分流是两个不同层面的问题。如果代理节点本身可用,但访问某个网站始终异常,先排查是不是 DNS 解析环节出的问题,而不要一开始就怀疑节点或规则写错了。反过来,如果换了几个 DNS 服务器解析结果都一致且正确,但访问依然失败,问题更可能出在代理节点或规则匹配上。

DOC-05

防泄漏要点与完整示例

DNS 泄漏指的是本该经过代理处理的域名解析请求,实际绕过了 Clash 直接发到了系统默认的 DNS 服务器,暴露了真实访问意图。避免泄漏,需要注意以下几个环节:

  1. 确认系统层面的代理设置或 TUN 模式已正确接管流量,不要只开启部分应用的代理而遗漏了系统级 DNS 查询通道。
  2. dns 段的 enable 字段必须为 true,否则 Clash 不会介入解析过程,所有查询都走系统默认路径。
  3. listen 字段建议显式指定,例如 0.0.0.0:1053,并确认操作系统或路由层面的 DNS 请求被正确转发到这个监听端口,而不是绕道系统自带的 DNS 客户端。
  4. 开启 TUN 模式时,建议同步确认 dns 的 fake-ip 或 redir-host 模式与 TUN 的 stack 配置一致,避免两套解析逻辑互相冲突导致部分请求逃逸。
  5. 使用支持 DoH/DoT 的 nameserver,减少运营商在传输层观察和篡改查询内容的机会。

下面给出一份整合了本文各要点的完整 dns 段示例,可以直接套用到配置文件中,再按实际节点情况调整 nameserver 与 fallback 的具体地址:

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  use-hosts: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.0/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://223.5.5.5/dns-query
    - https://120.53.53.53/dns-query
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
    domain:
      - +.google.com
      - +.github.io

其中 default-nameserver 字段值得单独说明:它专门用来解析 nameserver 与 fallback 里那些以域名形式写出的 DoH 服务器地址(例如上例中的 223.5.5.5/dns-query 本身是 IP,但如果换成域名形式的 DoH 地址,就需要 default-nameserver 先解析出这个 DoH 服务器本身的 IP,再用它去查询实际的用户域名)。这是一个容易被忽略但影响解析链路能否跑通的细节。

要点

配置修改完成后,建议重启客户端或重新加载配置,再用不同域名分别测试国内站点与境外站点的访问速度与连通性,确认 fallback-filter 的判断逻辑符合预期,再投入日常使用。

获取 Clash 客户端

配置好 DNS 段之后,还需要匹配的客户端与订阅规则才能生效。前往下载页获取对应平台的安装包,或查看教程了解完整配置流程。

下载Clash