Clash DNS 配置深度指南:彻底告别DNS污染,解锁纯净网络体验
在数字时代,网络已成为我们生活、工作、学习不可或缺的一部分。然而,在这片看似自由开放的数字海洋中,却潜藏着一道无形的“墙”——DNS污染。它不仅可能导致你无法访问特定网站,更可能将你导向恶意页面,威胁你的隐私和安全。对于追求自由、安全、高效网络体验的用户而言,解决 DNS 污染是绕不开的关键一步。
Clash,作为一款流行的基于规则的网络代理客户端,以其灵活强大的配置能力受到广泛青睐。除了基本的代理转发功能外,Clash 内置的 DNS 处理模块更是对抗 DNS 污染、提升网络性能、实现精细化流量控制的利器。本文将带你深入了解 DNS 污染的原理,并详细解析如何通过配置 Clash 的 DNS 设置,彻底告别这一恼人问题,享受纯净、高速的网络体验。
第一章:理解基石——什么是 DNS?为什么会污染?
在深入 Clash 的配置之前,我们必须先理解 DNS 的本质以及 DNS 污染的工作原理。
1.1 DNS:网络的“电话簿”
DNS 全称 Domain Name System(域名系统)。你可以把它想象成互联网的“电话簿”。当你在浏览器中输入一个网址(比如 www.google.com
)时,你的电脑并不知道这个网址对应着哪台服务器的具体地址(IP 地址,比如 172.217.160.142
)。这时,你的电脑就会向一个 DNS 服务器发起查询,询问“www.google.com
的 IP 地址是什么?” DNS 服务器收到查询后,会查找自己的“电话簿”或向其他 DNS 服务器层层询问,最终找到对应的 IP 地址,并返回给你的电脑。你的电脑拿到 IP 地址后,才能与目标服务器建立连接,加载网页内容。
整个过程是:域名 (Domain Name) -> DNS 查询 -> DNS 服务器返回 IP 地址 (IP Address) -> 电脑通过 IP 地址连接服务器。
DNS 是互联网能够方便易用的基石。如果没有 DNS,我们将不得不记住每一个网站复杂的 IP 地址,这显然是不可行的。
1.2 DNS 污染:无声的劫持
DNS 污染(也称 DNS 缓存投毒 DNS Cache Poisoning)是指攻击者或审查者通过各种手段,使得用户在查询某个域名时,收到的不是正确的 IP 地址,而是被篡改过的、错误的 IP 地址。这种错误的 IP 地址可能指向一个不存在的地址(导致访问失败),或者指向一个恶意/伪造的服务器。
DNS 污染的主要形式包括:
- DNS 劫持 (DNS Hijacking): 发生在用户的路由器、本地网络或 ISP 层面。攻击者控制了用户的 DNS 查询,并返回虚假的 IP 地址。
- DNS 投毒 (DNS Cache Poisoning): 攻击者向 DNS 服务器注入伪造的记录,使得 DNS 服务器缓存了错误的 IP 地址。当其他用户向这个被投毒的 DNS 服务器查询时,就会获得错误的地址。这通常发生在递归 DNS 解析器上。
- DNS 阻断 (DNS Blocking): 直接阻止对特定域名的 DNS 查询响应,或者响应一个特殊的保留 IP 地址(如 0.0.0.0 或 127.0.0.1)。
在中国大陆等特定区域,DNS 污染是互联网审查的一种常见手段。通过污染特定网站的域名解析,用户即使通过正常途径查询,也无法获得正确的 IP 地址,从而阻止用户访问这些网站。此外,DNS 污染也可能被用于网络钓鱼、传播恶意软件等恶意活动。
1.3 传统 DNS 的脆弱性
传统 DNS 查询通常是使用 UDP 或 TCP 协议在端口 53 上进行的。这些查询是明文传输的,意味着在整个传输路径上的任何节点都可以看到你查询了什么域名,并且可以篡改查询结果。这种明文传输和缺乏身份验证的特性,使得传统 DNS 对监听和篡改非常脆弱,极易受到污染。
第二章:Clash 如何应对 DNS 污染?内置 DNS 服务器的优势
为了解决传统 DNS 的安全性和隐私性问题,出现了诸如 DNS over HTTPS (DoH) 和 DNS over TLS (DoT) 等加密的 DNS 协议。这些协议将 DNS 查询请求封装在 HTTPS 或 TLS 隧道中进行传输,使得第三方无法轻易查看或篡改查询内容。
Clash 作为一款高级代理工具,并没有简单地依赖操作系统的 DNS 设置,而是内置了一个强大的 DNS 服务器/解析器。这个内置的 DNS 模块是 Clash 能够有效对抗 DNS 污染的关键。
2.1 Clash 内置 DNS 的工作原理
当 Clash 启用内置 DNS 功能后,它可以接管设备的 DNS 查询请求。操作系统或应用程序发起的 DNS 查询会被重定向到 Clash 监听的 DNS 地址和端口(通常是 127.0.0.1:53
或 0.0.0.0:53
)。
Clash 接收到查询请求后,不会直接转发给你的 ISP 的 DNS 服务器(因为它们可能被污染),而是会根据其内部配置和规则进行处理:
- 规则匹配: Clash 会根据域名(或相关的 IP 地址)匹配规则。例如,某些域名可能被配置为直连(DIRECT),某些配置为走代理(PROXY),某些配置为阻止(BLOCK)。
- 选择解析方式: 对于需要解析的域名,Clash 会根据你的 DNS 配置选择使用哪些上游 DNS 服务器进行解析(可能是加密的 DoH/DoT 服务器,也可能是传统的 UDP 服务器)。
- 智能路由: 更重要的是,Clash 可以根据域名的特性(是否容易被污染、是否是国内域名等)选择不同的 DNS 服务器进行查询,甚至并行查询并优先使用最快或正确的结果。
- IP 与规则关联: 在某些模式下(如
fake-ip
模式),Clash 会为域名生成一个“虚假”的 IP 地址,并在内部维护一个域名到真实 IP 的映射关系。后续的网络连接会根据这个虚假 IP 匹配 Clash 的代理规则。在redir-host
模式下,Clash 会获取域名的真实 IP,并根据域名或真实 IP 来匹配规则。 - 缓存: Clash 会缓存解析结果,提高后续查询的速度。
通过接管 DNS 查询并将查询通过安全的通道(如 DoH/DoT)发送给可信的第三方 DNS 服务器(如 Cloudflare 1.1.1.1, Google 8.8.8.8, Quad9 9.9.9.9, AdGuard DNS 等),Clash 绕开了本地 ISP 可能存在的 DNS 污染环节,直接获取未被篡改的、正确的 IP 地址。
2.2 内置 DNS 的核心优势:
- 绕过本地污染: 不使用 ISP 的 DNS 服务器,直接向可信的第三方服务器查询。
- 加密传输: 支持 DoH/DoT,防止查询内容被监听和篡改。
- 智能解析: 可以根据规则对不同域名使用不同的 DNS 服务器,提高解析效率和准确性。
- 增强规则匹配: 在
fake-ip
等模式下,DNS 解析与代理规则紧密结合,实现更精准的流量控制。 - 防止 DNS 泄露: 确保所有 DNS 查询都通过 Clash 控制,避免在代理连接建立前发生 DNS 泄露,暴露用户的访问意图。
正是这些特性,使得 Clash 的内置 DNS 功能成为对抗 DNS 污染、保障网络安全和隐私的强大武器。接下来,我们将详细了解如何在 Clash 中进行 DNS 配置。
第三章:Clash DNS 配置详解——YAML 文件中的魔法
Clash 的配置核心是其 YAML 格式的配置文件。DNS 配置位于配置文件的 dns:
部分。以下是对 dns:
部分主要参数的详细解析。
3.1 dns:
配置块结构
一个典型的 dns:
配置块可能包含以下参数:
yaml
dns:
enable: true # 是否启用内置 DNS 服务器
listen: 0.0.0.0:53 # DNS 服务器监听地址和端口
enhanced-mode: fake-ip # 或 redir-host, 基于 Fake IP 或基于 host 的增强模式
fake-ip-range: 198.18.0.1/16 # Fake IP 地址段 (仅在 enhanced-mode 为 fake-ip 时需要)
default-nameserver: # 默认的上游传统 DNS 服务器,用于非代理连接或 fake-ip 模式下的初始查询
- 114.114.114.114
- 223.5.5.5
nameserver: # 主要的上游 DNS 服务器,通常配置安全加密的 DNS
- https://doh.pub/dns-query # DNSPod Public DNS (DoH)
- tls://dns.alidns.com # AliCloud DNS (DoT)
- https://dns.cloudflare.com/dns-query # Cloudflare (DoH)
fallback: # 备用的上游 DNS 服务器,用于 fallback-filter 匹配的域名
- tls://dns.google # Google Public DNS (DoT)
- https://dns.quad9.net/dns-query # Quad9 (DoH)
fallback-filter: # 备用 DNS 触发规则
geoip: true # 匹配 GeoIP 数据库中的中国大陆 IP 地址 (通常用于区分国内流量)
# ipcidr: # 匹配特定的 IP CIDR 段
# - 240.0.0.0/4 # Example: Block E range, often used for fake IPs
domain: # 匹配特定域名或域名后缀
- '+.google.com' # Google 及子域名
- '+.facebook.com' # Facebook 及子域名
- '+.twitter.com' # Twitter 及子域名
- '+.youtube.com' # YouTube 及子域名
cached-size: 10000 # DNS 缓存大小
block: # 阻止解析的域名列表 (返回 NXDOMAIN)
- example.com
- sub.example.org
# osx-route: true # (macOS specific) Force DNS queries through Clash
接下来,我们将逐一解释这些参数的作用及其配置方法。
3.2 参数详解
-
enable
: (布尔值) 设置为true
启用 Clash 的内置 DNS 服务器,设置为false
则禁用。如果禁用,Clash 将完全依赖操作系统的 DNS 设置,这意味着你将无法享受到 Clash 在 DNS 方面的优势,DNS 污染问题也将无法通过 Clash 解决。建议设置为true
。 -
listen
: (字符串) 指定 Clash 的 DNS 服务器监听的地址和端口。127.0.0.1:53
: 只监听本地回环地址,只有运行在本地的应用程序可以将 DNS 查询重定向到 Clash。0.0.0.0:53
: 监听所有网络接口的 53 端口。这使得局域网内的其他设备可以将 DNS 查询指向运行 Clash 的设备的 IP 地址,让 Clash 为整个局域网提供 DNS 服务。注意: 在公共网络使用0.0.0.0
监听 53 端口可能存在安全风险。同时,在 Linux/macOS 上监听 53 端口通常需要 root 权限。常见的做法是监听一个非特权端口(如 1053 或 7874),然后使用操作系统或路由器的功能将 53 端口的查询转发到该端口。但在 Windows 上通常可以直接监听 53。- 自定义端口,如
127.0.0.1:7874
:如果 53 端口被占用,或者不想监听标准端口,可以使用其他端口。此时需要将操作系统的 DNS 设置或应用程序的 DNS 设置指向这个地址和端口。 - 常用设置:
127.0.0.1:7874
(然后通过客户端软件或系统设置重定向) 或0.0.0.0:53
(在安全环境下)。
-
enhanced-mode
: (字符串) DNS 增强模式。这是 Clash DNS 配置中非常重要的一个参数,它决定了 Clash 处理 DNS 解析结果和规则匹配的方式。fake-ip
: 这是推荐用于对抗 DNS 污染和实现复杂规则匹配的模式。当 Clash 在fake-ip
模式下解析域名时,它不会直接返回域名的真实 IP 地址给客户端。相反,它会从fake-ip-range
指定的私有 IP 地址段中为该域名分配一个“虚假”的 IP 地址,并将这个虚假 IP 返回给客户端。同时,Clash 在内部维护一个虚假 IP 到真实域名的映射表。当客户端尝试连接这个虚假 IP 时,Clash 会截获连接,查找映射表获取真实域名,然后根据这个真实域名(以及解析出的真实 IP,Clash 会在后台解析)匹配代理规则,并将流量转发到正确的目的地。- 优点: 完美解决 DNS 污染(客户端收到的永远是 Clash 分配的虚假 IP),非常适合需要根据域名进行精细规则匹配的场景。不受真实 IP 变化或解析结果被污染的影响。
- 缺点: 某些依赖真实 IP 的应用(如某些 P2P 应用、网络游戏、内网穿透等)可能不兼容。需要确保
fake-ip-range
不与你实际使用的内网或公网 IP 冲突。
-
redir-host
: 在这个模式下,Clash 会解析域名的真实 IP 地址,并将这个真实 IP 返回给客户端。Clash 会记住域名和真实 IP 的对应关系。当客户端连接这个真实 IP 时,Clash 会根据客户端连接的目标 IP(或者在可能的情况下通过一些技巧获取原始域名信息)来匹配规则。- 优点: 兼容性好,适用于大多数应用。
- 缺点: 容易受到 DNS 污染的影响(如果 Clash 自身没有配置好安全的上游 DNS 或
fallback
机制,或者即使配置了,客户端也可能通过其他途径获取到被污染的 IP)。规则匹配可能依赖于 IP 地址,不如fake-ip
直接基于域名匹配灵活。
-
选择建议: 对于绝大多数需要对抗 DNS 污染、实现基于域名规则代理的用户,
fake-ip
模式是首选。如果遇到兼容性问题,再尝试redir-host
。
-
fake-ip-range
: (字符串) 仅在enhanced-mode: fake-ip
时需要。指定 Clash 用于分配虚假 IP 地址的 CIDR 地址段。- 重要性: 这个地址段必须是一个私有或保留的、不容易与你的实际网络环境或目标服务器 IP 冲突的地址段。Clash 官方文档推荐使用
198.18.0.1/16
,这是 IETF 为基准测试(Benchmarking)预留的地址段,理论上不会与公网 IP 冲突。 - 格式: 必须是 CIDR 格式,例如
198.18.0.1/16
。 - 大小:
/16
提供了 65536 个 IP 地址,通常足够使用。如果你的网络环境中需要解析大量不同的域名,可能需要更大的范围,但/16
是标准且推荐的大小。 - 配置建议: 强烈推荐使用
198.18.0.1/16
,除非你明确知道自己在做什么,且该地址段与你的网络环境有冲突。
- 重要性: 这个地址段必须是一个私有或保留的、不容易与你的实际网络环境或目标服务器 IP 冲突的地址段。Clash 官方文档推荐使用
-
default-nameserver
: (字符串列表) 默认的上游 DNS 服务器列表。- 作用:
- 在
redir-host
模式下,或者当enhanced-mode
未启用时,Clash 会使用这里的服务器进行正常的域名解析。 - 在
fake-ip
模式下,default-nameserver
通常用于解析那些不需要或不适合通过代理(如国内域名)的初始解析,或者用于 Clasn 内部的一些连接(如更新订阅)。它也可能作为nameserver
和fallback
都失败时的最后选项。 - 在某些 Clash 客户端版本或配置逻辑中,
fake-ip
模式下对需要走代理的域名,Clash 可能会 并行 向nameserver
和fallback
中的服务器以及default-nameserver
发起查询,但优先使用nameserver
或fallback
的结果。
- 在
- 配置建议: 由于其作用可能包括处理非代理流量或作为备用,这里可以配置一些快速且不易被污染的公共 DNS 服务器(如 114.114.114.114, 223.5.5.5, 阿里公共 DNS 等国内公共 DNS),或者你的 ISP 提供的 DNS (如果确认其未被污染或仅用于国内域名)。不要在这里放容易被污染的服务器,否则可能影响
redir-host
模式或fake-ip
模式下对国内域名的处理。格式是纯 IP 地址。
- 作用:
-
nameserver
: (字符串列表) 主要的上游 DNS 服务器列表。- 作用: 这是 Clash 用于解析需要走代理或可能被污染的域名的主要渠道。Clash 会优先尝试使用这里的服务器进行查询。
- 配置建议: 强烈建议配置多个使用安全加密协议 (DoH/DoT) 的、国际知名的、可靠的公共 DNS 服务器,以对抗污染并提高解析成功率。
- 格式:
- DoH:
https://hostname/path
或https://ip_address/path
(如https://dns.cloudflare.com/dns-query
,https://doh.pub/dns-query
) - DoT:
tls://hostname
或tls://ip_address
(如tls://dns.google
,tls://dns.alidns.com
) - UDP:
udp://ip_address:port
(不推荐用于对抗污染) - TCP:
tcp://ip_address:port
(不推荐用于对抗污染)
- DoH:
- 常用服务器示例:
https://dns.cloudflare.com/dns-query
(Cloudflare DoH)tls://dns.google
(Google DoT)https://doh.pub/dns-query
(DNSPod DoH)tls://dns.alidns.com
(AliCloud DoT)https://dns.quad9.net/dns-query
(Quad9 DoH)tls://dns.quad9.net
(Quad9 DoT)https://dns.adguard.com/dns-query
(AdGuard DoH – 支持去广告)tls://dns.adguard.com
(AdGuard DoT – 支持去广告)
- 格式:
- 数量: 配置多个可以提高可靠性,一个失败可以尝试下一个。
-
fallback
: (字符串列表) 备用的上游 DNS 服务器列表。- 作用: 这些服务器仅在域名匹配
fallback-filter
规则时使用。Clash 会对匹配fallback-filter
的域名使用这里的服务器进行查询。 - 配置建议: 与
nameserver
类似,也应配置多个安全加密的、可靠的公共 DNS 服务器。这里的服务器可以与nameserver
中的相同,也可以是不同的,例如将特定服务商的 DNS 放在这里,或者使用一些可能解析特定区域内容更准确的服务器。 - 与
nameserver
的区别和协作:- 在某些 Clash 实现中,对于匹配
fallback-filter
的域名,Clash 可能会并行向nameserver
和fallback
中的服务器发送查询请求,并优先使用那些返回“非污染”结果的响应。这种机制被称为 Happy Eyeballs for DNS 或并行查询,可以有效对抗投毒。 - 在另一些实现中,可能是在尝试
nameserver
失败或返回可疑结果后,再尝试fallback
。 - 无论具体实现如何,
fallback
和fallback-filter
的目的是为特定域名提供另一组可靠的解析渠道,以确保即使主要服务器返回了错误结果,也能通过备用服务器获取正确结果。
- 在某些 Clash 实现中,对于匹配
- 格式和服务器选择: 同
nameserver
。
- 作用: 这些服务器仅在域名匹配
-
fallback-filter
: (对象) 定义哪些域名会触发使用fallback
中的 DNS 服务器进行解析。这是实现智能分流 DNS 解析、区分国内/外流量的关键。- 参数:
geoip
: (布尔值) 如果设置为true
,并且域名解析到的 IP 地址属于 GeoIP 数据库中的中国大陆范围,则该域名会匹配此过滤器。这常用于将国内域名的解析“排除”出需要代理的范围,或者确保国内域名使用特定的快速 DNS 解析。注意: GeoIP 数据库的准确性依赖于其更新程度。ipcidr
: (字符串列表) 匹配解析到的 IP 地址是否属于指定的 CIDR 地址段。例如,可以指定一些可能被污染的 IP 段,或者将解析到特定 IP 段的域名视为匹配。domain
: (字符串列表) 匹配域名本身。支持通配符 (*
) 和前缀 (+
)。example.com
: 精确匹配example.com
。+.example.com
: 匹配example.com
及其所有子域名 (如www.example.com
,mail.example.com
)。*.example.com
: 匹配example.com
的所有子域名,但不包括example.com
本身。example.com
: 使用引号括起来通常是更好的习惯。
- 逻辑: 如果一个域名匹配了
fallback-filter
中的任何一个规则 (geoip
为 true 且 IP 匹配,或 IP 在ipcidr
列表中,或域名匹配domain
列表),那么 Clash 在解析该域名时可能会使用fallback
中的服务器。 - 典型用途: 配置
geoip: true
和一些常用国内域名后缀(如.cn
,.com.cn
等)到fallback-filter
中,同时将default-nameserver
配置为国内公共 DNS,nameserver
配置为国际加密 DNS。这样,Clash 会尝试用国内 DNS 解析国内 IP,用国际加密 DNS 解析国外 IP 或可能被污染的域名,实现分流解析。或者,更常见的是将需要代理的、可能被污染的域名放入fallback-filter
的domain
列表中,并配合nameserver
和fallback
使用国际加密 DNS,确保这些域名的解析是干净的。 - 对抗污染的常用配置: 将可能被污染的域名 (如 Google, YouTube, Facebook 等) 添加到
fallback-filter
的domain
列表,并确保nameserver
和fallback
都配置了可靠的国际加密 DNS。Clash 会通过并行查询等机制来获取正确结果。
- 参数:
-
cached-size
: (整数) DNS 缓存的大小,单位是条目数。Clash 会缓存已解析的域名及其 IP 地址,下次查询同一域名时可以直接从缓存中获取,加快速度并减少对上游 DNS 服务器的请求。默认值通常是 10000,对于大多数用户来说足够了。 -
block
: (字符串列表) 阻止解析的域名列表。- 作用: 任何出现在此列表中的域名,Clash 都不会进行实际解析,而是直接返回 NXDOMAIN(表示域名不存在)。这是一种简单的广告屏蔽或恶意网站屏蔽方法。
- 格式: 直接列出域名,支持通配符和前缀同
fallback-filter
的domain
。 - 示例:
- ad.example.com
,- +.tracking.com
。
-
osx-route
: (布尔值) macOS 特有的参数。设置为true
可以强制 macOS 系统的 DNS 查询通过 Clash 的监听地址。在 macOS 上,系统级别的 DNS 设置比较复杂,此选项有时可以帮助确保所有流量都走 Clash 的 DNS。在 Windows 或 Linux 上通常不需要此选项。
3.3 典型配置场景与示例
理解了参数后,我们来看看一些常见的 DNS 配置场景。
场景 1:基础安全加密 DNS (适用于翻墙,不区分国内/外流量)
这是最简单的配置,所有 DNS 查询都通过一组加密 DNS 服务器进行。可能导致国内网站解析变慢。
yaml
dns:
enable: true
listen: 0.0.0.0:53 # 或 127.0.0.1:7874
enhanced-mode: fake-ip # 或 redir-host
fake-ip-range: 198.18.0.1/16
nameserver: # 所有查询都优先走这里
- https://dns.cloudflare.com/dns-query
- https://doh.pub/dns-query # 也可以加入国内加密 DNS
# fallback 和 fallback-filter 可以省略,或保留但列表为空
# default-nameserver 可以省略,或配置为一些备用
场景 2:区分国内/外流量的智能 DNS (常用且推荐)
利用 fallback-filter
区分国内 IP 或特定域名,使用不同的 DNS 服务器。
yaml
dns:
enable: true
listen: 0.0.0.0:53 # 或 127.0.0.1:7874
enhanced-mode: fake-ip # 推荐 fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver: # 用于国内流量或非代理流量的快速解析
- 114.114.114.114
- 223.5.5.5
nameserver: # 用于国外流量或可能被污染的流量的主力加密 DNS
- https://dns.cloudflare.com/dns-query
- tls://dns.google
fallback: # 用于匹配 fallback-filter 的域名,通常与 nameserver 类似或相同,提供冗余和抗污染
- https://dns.quad9.net/dns-query
- https://dns.adguard.com/dns-query
fallback-filter: # 触发 fallback 的规则
geoip: true # 解析到国内 IP 的域名
domain: # 手动添加可能被污染的域名
- '+.google.com'
- '+.facebook.com'
- '+.twitter.com'
- '+.youtube.com'
- '+.wikipedia.org'
# ... 可以添加更多
cached-size: 10000
block: # 可选:添加需要屏蔽的域名
- analytics.google.com # 示例:屏蔽统计追踪域名
解释: 在这个配置中,对于解析到国内 IP 的域名(通过 geoip: true
匹配),或者手动添加到 fallback-filter
domain
列表中的域名,Clash 会同时尝试使用 nameserver
和 fallback
中的服务器进行解析。对于不匹配 fallback-filter
的域名(且需要走代理),Clash 主要使用 nameserver
中的服务器。对于不需要走代理的域名(例如在 rule
中配置了 DIRECT
),Clash 可能会使用 default-nameserver
进行解析,或者在 fake-ip
模式下,Clash 内部的真实 IP 解析可能会依赖于 default-nameserver
或其他逻辑。这种分层和并行查询的策略,极大地提高了 DNS 解析的抗污染能力和对国内/外流量的适应性。
场景 3:纯 redir-host
模式 (较少用于对抗污染,更多用于兼容性)
如果 fake-ip
模式有兼容性问题,可以使用 redir-host
,但此时对抗污染主要依赖于 nameserver
/fallback
配置本身的纯净度和 fallback-filter
的准确性。
yaml
dns:
enable: true
listen: 0.0.0.0:53 # 或 127.0.0.1:7874
enhanced-mode: redir-host
default-nameserver: # 可能会被广泛使用,因此选择快速可靠的
- 114.114.114.114
- 223.5.5.5
nameserver: # 主要解析通道,加密服务器
- https://dns.cloudflare.com/dns-query
- tls://dns.google
fallback: # 备用通道,抗污染
- https://dns.quad9.net/dns-query
- https://dns.adguard.com/dns-query
fallback-filter: # 触发 fallback 的规则,非常重要,必须准确列出可能被污染的域名
domain:
- '+.google.com'
- '+.facebook.com'
- '+.twitter.com'
- '+.youtube.com'
- '+.wikipedia.org'
# ... 必须非常全面,否则未匹配的域名如果解析出错,就可能被污染
geoip: true # 也可以结合 GeoIP
cached-size: 10000
block: # 可选
- analytics.google.com
注意: 在 redir-host
模式下,fallback-filter
的作用尤为重要。如果一个可能被污染的域名没有被 fallback-filter
匹配到,Clash 就可能直接使用 nameserver
的解析结果。如果 nameserver
中的服务器也被污染了(尽管是加密连接,但服务器本身可能返回错误结果,或者其自身的上游被污染),或者在尝试 nameserver
前通过其他途径(如 default-nameserver
)获取到了错误的 IP,都可能导致问题。因此,fake-ip
在对抗 DNS 污染方面具有天然的优势。
第四章:实际操作与验证
配置好 YAML 文件后,如何将其应用到 Clash 客户端并验证效果呢?
4.1 应用配置
- 找到配置文件: 不同的 Clash 客户端,配置文件的位置不同。
- Clash for Windows (CfW):通常在安装目录下的
resources\app.asar.unpacked\node_modules\clash-core\clash-win64.yaml
或用户数据目录%APPDATA%\clash_win\
下(通过设置界面可以打开配置文件夹)。 - ClashX (macOS):通常在
~/.config/clash/
或通过菜单栏图标打开配置文件夹。 - Clash for Android/iOS:通常通过应用界面编辑或导入。
- Clash Premium/Meta (命令行):默认在
~/.config/clash/config.yaml
或通过-f
参数指定。
- Clash for Windows (CfW):通常在安装目录下的
- 编辑文件: 使用文本编辑器打开配置文件,找到
dns:
部分(如果没有则手动添加),按照上面的示例进行修改。务必注意 YAML 格式的缩进和语法。 - 保存并应用: 保存修改后的文件。在 Clash 客户端界面中,通常需要点击“Reload”或“重启”按钮来加载新的配置。有些客户端在你保存文件时会自动加载。
4.2 验证 DNS 工作状态
配置完成后,需要验证 Clash 的 DNS 是否正常工作,以及是否有效防止了污染。
- 检查 Clash 监听端口: 确保 Clash 监听了你在配置中指定的 DNS 端口(默认为 53 或 7874)。可以使用命令行工具检查,如
netstat -tulnp | grep clash
(Linux) 或netstat -ano | findstr :53
(Windows)。 - 检查系统或应用程序的 DNS 设置: 确保你的操作系统或需要代理的应用程序的 DNS 设置指向了 Clash 监听的地址和端口 (如
127.0.0.1:53
或127.0.0.1:7874
)。许多 Clash 客户端(如 CfW、ClashX)可以通过系统服务或网络适配器设置,自动将系统 DNS 重定向到 Clash。 - 使用命令行工具测试解析:
- 使用
nslookup
或dig
命令,指定 Clash 监听的地址作为 DNS 服务器,查询一个容易被污染的域名(如twitter.com
)。nslookup twitter.com 127.0.0.1
(假设 Clash 监听在 127.0.0.1:53)dig @127.0.0.1 twitter.com
- 检查返回的 IP 地址是否正确。如果在
fake-ip
模式下,会返回一个198.18.x.x
的地址;如果在redir-host
模式下,会返回真实的、未被污染的 IP 地址。
- 查询一个国内域名(如
baidu.com
),检查返回的 IP 是否是国内 IP,以及在fake-ip
模式下是否也返回了虚假 IP(取决于你的规则和fallback-filter
配置)。
- 使用
- 使用在线 DNS 泄露测试工具: 访问如
dnsleaktest.com
等网站,运行标准测试和扩展测试。查看测试结果显示的 DNS 服务器 IP 地址。如果看到的是你的代理服务器 IP 地址,或者你配置的 DoH/DoT 服务器所属公司的 IP 地址(如 Cloudflare, Google, Quad9, AdGuard 等),则说明 DNS 查询通过代理或加密通道发送,没有发生泄露给本地 ISP。如果看到本地 ISP 的 DNS 服务器 IP,说明存在 DNS 泄露,需要检查配置和系统设置。 - 访问之前被污染或无法访问的网站: 尝试访问那些你之前因为 DNS 污染而无法访问的网站,看是否能正常打开。
如果验证过程中发现问题(如解析错误、泄露),请回到配置步骤仔细检查参数设置,特别是 listen
, enhanced-mode
, nameserver
, fallback
, fallback-filter
等。
第五章:常见问题与故障排除
即使按照步骤配置,也可能遇到一些问题。以下是一些常见问题及其排查思路:
-
配置错误,Clash 无法启动或加载:
- 问题表现: Clash 客户端提示配置错误,或者命令行版本的 Clash 启动失败。
- 原因: YAML 格式错误(缩进、冒号、列表格式等)、参数名称拼写错误、参数值类型错误(期望布尔值但给了字符串等)。
- 解决方法: 使用 YAML 语法检查工具在线或离线检查配置文件。仔细对照 Clash 文档或本文档检查参数名称和格式。
-
Clash 启动正常,但无法上网:
- 问题表现: 打开网页或使用网络应用时提示无法连接。
- 原因:
- DNS 未正常工作:操作系统或应用程序的 DNS 未指向 Clash,或者 Clash 配置的 DNS 服务器无法访问。
- 代理规则问题:流量没有被正确匹配到代理或直连规则。
- 防火墙问题:防火墙阻止了流量。
- 解决方法:
- 检查 DNS: 使用
nslookup
/dig
测试 Clash DNS 是否正常解析。检查系统或应用程序的 DNS 设置是否正确。确保 Clash 监听的端口没有被防火墙阻止。 - 检查规则: 查看 Clash 客户端的连接日志,看流量被匹配到了哪条规则。确认规则逻辑是否正确。
- 检查代理服务器: 确认你使用的代理服务器是否正常可用。
- 检查 DNS: 使用
-
可以上网,但特定网站无法访问或访问缓慢,怀疑 DNS 污染:
- 问题表现: 某些网站(特别是国外网站)加载失败,或者跳转到奇怪的页面。
- 原因: Clash 的 DNS 配置未能成功绕过污染,可能的原因包括:
- 未启用
enable: true
。 - 未设置
enhanced-mode
为fake-ip
或redir-host
。 nameserver
或fallback
配置的 DNS 服务器本身有问题或被阻断。- 在
redir-host
模式下,fallback-filter
未涵盖该域名,或者default-nameserver
返回了被污染的 IP。 fake-ip-range
与目标 IP 冲突(较少见)。
- 未启用
- 解决方法:
- 确认模式: 检查是否使用了
fake-ip
模式(推荐)。 - 检查上游 DNS: 确认
nameserver
和fallback
中的 DNS 服务器地址是否正确,并且这些服务器本身是可靠的(可以在不通过 Clash 的情况下,直接测试这些 DoH/DoT 地址是否可访问和解析)。尝试更换不同的国际加密 DNS 服务器。 - 检查
fallback-filter
: 如果在redir-host
模式下,仔细检查fallback-filter
的domain
列表是否包含了无法访问的域名。在fake-ip
模式下,通常不太需要担心域名未被fallback-filter
匹配的问题,因为最终都会通过虚假 IP 走 Clash 规则。 - 检查日志: 查看 Clash 的 DNS 日志(如果客户端提供此功能),看该域名的解析过程和结果。
- 确认模式: 检查是否使用了
-
DNS 泄露:
- 问题表现: DNS 泄露测试显示本地 ISP 的 DNS 服务器。
- 原因:
- 操作系统的 DNS 未完全重定向到 Clash。
- 部分应用程序可能绕过系统 DNS 设置,使用自己的 DNS 解析器。
- Clash 配置问题,如
default-nameserver
配置了 ISP 的 DNS 且在某些情况下被使用。
- 解决方法:
- 确保系统 DNS 重定向: 检查 Clash 客户端的网络适配器设置、服务设置等,确保系统 DNS 被正确接管。手动将系统 DNS 设置为
127.0.0.1
或 Clash 监听的地址。 - 检查应用程序设置: 某些应用(如 Firefox 浏览器)有内置的 DoH 功能,可能会绕过系统 DNS。如果需要所有流量都走 Clash,应禁用这些应用的内置 DNS 功能。
- 检查 Clash 配置: 确保
default-nameserver
中没有配置不安全的 DNS 服务器,或者在fake-ip
模式下尽量减少其影响。
- 确保系统 DNS 重定向: 检查 Clash 客户端的网络适配器设置、服务设置等,确保系统 DNS 被正确接管。手动将系统 DNS 设置为
-
fake-ip
模式导致某些应用不兼容:- 问题表现: 特定游戏、P2P 软件、内网访问应用等无法正常工作。
- 原因: 这些应用可能依赖于获取真实的 IP 地址,而
fake-ip
模式返回的是虚假 IP。 - 解决方法:
- 将不兼容的应用或域名设置为 DIRECT: 在 Clash 规则中,将这些应用的流量或相关的域名/IP 地址配置为
DIRECT
,使其不走代理,从而避免fake-ip
的影响。 - 考虑使用
redir-host
: 如果不兼容的应用是核心需求且无法通过规则绕过,可能需要考虑切换到redir-host
模式,但需要做好应对 DNS 污染的配置。
- 将不兼容的应用或域名设置为 DIRECT: 在 Clash 规则中,将这些应用的流量或相关的域名/IP 地址配置为
排查问题时,仔细查看 Clash 客户端的日志(如果可用)是非常有帮助的,它可以显示每个连接和 DNS 查询的详细信息,包括使用的规则、解析结果、连接到的目标等。
第六章:超越基础——DNS 配置的进阶与优化
掌握了基本的 DNS 配置后,你还可以进行一些进阶优化。
- 选择最佳上游 DNS 服务器: 不同的公共 DNS 服务器有不同的特点,如速度、隐私政策(是否记录日志)、是否支持 ECS (EDNS Client Subnet) 等。你可以测试不同服务器的速度,阅读它们的隐私政策,选择最适合你的服务器。例如,Cloudflare 1.1.1.1 强调隐私,AdGuard DNS 提供去广告功能,Quad9 专注于安全(屏蔽恶意域名)。
- 合理配置
default-nameserver
: 虽然在fake-ip
模式下default-nameserver
使用频率可能不高,但合理配置可以提高对国内域名的解析速度。可以配置国内公共 DNS,并确保这些域名的规则设置为DIRECT
或MATCH
到直连代理。 - 优化
fallback-filter
: 仔细维护fallback-filter
的domain
列表,只添加那些已知或高度怀疑被污染的域名。过于庞大或不准确的列表可能会影响性能或导致误判。结合geoip: true
是一个非常有效的区分国内/外流量的方法。 - 利用
block
功能去广告/恶意网站: 维护一个自定义的block
列表,添加常见的广告域名、追踪域名或恶意网站域名,可以在 DNS 层面直接阻止这些连接,提升浏览体验和安全性。 - 调整
cached-size
: 如果你访问的网站非常多且杂,适当增加cached-size
可以提高缓存命中率,减少重复查询,但会占用更多内存。对于普通用户,默认值通常足够。 - 理解不同客户端的实现差异: 尽管底层的 Clash Core 相同,但不同的 GUI 客户端可能在配置加载、系统 DNS 重定向方式、日志显示等方面有差异。遇到问题时,查阅特定客户端的文档可能更有帮助。
结论:掌握 DNS,掌控你的网络
DNS 污染是当前互联网环境下普遍存在的问题,它悄无声息地影响着我们的网络体验、隐私和安全。幸运的是,Clash 提供了强大而灵活的内置 DNS 功能,结合安全加密协议和智能分流策略,为我们提供了一套有效的解决方案。
通过本文的详细解析,你应该已经理解了 DNS 的重要性、污染的原理以及如何在 Clash 中进行 DNS 配置来对抗污染。从基础的启用内置 DNS 到复杂的 fake-ip
模式、nameserver
/fallback
的协同以及 fallback-filter
的精细控制,每一步配置都是为了让你能够绕开污染源,直接连接到纯净的 DNS 服务器,获取真实的 IP 地址,最终实现:
- 告别访问障碍: 轻松访问那些曾因 DNS 污染而无法打开的网站。
- 提升安全性: 避免被导向钓鱼或恶意网站,保护个人信息。
- 保障隐私: 加密 DNS 查询,防止第三方窥探你的上网活动。
- 优化网络体验: 结合智能分流规则,国内网站快速直连,国外网站稳定代理。
掌握 Clash 的 DNS 配置,就是掌握了网络连接的第一步,也是迈向更自由、更安全、更纯净网络体验的关键。现在,根据你的实际需求,动手配置你的 Clash,彻底告别 DNS 污染吧!