Clash DNS 怎么配置?fake-ip 与 redir-host、nameserver-policy 和 fallback 详解
本文目录
Clash 的分流规则大多按域名写,但程序真正连接的是 IP,所以内核需要自己的 DNS 模块来解析域名、把 IP 对应回域名。本文按 mihomo 内核(原 Clash.Meta)的官方文档讲配置文件里的 dns 部分。规则本身怎么写,见本站的 Clash 规则怎么写。
先看开关:enable#
dns:
enable: true
官方文档:enable 为 false 时使用系统 DNS 解析。mihomo 源码里的默认值是 false,所以配置里不写 dns 段时,内核用的是系统 DNS。用 TUN 模式 时,DNS 请求会被劫持进这个模块,这时 dns 段才真正起作用。
enhanced-mode:fake-ip 和 redir-host#
enhanced-mode 可选 fake-ip 或 redir-host,官方文档和源码里的默认值都是 redir-host。
- redir-host:DNS 模块返回真实解析结果。
- fake-ip:DNS 模块从
fake-ip-range网段(默认198.18.0.1/16)里分一个地址返回给程序,程序连这个地址时,内核再把它对应回原来的域名去匹配规则。官方文档的说法是,DNS 劫持“使得来自 TUN、Redirect 或 TProxy 入站的流量可以将 IP 映射至对应的域名”。
fake-ip 下有些域名不能拿到假地址(比如局域网设备、系统联网检测),这时用 fake-ip-filter 排除:
dns:
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter-mode: blacklist
fake-ip-filter:
- '*.lan'
- '+.local'
fake-ip-filter-mode默认blacklist,即列表里的域名不返回 fake-ip;改成whitelist则只有列表里的域名才返回 fake-ip。- 还可以设成
rule,按规则的写法逐条匹配,例如DOMAIN-SUFFIX,qq.com,real-ip、GEOSITE,gfw,fake-ip,最后用MATCH,fake-ip或MATCH,real-ip兜底。 - 列表里可以用
geosite:xxx或rule-set:xxx引入一整组域名。
通配符的意思:*.lan 只匹配一级(a.lan),+.local 匹配 local 本身和它下面任意层级的子域名。这是 mihomo 文档“域名通配符”一节的定义,和规则里的 DOMAIN-WILDCARD 不同。
几组 DNS 服务器各管什么#
| 配置项 | 作用(据官方文档) |
|---|---|
default-nameserver |
只用来解析“DNS 服务器本身的域名”,比如 doh.pub。必须写 IP |
nameserver |
默认的解析服务器 |
fallback |
后备服务器,一般用境外 DNS。配置了它就默认启用 fallback-filter,geoip-code 为 CN |
nameserver-policy |
给指定域名指定解析服务器,优先于 nameserver 和 fallback |
proxy-server-nameserver |
只用来解析代理节点的域名 |
direct-nameserver |
用于直连出口的域名解析 |
支持的写法有 223.5.5.5(UDP)、tcp://、tls://(DoT)、https://.../dns-query(DoH)、quic://(DoQ)、system(系统 DNS)等。
fallback-filter:什么时候用 fallback 的结果#
配置了 fallback 后,内核会同时向 nameserver 和 fallback 查询,再用 fallback-filter 判断用哪一个结果:
geoip: true+geoip-code: CN:nameserver 返回的是 CN 的 IP 就直接用,否则用 fallback 的结果。ipcidr:nameserver 返回这些网段的 IP 时,视为被污染,改用 fallback 的结果。domain:这些域名直接只用 fallback 解析。geosite:官方文档已标为废弃,建议改用nameserver-policy。
nameserver-policy:按域名分配 DNS#
这是现在推荐的写法:国内域名交给国内 DNS,其余走默认。键支持域名通配和 geosite:,值可以是一个或多个服务器:
dns:
nameserver-policy:
'geosite:cn,private':
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
'+.arpa': '10.0.0.1'
geosite:cn 是什么、数据从哪来,见本站的 GEOSITE 和 GEOIP 是什么。
一份参考配置#
下面只用了官方文档示例里出现过的服务器地址,按需替换:
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
default-nameserver:
- 223.5.5.5
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
nameserver-policy:
'geosite:cn,private':
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
proxy-server-nameserver:
- https://doh.pub/dns-query
ipv6: false 时,内核对 AAAA 查询返回空结果(官方文档原话:“回应 AAAA 的空解析”)。
常见疑问#
respect-rules 是什么? 让 DNS 查询本身也按路由规则走(比如经代理查询)。官方文档要求同时配置 proxy-server-nameserver,否则解析节点域名时会出现“先有鸡还是先有蛋”的问题;也强烈不建议和 prefer-h3 一起用。
客户端里还有“DNS 覆写”开关? 一些客户端(如 Clash Verge Rev)会用自己的设置覆盖配置文件里的 dns 段,具体以客户端为准。
常见问题
- Clash 的 fake-ip 和 redir-host 有什么区别?
- redir-host 返回真实解析结果;fake-ip 从 fake-ip-range(默认 198.18.0.1/16)里分一个地址给程序,连接时内核再把它对应回域名。mihomo 的默认值是 redir-host。
- nameserver 和 fallback 分别做什么?
- nameserver 是默认的解析服务器;fallback 是后备服务器,一般用境外 DNS。配置了 fallback 后会按 fallback-filter 判断用哪一个的结果。
- 怎么让国内域名用国内 DNS 解析?
- 用 nameserver-policy,例如把 geosite:cn,private 指向 https://doh.pub/dns-query 等国内 DoH。官方文档已把 fallback-filter 里的 geosite 标为废弃,推荐改用 nameserver-policy。