Skip to content

Clash DNS 配置原理与最佳实践

DNS(域名解析系统)是各客户端分流和防泄露的核心组件。错误的 DNS 配置可能导致国内网站访问缓慢、无法访问,甚至导致 DNS 污染或隐私泄露。本文将深入讲解 Clash 的 DNS 机制及配置策略。

为什么需要配置 DNS?

在科学上网环境中,我们面临着独特的网络环境(DNS 污染),因此不能简单地使用系统默认的 DNS。Clash 内置了一个 DNS Server,其主要目的有两点:

  1. 防止污染:对国外域名使用加密的 DoH/DoT 协议向可信 DNS 查询,获取真实 IP。
  2. 国内外分流:根据 DNS 解析结果的 IP 归属地(IP-CIDR 或 GeoIP),反过来辅助判断流量是否需要走代理(Redir-Host 模式下尤为重要)。
  3. 返回 Fake-IP:在 Fake-IP 模式下,立即返回一个虚拟 IP,欺骗应用程序建立连接,将域名解析工作推迟到远端代理服务器进行,极大提高响应速度。

基础设置详解

以下是 dns 字段的基础配置项:

yaml
dns:
  enable: true             # 启用内置 DNS
  ipv6: false              # 是否支持 IPv6 解析(除非你有原生 IPv6 环境,否则建议关闭)
  listen: 0.0.0.0:53       # DNS 监听端口
  
  # 运行模式: 'fake-ip' (推荐) 或 'redir-host'
  enhanced-mode: fake-ip   
  
  # Fake-IP 地址池(默认 198.18.0.1/16)
  fake-ip-range: 198.18.0.1/16 
  
  # 必须真实解析的域名(不返回 Fake-IP)
  # 常见于局域网设备发现、STUN 服务、NTP 服务等
  fake-ip-filter:
    - '*.lan'
    - '*.localhost'
    - 'time.*.com'

两种运行模式对比

模式机制优点缺点
Fake-IP立即返回一个内网虚拟 IP (198.18.x.x),将域名直接封装在请求中发送给代理核心 (Kernel)。🚀 响应极快(省去了一次本地 DNS 递归查询的时间);
🛡️ 彻底防止 DNS 污染(由远端代理服务器解析)。
部分不支持非标准 IP 的软件可能会异常(极少);
显示的连接 IP 是虚拟的。
Redir-Host真实向 nameserver 发起解析请求,拿到真实 IP 后返回给应用。兼容性最好;
能看到真实连接 IP。
🐢 响应较慢(必须等待本地解析完成);
容易受到 DNS 污染(如果未正确配置分流)。

💡 推荐

99% 的用户应使用 Fake-IP 模式,体验最流畅。

Nameserver 高级配置策略

Clash 的 DNS 解析逻辑为:并发查询 nameserver 中的服务器,取最快返回的结果。配合 fallback 机制来实现 "国内走国内 DNS,国外走国外 DNS"。

配置核心逻辑

yaml
dns:
  # 1. 默认 DNS (Bootstrap DNS)
  # 用于解析下面 nameserver 列表中配置的 DoH/DoT 域名的 IP 地址
  # 必须使用 IP 格式,建议使用腾讯 dnspod 或阿里为
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29

  # 2. 主 DNS 服务器 (Nameserver) 
  # 包含国内 DNS 和 国外 DNS
  nameserver:
    - https://doh.pub/dns-query         # 腾讯 DoH (国内)
    - https://dns.alidns.com/dns-query  # 阿里 DoH (国内)
    # - 8.8.8.8                         # 也可以填国外普通 DNS,但不推荐(易被污染)

  # 3. 后备 DNS 服务器 (Fallback)
  # 仅当 nameserver 解析结果为非 CN IP 时,才会启用 fallback 的结果
  fallback:
    - https://1.1.1.1/dns-query         # Cloudflare DoH
    - https://dns.google/dns-query      # Google DoH
    - 8.8.8.8                           # 备用
    
  # 4. Fallback 过滤器
  # 满足以下条件的解析结果,会被视为"国外 IP",从而强制等待 fallback 的结果
  fallback-filter:
    geoip: true             # 只要 GeoIP 不是中国,就回退
    ipcidr:                 # 强制视为污染 IP 的地址段
      - 240.0.0.0/4

解析流程

  1. Clash 同时向 nameserverfallback 中的所有服务器发起请求。
  2. 如果 nameserver 返回的 IP 是国内 IP (GeoIP=CN),Clash 立即采用 该结果(速度快)。
  3. 如果 nameserver 返回的结果不是国内 IP(或者匹配了 fallback-filter),Clash 会丢弃该结果,转而等待 fallback 列表中的服务器返回结果(通过加密隧道查询的结果,准确无污染)。

推荐配置模板

以下是一份经过优化的 DNS 配置,复制即可使用:

yaml
dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "localhost.ptlogin2.qq.com"
    - "+.stun.*.*"
    - "+.stun.*.*.*"
    - "+.stun.*.*.*.*"

  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  
  nameserver:
    # 国内 DNS (DoH/DoT 推荐)
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
    
  fallback:
    # 国外 DNS (必须是加密 DNS)
    - https://1.1.1.1/dns-query
    - https://dns.google/dns-query
    - https://doh.opendns.com/dns-query
    
  fallback-filter:
    geoip: true
    ipcidr:
      - 240.0.0.0/4

常见问题

只使用 nameserver 不使用 fallback 可以吗?

可以,但如果你的 nameserver 列表中混用了国内 DNS 和国外 DNS,可能会导致:

  • DNS 污染:国内 DNS 抢答了被墙域名的错误 IP。
  • 解析慢:国外 DNS 解析国内域名时,链路长,且可能返回国外的 CDN 节点 IP,导致访问优酷、B 站等变慢。

最佳实践是配合 nameserver-policy(Clash Meta 专属)或标准的 fallback 机制来实现分流。

什么是 nameserver-policy (Clash Meta)?

Clash Meta 内核支持更精细的 nameserver-policy,可以指定"特定域名走特定 DNS",例如:

yaml
dns:
  nameserver-policy:
    "geosite:cn,private": # 国内域名和私有域名
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query
    "geosite:google,youtube": # 谷歌系域名
      - 8.8.8.8

这种方式比 fallback 更直观、更高效,推荐高级用户使用。