ACL4SSR 教程

Clash DNS 怎么配置?fake-ip 与 redir-host、nameserver-policy 和 fallback 详解

分类:Clash 配置更新于 约 6 分钟读完5 份官方资料
本文目录
  1. 先看开关:enable
  2. enhanced-mode:fake-ip 和 redir-host
  3. 几组 DNS 服务器各管什么
  4. fallback-filter:什么时候用 fallback 的结果
  5. nameserver-policy:按域名分配 DNS
  6. 一份参考配置
  7. 常见疑问
  8. 常见问题

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。

本站是非官方的学习笔记站,与 ACL4SSR 原项目维护者无隶属关系。文中引用的规则与文档版权归原作者所有。