Clash作为一款功能强大的代理客户端,其核心魅力之一在于其高度灵活且精细的流量分流能力,这主要通过“规则”(rules)来实现。规则就是告诉Clash,面对不同的网络请求,应该如何处理:是直连、是走代理、还是拒绝连接。

什么是Clash规则?

Clash规则本质上是一系列指令,它们被定义在Clash的配置文件(通常是YAML格式)中,用于指导Clash根据不同的条件匹配网络连接,并对匹配到的连接执行相应的策略(如使用哪个代理、直连还是拒绝)。

核心构成:条件与策略

每条Clash规则都包含两个主要部分:

  • 条件(Condition):用来识别流量的特征,例如目标的域名、IP地址、所属国家/地区,甚至发起连接的进程。
  • 策略(Policy):指定如何处理满足条件的流量,比如将其发送到特定的代理服务器、让它直接通过网络连接、或者直接阻止它。

常见的规则类型 (Rule Types)

Clash支持多种规则类型,以便进行多维度的流量匹配:

  • DOMAIN: 精确匹配单个域名,例如 DOMAIN,google.com,PROXY 会精确匹配 google.com
  • DOMAIN-SUFFIX: 匹配某个域名及其所有子域名,例如 DOMAIN-SUFFIX,google.com,PROXY 会匹配 google.commail.google.comdocs.google.com 等。
  • DOMAIN-KEYWORD: 匹配包含特定关键词的域名,例如 DOMAIN-KEYWORD,google,PROXY 会匹配任何包含“google”的域名。
  • IP-CIDR: 匹配特定IP地址或IP地址段(使用CIDR表示法),例如 IP-CIDR,192.168.1.0/24,DIRECT 会匹配 192.168.1.0192.168.1.255 范围内的所有IP。可以加上 no-resolve 选项避免域名解析。
  • GEOIP: 根据IP地址的地理位置信息(国家/地区代码)进行匹配,例如 GEOIP,CN,DIRECT 会匹配所有分配给中国的IP地址。这是非常常用的直连规则类型。
  • PROCESS: (部分Clash内核支持) 根据发起网络连接的进程名进行匹配,例如 PROCESS,firefox.exe,PROXY 会让Firefox的流量走代理。
  • MATCH: 这是一个特殊的“万能”规则,通常放在规则列表的末尾。它匹配所有未被前面规则匹配到的流量。例如 MATCH,PROXY 会将所有剩余流量导向代理。

可用的策略 (Policies / Policy Groups)

规则中的策略部分指定了流量的处理方式,它们可以是:

  • PROXY: 将流量发送到配置文件中定义的某个代理服务器。
  • DIRECT: 让流量直接通过,不经过任何代理。
  • REJECT: 拒绝连接,阻止流量通过。
  • 通常,策略会指向一个策略组(Policy Group),策略组可以包含多个代理、DIRECT、REJECT等选项,用户可以在Clash客户端中切换策略组,从而动态改变匹配到该规则的流量走向(例如在多个代理节点之间切换)。

为什么需要使用Clash规则?

使用Clash规则的主要目的是实现精细化的流量控制和分流,而非简单地将所有流量一股脑儿地通过代理或全部直连。

提升网络效率与体验

并非所有流量都需要代理。例如,访问国内网站、局域网资源等,直连通常更快、更稳定。通过规则,可以让国内流量直连,国外流量走代理,从而优化整体上网体验。

绕过代理限制

有些服务或网站可能检测代理或对来自特定IP段的访问有限制。通过将这些服务的流量设置为直连,可以绕过这些问题。

安全与隐私考量

敏感应用的流量可能需要强制走代理或直连。规则可以确保特定应用的流量走向符合你的预期。

广告和恶意网站屏蔽

通过将已知广告服务器或恶意网站的域名/IP设置为REJECT策略,可以在网络层面屏蔽这些内容。

特定应用需求

某些应用可能与代理不兼容,或者需要强制直连。使用PROCESS规则可以针对特定应用进行设置。

总而言之,规则赋予了Clash区分和智能处理不同流量的能力,是其强大功能的基础。

Clash规则写在哪里?从哪里获取?

规则的书写位置

Clash规则主要定义在Clash核心的配置文件中。在YAML格式的配置文件里,规则列表通常放在一个名为rules:的顶级键下。它是一个有序的列表,Clash会按照列表的顺序从上往下匹配流量。

# YAML配置文件片段示例

rules:

  • DOMAIN-SUFFIX,google.com,PROXY
  • DOMAIN-SUFFIX,youtube.com,PROXY
  • GEOIP,CN,DIRECT
  • MATCH,PROXY

规则的获取来源

你可以自己手动编写规则,但这对于复杂的场景非常耗时且容易出错。更常见的方式是从以下来源获取规则列表:

  • 在线规则列表仓库:许多开源社区维护着针对不同需求的Clash规则列表,例如屏蔽广告、分流国内外流量等。这些列表通常托管在GitHub等平台上。
  • 规则生成器/订阅转换服务:一些在线工具可以帮助你生成或合并自定义规则,或者将其他格式的规则转换为Clash兼容的格式。
  • Rule Providers (规则提供者):这是Clash高级特性,允许你在配置文件中指定一个远程URL,Clash会自动从该URL下载并更新规则列表。这样可以实现规则的自动化管理和更新。

规则数量或复杂度有限制吗?

理论上,Clash对规则的数量或复杂度没有硬性的严格限制。你可以拥有数百甚至数千条规则。

  • 数量:常见的规则列表可能包含几百到几千条规则。Clash核心设计上能高效处理大量规则。
  • 复杂度:规则类型、组合和策略组的使用可以使配置变得相当复杂,以满足各种精细的分流需求。例如,一个复杂的配置可能包含多种GEOIP规则、大量域名后缀规则以及多个嵌套的策略组。

然而,实际使用中,过多的规则或过于复杂的规则结构可能会轻微影响Clash的启动速度或运行时匹配效率(尽管影响通常很小,难以察觉),更重要的是会极大地增加配置文件的维护难度。因此,推荐使用规则提供者和模块化的配置来管理大量规则。

Clash规则是如何工作的?如何编写一条规则?

规则的工作原理:顺序匹配与“首胜”原则

Clash处理网络连接时,会按照rules:列表中规则定义的顺序,从上到下依次尝试匹配当前连接的特征(域名、IP等)。

  • 一旦某个规则的条件与当前连接匹配成功,Clash就会立即停止向下匹配,并根据该规则指定的策略来处理这个连接。
  • 这就是“首胜”原则:第一条匹配成功的规则决定了连接的命运。

理解这一点非常重要,因为它决定了规则列表的顺序至关重要。通常,更具体、更精细的规则应该放在列表靠前的位置,而更宽泛或兜底的规则(如GEOIP,CN,DIRECTMATCH,PROXY)应该放在后面。

例如,如果你把MATCH,PROXY放在第一条,那么所有流量都会直接匹配到它并走代理,后面的所有具体规则都将失效。

如何编写一条Clash规则 (语法)

手动编写规则遵循简单的语法:RULE_TYPE,VALUE,POLICY,OPTIONS

  • RULE_TYPE: 规则类型 (如 DOMAIN-SUFFIX, IP-CIDR, GEOIP 等)。
  • VALUE: 规则类型对应的匹配值 (如 google.com, 192.168.1.0/24, CN)。
  • POLICY: 用于处理匹配流量的策略或策略组的名称 (如 PROXY, DIRECT, REJECT 或你自定义的策略组名称如 海外节点)。
  • OPTIONS: (可选) 规则的额外选项,例如 no-resolve 用于 IP-CIDR 规则。

每个部分之间用逗号,分隔。整条规则作为rules:列表中的一个项目,前面通常有-符号。

# 规则编写示例

  • DOMAIN-SUFFIX,ad.com,REJECT # 拒绝所有 ad.com 及其子域名的连接
  • IP-CIDR,10.0.0.0/8,DIRECT,no-resolve # 直连内网地址,且不尝试解析域名
  • GEOIP,US,我的美国节点组 # 所有流向美国IP的流量使用名为“我的美国节点组”的策略组
  • PROCESS,steam.exe,DIRECT # Steam客户端的流量直连
  • MATCH,漏网之鱼代理组 # 所有前面未匹配的流量,走“漏网之鱼代理组”

利用Rule Providers 管理复杂规则集

对于大量规则,手动维护YAML列表变得困难。rule-providers:功能应运而生。它允许你定义一个或多个规则提供者,每个提供者指向一个远程规则列表文件。

  • 在配置文件中定义 rule-providers: 部分,指定提供者的名称、类型、URL、更新间隔等。
  • rules: 部分,通过 RULE-PROVIDER,provider_name 的形式引用这些提供者。

Clash启动时或按照指定间隔,会自动下载并加载这些远程规则列表。这样可以保持你的主配置文件简洁,并将不同类别的规则(如广告规则、国内规则、国外规则)分块管理,便于更新和复用。

# Rule Provider 示例片段

rule-providers:

  reject-list:

    type: http

    behavior: domain # 或 ipcidr

    url: “http://example.com/rules/reject.txt”

    interval: 86400 # 每天更新一次

rules:

  • RULE-PROVIDER,reject-list # 引用上面定义的拒绝列表
  • DOMAIN-SUFFIX,google.com,PROXY
  • GEOIP,CN,DIRECT
  • MATCH,PROXY

behavior 字段告诉Clash这个提供者提供的规则类型,以便进行优化处理。domain 适用于域名规则(DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD),ipcidr 适用于IP规则(IP-CIDR, GEOIP)。

如何测试和排查规则问题?

调试规则是配置Clash时常见的需求。

  • 查看日志:Clash核心通常会输出连接日志,显示每个连接尝试匹配规则的过程以及最终应用的策略。仔细阅读日志是了解规则是否按预期工作的最直接方式。
  • 客户端界面:许多Clash图形客户端提供了流量监控或连接列表功能,可以实时看到每个连接的目标地址以及它最终使用的策略。这能快速帮助你确认某个特定网站或应用的流量走向。
  • 网络工具:使用ping、traceroute等工具结合规则测试,可以间接验证流量路径。
  • 调整规则顺序:如果发现某个连接没有走预期的策略,很可能是因为它被列表上方的一条规则提前匹配了。尝试调整规则的顺序。
  • 简化规则:在排查复杂问题时,可以暂时注释掉大部分规则,只保留你想测试的关键规则和最后的MATCH规则,逐步增加复杂度。

掌握Clash规则的原理、类型、书写和管理方式,是实现高效、灵活代理体验的关键。通过合理配置规则,你可以让Clash更好地适应各种复杂的网络环境和个性化的使用需求。


clash规则