Clash DNS 配置原理与最佳实践
DNS(域名解析系统)是各客户端分流和防泄露的核心组件。错误的 DNS 配置可能导致国内网站访问缓慢、无法访问,甚至导致 DNS 污染或隐私泄露。本文将深入讲解 Clash 的 DNS 机制及配置策略。
为什么需要配置 DNS?
在科学上网环境中,我们面临着独特的网络环境(DNS 污染),因此不能简单地使用系统默认的 DNS。Clash 内置了一个 DNS Server,其主要目的有两点:
- 防止污染:对国外域名使用加密的 DoH/DoT 协议向可信 DNS 查询,获取真实 IP。
- 国内外分流:根据 DNS 解析结果的 IP 归属地(IP-CIDR 或 GeoIP),反过来辅助判断流量是否需要走代理(Redir-Host 模式下尤为重要)。
- 返回 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解析流程
- Clash 同时向
nameserver和fallback中的所有服务器发起请求。 - 如果
nameserver返回的 IP 是国内 IP (GeoIP=CN),Clash 立即采用 该结果(速度快)。 - 如果
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 更直观、更高效,推荐高级用户使用。
