规则要按域名匹配,前提是客户端能拿到"这条连接对应的域名是什么"。在没有开启特殊处理的情况下,系统可能只把解析后的 IP 交给 Clash,域名信息已经丢失,规则自然无法按域名匹配——这就是为什么 DNS 配置对规则的准确度至关重要。

enhanced-mode:两种模式的本质区别

模式原理取舍
fake-ip 先返回一个虚拟 IP 给应用,连接建立时再从虚拟 IP 反查出真实域名用于规则匹配 速度快、能更早拿到域名信息;少数依赖真实 IP 返回值的场景可能需要例外处理
redir-host 直接返回真实解析结果,靠流量层面的域名嗅探或重定向拿到域名 兼容性更好;但依赖真实 DNS 查询,速度与隐私性都不如 fake-ip

目前主流推荐是 fake-ip。它的兼容性问题主要出现在少数依赖"DNS 查询结果必须是真实 IP"的局域网协议上(比如某些设备发现、投屏协议),遇到这类问题时,把对应域名加入 fake-ip-filter 例外即可,不需要为了个别场景放弃 fake-ip 整体的优势。

一份可直接使用的 DNS 配置

dns.yaml
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'        # 局域网设备域名走真实解析,避免发现协议异常
    - '*.local'
  default-nameserver: [223.5.5.5, 119.29.29.29]   # 解析 DoH/DoT 域名本身用的基础 DNS
  nameserver: ['https://doh.pub/dns-query', 'tls://dot.pub:853']
  fallback: ['https://1.1.1.1/dns-query', 'https://dns.google/dns-query']
  fallback-filter:
    geoip: true
    geoip-code: CN   # 结果非中国大陆 IP 时才采用 fallback 的解析结果

DoH / DoT 解决的是什么问题

传统 DNS 查询是明文的 UDP 报文,运营商或中间网络设备能看到你在查询什么域名,也有条件对查询结果做篡改(也就是常说的"DNS 污染")。DoH(DNS over HTTPS)和 DoT(DNS over TLS)把查询过程加密,防止被中间网络设备窥探或篡改。

fallback-filter:精准防污染

fallback-filter 的逻辑是:先用 nameserver 里的服务器解析,如果解析结果的 IP 被判定为不在指定地区(比如开启 geoip-code: CN 后判定不是中国大陆 IP),则改用 fallback 里配置的服务器重新解析,取 fallback 的结果。

这个机制主要用于避免"污染的 DNS 服务器返回了错误的国内 IP,而真实网站其实在境外"的情况。开启这项配置后,即使主 DNS 被污染返回了错误结果,也能自动纠正为境外 DNS 解析的正确结果。

常见排查思路

  1. 某个网站规则明明写对了但没生效?先检查是不是 enhanced-mode 没开,或者 DNS 配置整体没生效(比如系统 DNS 缓存没清)。
  2. 访问某网站间歇性失败,像是被劫持?大概率是 DNS 污染,尝试单独测试 nameserverfallback 两组服务器的解析结果是否一致。
  3. 局域网设备(NAS、智能音箱)发现异常?优先检查 fake-ip-filter 是否已经把对应域名加入例外。
DNS 配置很少需要频繁改动——一旦按照这套逻辑配好,大多数"访问异常"问题在源头就已经被规避掉了。