Clash DNS 配置:告别DNS污染 – wiki基地


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:530.0.0.0:53)。

Clash 接收到查询请求后,不会直接转发给你的 ISP 的 DNS 服务器(因为它们可能被污染),而是会根据其内部配置和规则进行处理:

  1. 规则匹配: Clash 会根据域名(或相关的 IP 地址)匹配规则。例如,某些域名可能被配置为直连(DIRECT),某些配置为走代理(PROXY),某些配置为阻止(BLOCK)。
  2. 选择解析方式: 对于需要解析的域名,Clash 会根据你的 DNS 配置选择使用哪些上游 DNS 服务器进行解析(可能是加密的 DoH/DoT 服务器,也可能是传统的 UDP 服务器)。
  3. 智能路由: 更重要的是,Clash 可以根据域名的特性(是否容易被污染、是否是国内域名等)选择不同的 DNS 服务器进行查询,甚至并行查询并优先使用最快或正确的结果。
  4. IP 与规则关联: 在某些模式下(如 fake-ip 模式),Clash 会为域名生成一个“虚假”的 IP 地址,并在内部维护一个域名到真实 IP 的映射关系。后续的网络连接会根据这个虚假 IP 匹配 Clash 的代理规则。在 redir-host 模式下,Clash 会获取域名的真实 IP,并根据域名或真实 IP 来匹配规则。
  5. 缓存: 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,除非你明确知道自己在做什么,且该地址段与你的网络环境有冲突。
  • default-nameserver: (字符串列表) 默认的上游 DNS 服务器列表。

    • 作用:
      • redir-host 模式下,或者当 enhanced-mode 未启用时,Clash 会使用这里的服务器进行正常的域名解析。
      • fake-ip 模式下,default-nameserver 通常用于解析那些不需要或不适合通过代理(如国内域名)的初始解析,或者用于 Clasn 内部的一些连接(如更新订阅)。它也可能作为 nameserverfallback 都失败时的最后选项。
      • 在某些 Clash 客户端版本或配置逻辑中,fake-ip 模式下对需要走代理的域名,Clash 可能会 并行nameserverfallback 中的服务器以及 default-nameserver 发起查询,但优先使用 nameserverfallback 的结果。
    • 配置建议: 由于其作用可能包括处理非代理流量或作为备用,这里可以配置一些快速且不易被污染的公共 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/pathhttps://ip_address/path (如 https://dns.cloudflare.com/dns-query, https://doh.pub/dns-query)
        • DoT: tls://hostnametls://ip_address (如 tls://dns.google, tls://dns.alidns.com)
        • UDP: udp://ip_address:port (不推荐用于对抗污染)
        • TCP: tcp://ip_address:port (不推荐用于对抗污染)
      • 常用服务器示例:
        • 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 可能会并行nameserverfallback 中的服务器发送查询请求,并优先使用那些返回“非污染”结果的响应。这种机制被称为 Happy Eyeballs for DNS 或并行查询,可以有效对抗投毒。
      • 在另一些实现中,可能是在尝试 nameserver 失败或返回可疑结果后,再尝试 fallback
      • 无论具体实现如何,fallbackfallback-filter 的目的是为特定域名提供另一组可靠的解析渠道,以确保即使主要服务器返回了错误结果,也能通过备用服务器获取正确结果。
    • 格式和服务器选择: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-filterdomain 列表中,并配合 nameserverfallback 使用国际加密 DNS,确保这些域名的解析是干净的。
    • 对抗污染的常用配置: 将可能被污染的域名 (如 Google, YouTube, Facebook 等) 添加到 fallback-filterdomain 列表,并确保 nameserverfallback 都配置了可靠的国际加密 DNS。Clash 会通过并行查询等机制来获取正确结果。
  • cached-size: (整数) DNS 缓存的大小,单位是条目数。Clash 会缓存已解析的域名及其 IP 地址,下次查询同一域名时可以直接从缓存中获取,加快速度并减少对上游 DNS 服务器的请求。默认值通常是 10000,对于大多数用户来说足够了。

  • block: (字符串列表) 阻止解析的域名列表。

    • 作用: 任何出现在此列表中的域名,Clash 都不会进行实际解析,而是直接返回 NXDOMAIN(表示域名不存在)。这是一种简单的广告屏蔽或恶意网站屏蔽方法。
    • 格式: 直接列出域名,支持通配符和前缀同 fallback-filterdomain
    • 示例: - 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 会同时尝试使用 nameserverfallback 中的服务器进行解析。对于不匹配 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 应用配置

  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 参数指定。
  2. 编辑文件: 使用文本编辑器打开配置文件,找到 dns: 部分(如果没有则手动添加),按照上面的示例进行修改。务必注意 YAML 格式的缩进和语法。
  3. 保存并应用: 保存修改后的文件。在 Clash 客户端界面中,通常需要点击“Reload”或“重启”按钮来加载新的配置。有些客户端在你保存文件时会自动加载。

4.2 验证 DNS 工作状态

配置完成后,需要验证 Clash 的 DNS 是否正常工作,以及是否有效防止了污染。

  1. 检查 Clash 监听端口: 确保 Clash 监听了你在配置中指定的 DNS 端口(默认为 53 或 7874)。可以使用命令行工具检查,如 netstat -tulnp | grep clash (Linux) 或 netstat -ano | findstr :53 (Windows)。
  2. 检查系统或应用程序的 DNS 设置: 确保你的操作系统或需要代理的应用程序的 DNS 设置指向了 Clash 监听的地址和端口 (如 127.0.0.1:53127.0.0.1:7874)。许多 Clash 客户端(如 CfW、ClashX)可以通过系统服务或网络适配器设置,自动将系统 DNS 重定向到 Clash。
  3. 使用命令行工具测试解析:
    • 使用 nslookupdig 命令,指定 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 配置)。
  4. 使用在线 DNS 泄露测试工具: 访问如 dnsleaktest.com 等网站,运行标准测试和扩展测试。查看测试结果显示的 DNS 服务器 IP 地址。如果看到的是你的代理服务器 IP 地址,或者你配置的 DoH/DoT 服务器所属公司的 IP 地址(如 Cloudflare, Google, Quad9, AdGuard 等),则说明 DNS 查询通过代理或加密通道发送,没有发生泄露给本地 ISP。如果看到本地 ISP 的 DNS 服务器 IP,说明存在 DNS 泄露,需要检查配置和系统设置。
  5. 访问之前被污染或无法访问的网站: 尝试访问那些你之前因为 DNS 污染而无法访问的网站,看是否能正常打开。

如果验证过程中发现问题(如解析错误、泄露),请回到配置步骤仔细检查参数设置,特别是 listen, enhanced-mode, nameserver, fallback, fallback-filter 等。

第五章:常见问题与故障排除

即使按照步骤配置,也可能遇到一些问题。以下是一些常见问题及其排查思路:

  1. 配置错误,Clash 无法启动或加载:

    • 问题表现: Clash 客户端提示配置错误,或者命令行版本的 Clash 启动失败。
    • 原因: YAML 格式错误(缩进、冒号、列表格式等)、参数名称拼写错误、参数值类型错误(期望布尔值但给了字符串等)。
    • 解决方法: 使用 YAML 语法检查工具在线或离线检查配置文件。仔细对照 Clash 文档或本文档检查参数名称和格式。
  2. Clash 启动正常,但无法上网:

    • 问题表现: 打开网页或使用网络应用时提示无法连接。
    • 原因:
      • DNS 未正常工作:操作系统或应用程序的 DNS 未指向 Clash,或者 Clash 配置的 DNS 服务器无法访问。
      • 代理规则问题:流量没有被正确匹配到代理或直连规则。
      • 防火墙问题:防火墙阻止了流量。
    • 解决方法:
      • 检查 DNS: 使用 nslookup/dig 测试 Clash DNS 是否正常解析。检查系统或应用程序的 DNS 设置是否正确。确保 Clash 监听的端口没有被防火墙阻止。
      • 检查规则: 查看 Clash 客户端的连接日志,看流量被匹配到了哪条规则。确认规则逻辑是否正确。
      • 检查代理服务器: 确认你使用的代理服务器是否正常可用。
  3. 可以上网,但特定网站无法访问或访问缓慢,怀疑 DNS 污染:

    • 问题表现: 某些网站(特别是国外网站)加载失败,或者跳转到奇怪的页面。
    • 原因: Clash 的 DNS 配置未能成功绕过污染,可能的原因包括:
      • 未启用 enable: true
      • 未设置 enhanced-modefake-ipredir-host
      • nameserverfallback 配置的 DNS 服务器本身有问题或被阻断。
      • redir-host 模式下,fallback-filter 未涵盖该域名,或者 default-nameserver 返回了被污染的 IP。
      • fake-ip-range 与目标 IP 冲突(较少见)。
    • 解决方法:
      • 确认模式: 检查是否使用了 fake-ip 模式(推荐)。
      • 检查上游 DNS: 确认 nameserverfallback 中的 DNS 服务器地址是否正确,并且这些服务器本身是可靠的(可以在不通过 Clash 的情况下,直接测试这些 DoH/DoT 地址是否可访问和解析)。尝试更换不同的国际加密 DNS 服务器。
      • 检查 fallback-filter 如果在 redir-host 模式下,仔细检查 fallback-filterdomain 列表是否包含了无法访问的域名。在 fake-ip 模式下,通常不太需要担心域名未被 fallback-filter 匹配的问题,因为最终都会通过虚假 IP 走 Clash 规则。
      • 检查日志: 查看 Clash 的 DNS 日志(如果客户端提供此功能),看该域名的解析过程和结果。
  4. 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 模式下尽量减少其影响。
  5. fake-ip 模式导致某些应用不兼容:

    • 问题表现: 特定游戏、P2P 软件、内网访问应用等无法正常工作。
    • 原因: 这些应用可能依赖于获取真实的 IP 地址,而 fake-ip 模式返回的是虚假 IP。
    • 解决方法:
      • 将不兼容的应用或域名设置为 DIRECT: 在 Clash 规则中,将这些应用的流量或相关的域名/IP 地址配置为 DIRECT,使其不走代理,从而避免 fake-ip 的影响。
      • 考虑使用 redir-host 如果不兼容的应用是核心需求且无法通过规则绕过,可能需要考虑切换到 redir-host 模式,但需要做好应对 DNS 污染的配置。

排查问题时,仔细查看 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,并确保这些域名的规则设置为 DIRECTMATCH 到直连代理。
  • 优化 fallback-filter 仔细维护 fallback-filterdomain 列表,只添加那些已知或高度怀疑被污染的域名。过于庞大或不准确的列表可能会影响性能或导致误判。结合 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 污染吧!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部