Clash DNS 配置逐项拆解:nameserver、fallback 与 DNS 劫持参数怎么写
DNS 段是 Clash/Clash Meta 配置文件里最容易被复制粘贴、却很少被真正理解的部分。本文从 enhanced-mode 的两种工作方式讲起,拆解 nameserver 与 fallback 各自负责什么、fallback-filter 如何判定域名是否被污染,最后给出一份带逐行注释的可直接套用模板。
DNS 段解决的是什么问题
代理软件本身不解析域名——它转发的是流量,但流量在进入代理之前,系统或应用先要把域名解析成 IP。如果这一步用的是本地运营商 DNS,会出现两个典型问题:一是解析结果被污染或劫持,返回错误 IP;二是解析动作本身暴露了访问意图,即便流量后续走了代理,DNS 请求也可能走的是明文 UDP 53 端口,被中间设备记录甚至拦截。Clash 的 dns 配置段就是用来接管这一步解析过程的,让域名解析和流量转发都在同一套规则体系下完成。
这个模块由两部分构成:enhanced-mode 决定域名到 IP 的转换方式,nameserver/fallback 一组参数决定实际发起解析请求时用哪些上游服务器、按什么顺序尝试。二者配合,才能既保证规则分流准确命中,又避免解析结果被污染。
enhanced-mode:fake-ip 与 redir-host 怎么选
enhanced-mode 只有两个取值,行为差异很大:
- fake-ip:Clash 拦截 DNS 查询后,不立即请求真实 IP,而是从一个专用地址段(默认
198.18.0.0/16)里分配一个假 IP 返回给应用。应用拿着假 IP 发起连接时,再由 Clash 在建立连接的瞬间反查真实域名,依据规则决定走哪个代理组。这种方式规则匹配最准确,因为分流依据始终是域名而不是可能变化的 IP,是目前主流客户端(mihomo 内核系列)的默认值,也是官方推荐配置。 - redir-host:直接向上游服务器请求真实 IP 并原样返回。兼容性更好,尤其是部分依赖真实 IP 做地理位置判断的应用(某些视频、地图类 App)会因为拿到假 IP 段而工作异常,这时才需要切到 redir-host。代价是规则匹配退化为按 IP 段匹配,对基于域名的精细分流会打折扣。
没有特殊兼容性问题时,统一使用 fake-ip,并通过 fake-ip-filter 把局域网地址、内网服务、活跃使用真实 IP 的域名(如部分银行、局域网设备发现协议)排除在假 IP 分配之外,让这些域名继续走真实解析。
nameserver 与 fallback 的分工
很多人把 nameserver 和 fallback 都填成一堆 DNS 服务器地址,却不清楚 Clash 具体怎么用它们。实际逻辑是:
nameserver 先查
所有域名默认先用
nameserver里的服务器解析,这里通常填国内可信的公共 DNS(推荐使用 DoH/DoT 而非明文 UDP,避免运营商在传输层就看到查询内容并顺手劫持)。fallback-filter 判定是否需要复查
拿到
nameserver返回的结果后,如果开启了fallback-filter的geoip检测,Clash 会判断这个 IP 是否属于geoip-code指定的国家/地区(通常填 CN)。属于则采信结果;不属于,说明这个域名很可能是境外资源却被解析到了错误或异常的 IP,触发下一步。fallback 复查确认
一旦判定需要复查,Clash 改用
fallback列表里的服务器重新解析,这里通常填境外或抗污染能力更强的 DoH/DoT 服务器,拿到的结果直接作为最终解析结果使用。
换句话说,nameserver 是默认通道、负责效率,fallback 是校验通道、负责纠错,fallback-filter 是二者之间的裁判。三者缺一,DNS 段的抗污染能力都会打折扣:只有 nameserver 没有 fallback,遇到污染无法纠正;只有 fallback 没有 nameserver,所有请求都走境外服务器,国内站点解析延迟明显增加。
fallback-filter 的 geoip 判断依赖内置或下载的 GeoIP 数据库,首次启动或数据库过期时该功能可能短暂失效,表现为部分境外域名解析结果异常。确认客户端的 GeoIP 数据库处于可用状态,是排查 DNS 相关问题的第一步。
DNS 劫持的表现与 fallback-filter 之外的应对手段
国内部分网络环境会对经过运营商设备的明文 DNS 查询(UDP 53 端口)做劫持或投毒,常见表现是访问境外站点时被解析到国内某个不相关的 IP,或者直接返回一个不存在的地址导致连接超时。这类劫持发生在传输层,与 Clash 的规则配置无关,唯一有效的应对方式是让 DNS 查询本身走加密通道:
- 使用
https://前缀的 DoH(DNS over HTTPS)地址,查询走 443 端口,与普通 HTTPS 流量混在一起,难以被单独识别拦截。 - 使用
tls://前缀的 DoT(DNS over TLS)地址,查询走 853 端口并加密,同样规避明文劫持,但 853 端口本身有时会被单独限速或拦截,兼容性略逊于 DoH。 - 避免在
nameserver/fallback里混用明文 UDP 地址(形如8.8.8.8不带协议前缀),明文地址在部分网络下等于没有防护。
另外要注意 default-nameserver 字段:它专门用来解析 nameserver/fallback 里那些 DoH/DoT 服务器本身的域名(比如解析 doh.pub 这个域名指向哪个 IP),必须填纯 IP 地址而不能再填域名形式的 DoH 地址,否则会出现循环解析导致 DNS 模块无法启动。
可直接套用的 dns 配置模板
以下模板适用于 mihomo 内核(Clash Meta 系列客户端均基于此内核),按行注释了每个字段的作用,可以直接整段替换进配置文件的 dns 段:
dns:
enable: true # 开启 DNS 接管,不开则退回系统默认解析
ipv6: false # 未启用 IPv6 网络时建议关闭,减少无效查询
enhanced-mode: fake-ip # 规则匹配最准确的模式,兼容性问题时改 redir-host
fake-ip-range: 198.18.0.1/16 # 假 IP 分配段,与本地真实网段不冲突即可
fake-ip-filter: # 以下域名走真实解析,不分配假 IP
- "*.lan"
- "+.local"
- "time.*.com"
- "*.market.xiaomi.com"
default-nameserver: # 仅用于解析下方 DoH/DoT 服务器自身域名,必须是纯 IP
- 223.5.5.5
- 119.29.29.29
nameserver: # 默认解析通道,国内 DoH 优先
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback: # 校验/纠错通道,境外域名解析异常时启用
- https://1.1.1.1/dns-query
- tls://8.8.8.8:853
fallback-filter:
geoip: true # 开启地理位置校验
geoip-code: CN # 解析结果不属于该地区则触发 fallback 复查
ipcidr: # 命中以下网段的结果视为异常,直接触发 fallback
- 240.0.0.0/4
domain: # 以下域名固定走 fallback,不经过 nameserver 判断
- "+.google.com"
- "+.youtube.com"
使用时把 fake-ip-filter 和 fallback-filter.domain 里的示例条目替换成实际需要特殊处理的域名即可,其余字段大多数场景无需改动。
常见排查思路
改了 dns 配置后完全无法上网怎么办?
先确认 default-nameserver 填的是纯 IP 而非域名形式的 DoH 地址,这是最常见的循环解析问题。其次检查 YAML 缩进是否正确,dns 段对层级要求严格,一个空格错位就会导致整段配置被忽略。
fake-ip 模式下某个 App 一直连接失败,是 DNS 的问题吗?
大概率是该 App 内置了服务器地址校验或对 IP 段做了白名单判断,把它的域名加入 fake-ip-filter 让其走真实解析通常能解决;如果同类问题反复出现,可以整体考虑改用 redir-host。
境外站点访问依旧很慢,是不是 fallback 没生效?
可以先确认代理规则本身是否命中了正确的代理组,DNS 解析正确但走了错误的策略组同样表现为慢。若排除规则问题,再检查 fallback 服务器的连通性,必要时更换其他可用的 DoH/DoT 地址。