DNS 模块在 Clash 里的位置
Clash 的分流规则分两类:按域名匹配(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD)与按 IP 匹配(IP-CIDR、GEOIP)。按 IP 的规则必须先拿到域名对应的地址才能判定走向,因此 Clash 内置了完整的 DNS 解析模块,而不是把解析交还给操作系统。域名规则在连接进入时即可匹配,IP 规则则依赖 DNS 模块给出的解析结果,两者共同决定一次连接进哪条策略组。
系统默认 DNS 通常是运营商下发的明文 UDP 53 服务,查询内容全程可见、可被中间设备改写。Clash 接管 DNS 之后,查询走哪条链路、用什么协议、采信哪份结果,全部可在配置里固定下来,这是 nameserver、fallback、enhanced-mode 这些字段存在的前提。
dns 段的总开关是 enable;listen 决定 Clash 在哪个地址与端口上应答查询,常见写法 0.0.0.0:53。桌面客户端开启系统代理或 TUN 模式时,一般会自动把系统 DNS 指向这个监听地址,局域网内其他设备也可以把 DNS 手动指过来,实现查询统一收口。
nameserver:主上游与取值写法
nameserver 是 Clash 的主解析链路,列表内每一项支持三种形态:
- 纯 IP,如
223.5.5.5,走传统明文 UDP 53,延迟最低; tls://1.1.1.1:853,DNS over TLS,查询走加密的 853 端口;https://doh.pub/dns-query,DNS over HTTPS,查询封装在 HTTPS 请求里。
列表的语义是并发竞速,而不是主备:Clash 会同时向列表内全部上游发起查询,采用最先返回的结果。因此 nameserver 里放 2~3 个低延迟上游即可,堆叠更多条目不会提升可靠性,只会放大出口流量。
与 nameserver 配套的是 default-nameserver,它是整条链路的引导解析器。DoH、DoT 上游本身以域名形式给出,解析“解析器自己的域名”时不能再依赖这些上游,否则形成循环依赖。default-nameserver 必须填可以直接 UDP 访问的纯 IP,例如 223.5.5.5、119.29.29.29,只在启动阶段使用,平日查询不经过它。
default-nameserver 只写纯 IP
不要把 https:// 或 tls:// 形式填进 default-nameserver。它是 DNS 链路的起点,职责是解析 DoH、DoT 服务器的域名,本身必须不依赖任何加密上游。
fallback 与 fallback-filter:备用结果的判定逻辑
对 fallback 最常见的误解是“主上游挂了才启用”。实际行为是:配置 fallback 后,Clash 对同一域名会同时查询 nameserver 与 fallback 两组上游,然后按 fallback-filter 的规则决定采信哪一份结果。fallback 是结果筛选机制,不是故障转移机制。
默认判定条件是 geoip: true 加 geoip-code: CN:若 nameserver 返回的 IP 归属中国大陆,采用 nameserver 的结果;否则改用 fallback 的结果。这条逻辑的意图很直接——境内域名信任境内低延迟上游,境外域名的解析结果只信任加密出境的上游。
fallback-filter 还有两个补充条件:ipcidr 列出不可信的网段,返回 IP 落入其中(例如保留段 240.0.0.0/4)即判定结果被污染,强制采用 fallback;domain 列出直接走 fallback 结果的域名,适合个别确认会被投毒的目标。
一个前提不能省:fallback 上游必须全部使用 DoH 或 DoT。如果 fallback 里填明文 UDP 地址,境外域名的查询仍以明文出网,劫持与投毒问题原样保留,fallback 机制形同虚设。
enhanced-mode:fake-ip 与 redir-host 的分歧
enhanced-mode 决定 Clash 如何回应应用发起的 DNS 请求,两个取值对应两条路线。
redir-host 是传统模式:Clash 收到域名连接后先做一次真实解析,拿到 IP 再按规则转发。行为直观、兼容性最好,代价是本地会产生真实的 DNS 查询,这些查询途经网络时存在被劫持、被记录的窗口。
fake-ip 是默认推荐:Clash 对需要解析的域名直接返回 fake-ip-range(默认 198.18.0.1/16)段内的一个假地址,应用连接这个假地址时,Clash 反查出原始域名并按域名规则分流,真正的解析推迟到代理出口一侧完成。本地几乎不再发起真实域名查询,劫持者拿不到可改写的明文请求,延迟也少一次往返。
fake-ip-filter 列出不应返回假地址的域名。局域网域名(*.lan、*.local)、NTP 校时、STUN 打洞类服务必须拿到真实 IP 才能工作,收到假地址会直接异常,这些条目要保留在过滤列表里。fake-ip 与局域网共享代理、部分 P2P 联机场景存在兼容问题,遇到异常时退回 redir-host 即可,两种模式可以随时切换对比。
dns 段字段速查
| 字段 | 作用 | 常见取值 |
|---|---|---|
enable | DNS 模块总开关 | true |
listen | 应答查询的监听地址端口 | 0.0.0.0:53 |
ipv6 | 是否返回 AAAA 记录 | false |
enhanced-mode | 应答模式 | fake-ip / redir-host |
fake-ip-range | 假地址分配段 | 198.18.0.1/16 |
fake-ip-filter | 不返回假地址的域名 | *.lan、*.local 等 |
default-nameserver | 引导解析器,解析上游域名 | 223.5.5.5 |
nameserver | 主上游,并发竞速 | DoH / DoT / 纯 IP |
fallback | 备用上游,按 filter 采信 | DoH / DoT |
fallback-filter | 结果采信判定条件 | geoip、ipcidr、domain |
DNS 劫持的机制与配置对策
DNS 劫持的典型机制:明文 UDP 53 查询途经运营商网关时,网关抢在真实上游之前返回伪造应答,把域名指向错误的 IP。外在表现是访问正常站点被带到无关页面、同一域名在不同网络下解析出差异巨大的结果。劫持针对的是“明文”与“53 端口”这两个特征,对策也围绕这两点展开。
下面四条同时成立,防劫持才算闭环:
- nameserver 与 fallback 全部使用 DoH、DoT,查询内容加密,中间设备读不到也改不了报文。
- enhanced-mode 使用 fake-ip,本地不再为走代理的域名发起真实解析,攻击面进一步收缩。
- 系统 DNS 指向 Clash 的 listen 地址,或开启 TUN 模式接管全部流量,所有查询收口进 Clash 内部。
- fallback-filter 保持 geoip 判定,境外域名的结果只来自加密上游,境内结果来自低延迟本地上游。
验证配置是否生效
把客户端日志级别调到 debug,观察 dns 相关输出;再用 dig @127.0.0.1 域名 分别测试境内与境外域名,对比返回的 IP 是否符合分流预期——境内域名应得到本地运营商附近的结果,走代理的域名在 fake-ip 模式下应返回 198.18 段地址。
可直接套用的完整示例
下面这段 dns 配置把上文字段串成一份可用样板,逐行对应前面的讲解,替换上游地址为自己的偏好即可:
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "*.local"
- "localhost.ptlogin2.qq.com"
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback:
- https://dns.google/dns-query
- tls://1.1.1.1:853
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
domain:
- "+.example.com"
要点回顾:default-nameserver 两个纯 IP 负责引导;nameserver 两个境内 DoH 并发竞速;fallback 两个加密境外上游;fallback-filter 用 geoip-code CN 做采信分界,ipcidr 挡掉保留段污染,domain 列表按需增删个别域名。fake-ip-filter 里的条目按实际局域网环境补充,出现某服务异常时优先怀疑它缺了过滤条目。
mihomo(Clash Meta)里的演进
mihomo 内核完整兼容上述字段,老的 dns 配置可以原样平移。在此之上,它新增了几个更细的字段,适合逐步迁移:
nameserver-policy:按域名后缀规则指定上游,比 fallback 的二元判定精细,可以把某一组域名固定交给指定 DoH,实现多条解析链路并存;proxy-server-nameserver:专门解析配置里节点服务器的域名,避免节点域名被污染导致整组代理不可用;direct-nameserver:为直连流量单独指定解析链路,与代理域名解耦;respect-rules:让 DNS 查询本身也按分流规则选择出口,境外上游的 DoH 请求经代理发出,进一步压低被干扰的概率。
迁移建议:新写的 mihomo 配置优先用 nameserver-policy 表达分流意图,把 fallback 留作兜底;老配置不必急于重写,先确认 fallback-filter 行为符合预期,再逐条迁移。
下载客户端,动手配置 DNS
dns 段写法在各家 Clash 客户端里通用。先到下载中心按平台装好客户端,再按本文调整 nameserver、fallback 与 enhanced-mode。