掌握 Clash Verge:自定义规则设置全攻略
前言:为何需要自定义规则?
在使用代理工具时,我们通常会直接导入一个订阅链接,然后选择一个节点即可开始科学上网。这对于许多基础用户来说已经足够。然而,随着使用场景的复杂化——例如,有些网站需要直连才能访问(比如国内银行、游戏服务器),有些流量希望走特定的代理节点(比如观看特定地区的流媒体),有些流量需要彻底屏蔽(比如广告、恶意网站),或者希望优化访问速度和稳定性——简单地“全局代理”或“规则模式”可能就无法满足需求了。
这时,自定义规则设置就显得尤为重要。Clash Verge 作为基于 Clash 内核的跨平台代理客户端,提供了强大且灵活的规则配置能力。通过精确地控制每一条网络连接该“走”哪个“通道”(代理、直连、拒绝),我们可以构建一个高度定制化、效率更高的网络环境。
本文将带你深入探索 Clash Verge 的规则体系,从基础概念到高级应用,手把手教你如何掌握自定义规则的艺术,打造专属于你的网络流量管家。
第一部分:理解 Clash 的规则基础
在深入自定义规则之前,我们必须先理解 Clash(以及 Clash Verge)如何处理网络流量。Clash 是一个基于规则的代理客户端,它的核心工作原理是:
- 捕获流量: Clash 通过系统代理或其他方式(如 TUN 模式)捕获设备的网络连接请求。
- 匹配规则: 对于每一个连接请求(例如访问某个域名或 IP 地址),Clash 会按照配置文件中定义的规则列表,从上到下逐条进行匹配。
- 执行动作: 一旦连接请求匹配到某条规则,Clash 就会立即执行该规则指定的动作(也称为策略或 Policy)。
Clash 的规则体系主要由以下几个核心概念构成:
- 规则 (Rule): 定义了匹配网络连接的条件(如域名、IP、地理位置等)以及匹配后执行的动作(策略)。
- 策略 (Policy): 定义了匹配规则后对流量采取的具体处理方式。常见的策略有:
Proxy
/Proxy Group Name
: 将流量导向一个特定的代理节点或一个代理组。DIRECT
: 让流量直接通过,不使用任何代理。REJECT
/REJECT-TINYPEAK
/REJECT-DNS
: 拒绝或屏蔽流量。
- 策略组 (Policy Group): 将多个代理节点或策略组合在一起,形成一个可供规则引用的逻辑单元。策略组可以实现负载均衡、自动选择最优节点、手动切换节点等功能。规则通常不会直接指向单个代理节点,而是指向一个策略组,这样可以方便地管理和切换节点。
规则匹配的顺序至关重要! Clash 会从规则列表的第一条规则开始尝试匹配,如果匹配成功,就执行该规则对应的策略,不再继续往下匹配。只有当前规则不匹配时,才会继续尝试下一条规则。因此,规则的排列顺序直接决定了流量最终会走向何处。一般来说,越具体、越优先处理的规则应该放在越靠前的位置。
第二部分:Clash Verge 中的规则配置入口
Clash Verge 作为 Clash 内核的图形化界面,提供了相对友好的配置方式。虽然某些规则可以通过图形界面进行简单的添加和修改,但要实现复杂的、大规模的自定义规则配置,直接编辑配置文件 (config.yaml) 仍然是最灵活和强大的方式。
- 找到配置文件: 在 Clash Verge 界面中,通常可以找到一个选项用于打开配置文件夹或者直接编辑配置文件。点击这个选项,会打开 Clash Verge 当前使用的配置文件的位置。这个文件通常命名为
config.yaml
。 - 编辑配置文件: 使用任何文本编辑器(如 VS Code, Sublime Text, Notepad++ 或系统自带的记事本)打开
config.yaml
文件。 - 规则部分: 在
config.yaml
文件中,找到rules:
后面的部分。这里列出了所有的规则。每一条规则占据一行,采用 YAML 格式书写。
重要提示: YAML 格式对缩进非常敏感,请务必使用空格进行缩进,并且保持缩进的一致性。通常使用 2 个或 4 个空格作为一级缩进。编辑前最好备份原始文件,以防修改错误导致 Clash Verge 无法启动。
第三部分:深入各类规则详解
Clash 支持多种规则类型,每种类型用于匹配不同特征的网络连接。理解这些规则类型是自定义配置的关键。以下是 Clash 中常用规则类型的详细介绍:
1. 基于域名的规则
这类规则根据访问的域名进行匹配。
-
DOMAIN-SUFFIX,hostname,policy
:- 说明: 匹配指定域名及其所有子域名。例如,
DOMAIN-SUFFIX,google.com,Proxy
将匹配google.com
,www.google.com
,mail.google.com
等。这是最常用的一种域名匹配规则。 - 应用场景: 代理某个网站及其子域名(如国外社交媒体、视频网站),或者直连某个特定服务的所有子域名(如国内云服务商)。
- 示例:
“`yaml
# 代理所有 Google 域名下的流量- DOMAIN-SUFFIX,google.com,Proxy
直连所有 Baidu 域名下的流量
- DOMAIN-SUFFIX,baidu.com,DIRECT
“`
- 说明: 匹配指定域名及其所有子域名。例如,
-
DOMAIN,hostname,policy
:- 说明: 精确匹配指定的域名。例如,
DOMAIN,www.google.com,Proxy
只匹配www.google.com
,不匹配google.com
或mail.google.com
。 - 应用场景: 只对某个特定子域名进行处理。不如
DOMAIN-SUFFIX
常用,除非需要非常精确的匹配。 - 示例:
“`yaml
# 只代理 www.youtube.com 的流量- DOMAIN,www.youtube.com,Proxy
“`
- DOMAIN,www.youtube.com,Proxy
- 说明: 精确匹配指定的域名。例如,
-
DOMAIN-KEYWORD,keyword,policy
:- 说明: 匹配域名中包含指定关键词的连接。例如,
DOMAIN-KEYWORD,youku,DIRECT
将匹配www.youku.com
,v.youku.com
,m.youku.com
,youku.cdn.com
等任何包含 “youku” 关键词的域名。 - 应用场景: 匹配域名中包含特定品牌或服务的域名,适用于某个服务使用了多个不规则域名的场景。但可能误伤其他包含相同关键词的域名,使用时需谨慎。
- 示例:
“`yaml
# 直连所有包含 “tencent” 关键词的域名(可能匹配 QQ, 微信, 腾讯视频等相关域名)- DOMAIN-KEYWORD,tencent,DIRECT
“`
- DOMAIN-KEYWORD,tencent,DIRECT
- 说明: 匹配域名中包含指定关键词的连接。例如,
-
FULL-MATCH,hostname,policy
:- 说明: 与
DOMAIN
类似,但通常用于匹配完整的主机名,包括末尾的点(FQDN)。在实际应用中与DOMAIN
的区别较小,不如DOMAIN
常用。
- 说明: 与
2. 基于 IP 地址的规则
这类规则根据目标服务器的 IP 地址进行匹配。
-
IP-CIDR,ip/cidr,policy[,no-resolve]
:- 说明: 匹配指定 IP 地址范围 (CIDR)。例如,
IP-CIDR,192.168.1.0/24,DIRECT
将匹配所有访问192.168.1.0
到192.168.1.255
范围内的 IP 地址的流量。 - 应用场景: 直连局域网、国内常用 IP 段,或者代理特定国外 IP 段。非常有用且高效。
no-resolve
参数(可选): 如果加上这个参数,Clash 在处理这条规则时将不会尝试解析域名到 IP。这对于避免 DNS 污染或循环解析问题有时很有用,但通常情况下不需要加。- 示例:
“`yaml
# 直连所有私有 IP 段的流量 (局域网)- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
代理某个特定的 IP 段
- IP-CIDR,1.2.3.0/24,Proxy
“`
- 说明: 匹配指定 IP 地址范围 (CIDR)。例如,
-
IP-CIDR6,ip/cidr,policy[,no-resolve]
:- 说明: 与
IP-CIDR
类似,用于匹配 IPv6 地址范围。 - 应用场景: 处理 IPv6 流量。
- 示例:
“`yaml
# 直连所有本地链路 IPv6 地址- IP-CIDR6,fe80::/10,DIRECT
“`
- IP-CIDR6,fe80::/10,DIRECT
- 说明: 与
-
SRC-IP-CIDR,ip/cidr,policy
/SRC-IP-CIDR6,ip/cidr,policy
:- 说明: 根据源 IP 地址匹配规则。这通常用于在路由器或网关上运行 Clash 时,根据不同的客户端设备(源 IP)应用不同的策略。
- 应用场景: 在局域网环境中为特定设备设置不同的代理规则。对于普通桌面用户较少使用。
- 示例:
“`yaml
# 来自 192.168.1.100 的流量走代理- SRC-IP-CIDR,192.168.1.100/32,Proxy
其他流量直连
- IP-CIDR,0.0.0.0/0,DIRECT # 注意这里的顺序
“`
3. 基于地理位置的规则
这类规则根据目标 IP 地址所属的国家/地区进行匹配。
GEOIP,country_code,policy[,no-resolve]
:- 说明: 匹配目标 IP 地址属于指定的国家或地区代码(两字母大写,如 CN 代表中国,US 代表美国)。Clash 使用内置的 IP 地理位置数据库进行判断。
CN
是一个特殊的代码,通常用于匹配所有非中国大陆的 IP。要匹配中国大陆的 IP,可以使用GEOIP,CN,policy
。 - 应用场景: 最常见的用途是区分国内和国外流量,实现国内直连、国外代理。非常高效且维护成本低。
no-resolve
参数(可选): 同IP-CIDR
。- 示例:
“`yaml
# 对于所有非中国大陆的 IP,走代理(通常放在前面)- GEOIP,CN,DIRECT
其他(通常就是中国大陆的 IP)直连(通常放在后面)
- MATCH,Proxy # 或者 DIRECT,取决于 GEOIP,CN 的策略
``
GEOIP,CN,DIRECT
*注意:*匹配的是**中国大陆以外**的 IP,并将其设置为直连。这听起来可能与直觉相反,但这是 Clash 的约定。如果你想匹配**中国大陆内部**的 IP 并将其直连,规则应该是
GEOIP,CN,DIRECT并且此规则需要放在判断是否需要代理的规则**之前**。更直观的理解是
GEOIP,CN是一个**匹配中国大陆 IP** 的规则条件,而后面的
policy是匹配到该条件后执行的动作。所以
GEOIP,CN,DIRECT` 的意思是匹配到中国大陆 IP,就直连。
- 说明: 匹配目标 IP 地址属于指定的国家或地区代码(两字母大写,如 CN 代表中国,US 代表美国)。Clash 使用内置的 IP 地理位置数据库进行判断。
4. 基于进程名的规则
这类规则根据发起网络连接的应用程序进程名进行匹配。
PROCESS-NAME,process_name,policy
:- 说明: 匹配发起连接的进程的可执行文件名(不含路径)。例如,
PROCESS-NAME,firefox.exe,Proxy
将匹配所有由 Firefox 浏览器发起的连接。 - 应用场景: 实现按应用代理或直连,例如只代理浏览器流量,游戏走直连;或者屏蔽某个应用的联网。
- 示例:
“`yaml
# 让 QQ 音乐直连- PROCESS-NAME,QQMusic.exe,DIRECT
让 Steam 游戏直连
- PROCESS-NAME,steam.exe,DIRECT
让 Clash Verge 本身直连,避免代理自身
- PROCESS-NAME,Clash Verge.exe,DIRECT
让某个需要代理的应用走代理
- PROCESS-NAME,Telegram.exe,Proxy
“`
- 限制: 在某些系统或模式下(如 TUN 模式),可能无法 reliably 获取进程名,或者所有流量都可能显示为 Clash 的进程名。此规则的有效性取决于具体的操作系统和 Clash 的运行模式。在 Windows 上通常比较有效。
- 说明: 匹配发起连接的进程的可执行文件名(不含路径)。例如,
5. 规则集 (Rule Set / Rule Provider)
直接在 config.yaml
中列出所有规则会使得文件非常庞大且难以维护,特别是当规则数量达到几百上千条时。规则集(Rule Set 或在配置文件中称为 Rule Provider)允许我们将一组相关的规则定义在单独的文件中,然后在主配置文件中引用它们。这极大地提高了配置的可维护性和模块化。
规则集通常定义在 rule-providers:
部分,然后在 rules:
部分引用。
rule-providers:
定义:- 说明: 在这个部分定义一个或多个规则集。每个规则集需要指定名称、类型、来源等信息。
- 类型 (
type
):file
: 规则集内容位于本地文件中。http
: 规则集内容通过 HTTP/HTTPS 从一个 URL 获取。script
: 规则集内容通过执行一个脚本生成(高级用法)。
- 来源 (
url
或path
):http
类型使用url
指定下载地址。file
类型使用path
指定本地文件路径(相对于 Clash 数据目录)。
- 格式 (
format
): 指定规则集文件的格式,通常是yaml
或text
。推荐使用yaml
格式,规则集文件内容与config.yaml
中的rules:
部分格式相同。 - 间隔 (
interval
, 仅http
): 指定 Clash 自动更新规则集的时间间隔(如86400
秒代表一天)。 - 行为 (
behavior
): 指定规则集的行为,常见有domain
(包含域名规则),ipcidr
(包含 IP 规则),classical
(包含所有规则)。根据规则集文件的内容选择合适的行为,这会影响 Clash 如何加载和匹配规则。 - 示例:
yaml
rule-providers:
# 一个用于屏蔽广告的规则集,从 URL 下载
ad-rules:
type: http
url: "https://example.com/clash/adblock.yaml" # 替换为实际的规则集 URL
interval: 86400 # 每天更新
behavior: classical # 这个规则集可能包含域名和IP规则
format: yaml
# 一个用于国内直连的规则集,从 URL 下载
direct-cn-rules:
type: http
url: "https://example.com/clash/direct-cn.yaml" # 替换为实际的规则集 URL
interval: 86400
behavior: classical
format: yaml
# 一个本地的自定义规则集
my-custom-rules:
type: file
path: ./rules/my_custom_rules.yaml # 规则文件在 config.yaml 同级目录下的 rules 文件夹内
interval: 3600 # 每小时检查文件是否更新(可选,file类型通常无需 interval)
behavior: classical
format: yaml
- 在
rules:
中引用:- 说明: 定义好规则集后,可以在
rules:
部分使用RULE-SET,规则集名称,policy
的格式来引用。 - 示例:
“`yaml
rules:
# 先执行广告屏蔽规则- RULE-SET,ad-rules,REJECT
# 然后判断国内直连 - RULE-SET,direct-cn-rules,DIRECT
# 然后执行我自己的自定义规则 - RULE-SET,my-custom-rules,Proxy
# … 其他规则 …
# 最后是全局匹配规则 - MATCH,Proxy # 或者其他默认策略
“`
- RULE-SET,ad-rules,REJECT
- 优点: 使用规则集可以清晰地组织规则,方便更新(特别是 HTTP 类型),减少主配置文件的长度,并且可以利用社区维护的、高质量的规则列表。
- 说明: 定义好规则集后,可以在
6. 最终匹配规则 (Fallback)
MATCH,policy
:- 说明: 这条规则必须放在规则列表的最后。如果前面的所有规则都没有匹配到当前连接,那么就会匹配到这条
MATCH
规则,并执行其指定的策略。 - 应用场景: 作为默认处理规则,通常设置为代理(
Proxy
或某个代理组)或直连(DIRECT
),取决于你的主要使用习惯。 - 示例:
“`yaml
rules:
# … 其他规则 …- MATCH,Proxy # 将所有未匹配到前述规则的流量导向 Proxy 组
“`
- MATCH,Proxy # 将所有未匹配到前述规则的流量导向 Proxy 组
- 重要:
MATCH
规则必须有,且必须是规则列表的最后一条。
- 说明: 这条规则必须放在规则列表的最后。如果前面的所有规则都没有匹配到当前连接,那么就会匹配到这条
第四部分:策略 (Policy) 的选择与配置
规则的策略部分指定了流量的处理方式。除了前面提到的 Proxy
, DIRECT
, REJECT
,策略通常指向一个策略组 (Policy Group)。
策略组在 proxy-groups:
部分定义。通过策略组,我们可以实现更灵活的路由:
- 自动选择 (url-test): 定期测试组内节点,选择延迟最低的节点。
- 负载均衡 (load-balance): 在组内节点间轮流分配流量。
- 故障转移 (fallback): 按顺序尝试组内节点,如果当前节点不可用,则切换到下一个。
- 手动选择 (select): 在图形界面中手动选择组内节点。
示例策略组配置 (config.yaml 的 proxy-groups:
部分):
“`yaml
proxy-groups:
– name: Proxy # 这个组的名字会在规则中引用
type: select # 手动选择节点
proxies:
– 🇭🇰 香港节点 A # 引用 proxy-providers 或 proxies 中的节点名字
– 🇹🇼 台湾节点 B
– 🇸🇬 新加坡节点 C
– DIRECT # 策略组中也可以包含 DIRECT 或 REJECT 策略
# 策略组中也可以引用其他策略组
– Fallback Group
-
name: Fallback Group # 另一个策略组
type: fallback # 故障转移
proxies:- 🇺🇸 美国节点 D
- 🇯🇵 日本节点 E
- DIRECT # 组内节点都不可用时,最终直连
-
name: AdBlock # 广告屏蔽策略组,通常用于 RULE-SET
type: select # 虽然是 AdBlock,但策略组类型通常是 select/url-test/fallback,这里只是为了展示策略组可以包含 REJECT
proxies:- REJECT # AdBlock 组内只包含 REJECT 策略
规则中引用策略组:
rules:
– RULE-SET,ad-rules,AdBlock # 将匹配广告规则的流量导向 AdBlock 策略组,该组最终指向 REJECT
– GEOIP,CN,DIRECT # 国内 IP 直连
– MATCH,Proxy # 其他流量导向 Proxy 策略组(可以在 GUI 中手动选择节点)
“`
通过策略组,你可以方便地管理大量节点,并根据规则将不同类型的流量导向不同的策略组,从而实现精细化的流量控制(例如,Netflix 流量走对 Netflix 优化过的节点组,普通网页浏览走延迟最低的节点组,下载流量走带宽最大的节点组等)。
第五部分:构建自定义规则的步骤与技巧
现在我们了解了规则类型和策略,可以开始构建自定义规则了。
基本步骤:
- 确定目标: 你想让哪些流量走代理?哪些直连?哪些屏蔽?(例如:国内网站直连,国外网站代理;屏蔽某个视频网站;某个应用始终直连等)
- 分析流量特征: 目标网站的域名是什么?IP 地址范围?是哪个应用发起的连接?
- 选择合适的规则类型: 根据流量特征选择最匹配、最高效的规则类型(
DOMAIN-SUFFIX
对于网站最常用,IP-CIDR
和GEOIP,CN
对于国内直连非常高效,PROCESS-NAME
对于应用控制很有用)。 - 确定策略: 流量匹配后应该执行什么动作?是代理到哪个策略组?还是直连
DIRECT
?还是屏蔽REJECT
? - 编写规则条目: 按照
RULE_TYPE,VALUE,POLICY
的格式编写规则。 - 安排规则顺序: 将编写好的规则条目按照从上到下的匹配逻辑进行排列。记住“具体优先于通用”的原则。例如,某个特定域名需要直连,但其上级域名需要代理,那么特定域名的直连规则必须放在上级域名的代理规则之上。通常的顺序是:
- 最特殊的、必须优先处理的规则 (如特定应用的直连/代理)
- 广告、恶意网站等屏蔽规则 (
REJECT
) - 国内 IP 直连规则 (
GEOIP,CN,DIRECT
,IP-CIDR
国内段) - 国内常用网站直连规则 (
DOMAIN-SUFFIX
/DOMAIN
国内网站) - 国外特定服务代理规则 (
DOMAIN-SUFFIX
/DOMAIN
流媒体、社交媒体等) - 使用规则集引用的规则 (
RULE-SET
) - 最后一条必须是
MATCH
规则作为默认处理。
- 编辑
config.yaml
: 打开配置文件,在rules:
部分添加或修改规则。注意 YAML 格式和缩进。 - 保存并重载配置: 保存
config.yaml
文件。在 Clash Verge 界面中找到“重载配置”或“应用配置”的按钮点击。 - 测试验证: 访问相关的网站或使用相关的应用,检查流量是否按照预期进行处理。可以使用 Clash Verge 的连接日志功能查看每个连接匹配到了哪条规则以及执行了什么策略。
实用技巧:
- 利用 Clash Verge 的日志功能: Clash Verge 通常有“连接日志”或“实时日志”功能。开启它,你可以看到每个连接的域名、IP、匹配到的规则以及使用的策略。这是调试规则顺序和排除故障的强大工具。
- 使用规则集 (Rule Providers): 对于大量的规则(如广告屏蔽列表、国内域名列表),强烈建议使用
RULE-SET
引用外部或本地规则集文件。这使得主配置文件更简洁,规则更新也更方便。社区中有很多维护好的 Clash 规则集资源可以利用。 - 备份配置: 在修改
config.yaml
之前,务必备份。如果修改出错导致 Clash Verge 无法启动,可以将备份文件恢复。 - 注释规则: 在
config.yaml
中使用#
符号添加注释,说明每条规则或规则块的作用,方便日后回顾和修改。 - 循序渐进: 不要一次性添加大量规则。先添加少量关键规则,测试通过后再逐步添加和完善。
第六部分:常见自定义规则场景示例
以下是一些常见的自定义规则应用场景及其对应的规则示例:
1. 国内网站直连,国外网站代理
这是最基本也是最重要的场景。核心是利用 GEOIP,CN
和国内常用 IP 段规则。
yaml
rules:
# 将国内常用 IP 段直连 (推荐使用规则集)
- RULE-SET,direct-cn-ip,DIRECT # 假设 direct-cn-ip 规则集包含了大部分国内 IP 段
# 将国内常用域名直连 (推荐使用规则集)
- RULE-SET,direct-cn-domain,DIRECT # 假设 direct-cn-domain 规则集包含了大部分国内网站域名后缀
# 非中国大陆 IP 直连 (根据 Clash GEOIP 库,GEOIP,CN 匹配中国大陆 IP)
- GEOIP,CN,DIRECT # 匹配到中国大陆 IP,就直连
# 其他未匹配到的流量(通常是国外流量)走代理
- MATCH,Proxy # Proxy 是你的主要代理策略组
注意: 这里的 GEOIP,CN,DIRECT
是关键。它告诉 Clash,如果连接的目标 IP 是中国大陆的,就直连。因为 Clash 的规则是按顺序匹配,并且一旦匹配成功就不再往下,所以这条规则通常放在处理国内流量的规则集的后面,但放在处理所有剩余流量的 MATCH
规则的前面。这样,如果流量是国内 IP 或国内域名(通过规则集匹配),它会直连;如果不是国内 IP (但可能是国内域名,已经被规则集处理了),或者既不是国内 IP 也不是国内域名,那么它会继续往下匹配,直到最后的 MATCH
规则。
2. 特定应用直连或代理
根据应用进程名控制流量。
yaml
rules:
# QQ 音乐直连
- PROCESS-NAME,QQMusic.exe,DIRECT
# Steam 游戏直连
- PROCESS-NAME,steam.exe,DIRECT
# Telegram 走代理
- PROCESS-NAME,Telegram.exe,Proxy
# ... 其他规则 ...
- MATCH,Proxy
注意: 进程名规则通常放在规则列表的前面,以便优先处理特定应用的流量。
3. 屏蔽广告和恶意网站
使用规则集引用 AdBlock 列表。
yaml
rules:
# 引用广告屏蔽规则集,并导向 REJECT 策略
- RULE-SET,ad-rules,REJECT # 假设 ad-rules 规则集包含了广告域名和 IP
# ... 其他规则 ...
- MATCH,Proxy
4. 特定流媒体服务走指定节点组
将对某个流媒体服务的访问流量导向一个特定的策略组,该组包含对该服务优化的节点。
“`yaml
proxy-groups:
– name: Netflix Group # 专门用于 Netflix 的策略组
type: select # 或者 url-test 选择最优 Netflix 节点
proxies:
– 🇺🇸 美国 Netflix 节点 A
– 🇭🇰 香港 Netflix 节点 B
# … 其他 Netflix 节点 …
rules:
# 将所有 Netflix 相关的域名流量导向 Netflix Group
– DOMAIN-SUFFIX,netflix.com,Netflix Group
– DOMAIN-SUFFIX,nflxvideo.net,Netflix Group
# … 其他 Netflix 相关域名 …
# … 其他规则 …
– MATCH,Proxy # 其他流量走默认代理组
“`
5. 屏蔽某个特定网站或 IP
直接使用 REJECT
策略。
yaml
rules:
# 屏蔽某个域名
- DOMAIN,malicious-site.com,REJECT
# 屏蔽某个 IP 段
- IP-CIDR,93.184.216.34/32,REJECT # 例如屏蔽某个恶意 IP
# ... 其他规则 ...
- MATCH,Proxy
6. 绕过局域网内的访问
确保对局域网 IP 的访问直连。
yaml
rules:
# 直连所有私有 IP 段的流量 (局域网) - 通常由规则集处理更方便
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
# 直连本机流量
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR6,::1/128,DIRECT
# ... 其他规则 ...
- MATCH,Proxy
注意: 这些局域网直连规则通常放在所有其他规则的前面,以确保局域网通信不会被代理。
第七部分:排查与解决问题
在自定义规则时,可能会遇到各种问题,例如:
- 某个网站无法访问。
- 某个应用无法联网或行为异常。
- 规则似乎没有生效。
- Clash Verge 无法启动。
排查步骤:
- 检查
config.yaml
格式: 使用在线 YAML 格式检查工具检查你的配置文件是否存在语法错误。YAML 对缩进非常敏感,这是最常见的错误来源。 - 查看 Clash Verge 日志: Clash Verge 的日志是排查问题的关键。查找错误信息,特别是关于加载配置文件或处理连接的日志。如果日志显示配置加载失败,说明
config.yaml
有语法错误。 - 查看连接日志: 使用 Clash Verge 的连接日志功能,查看出现问题的连接(域名、IP),它是匹配到了哪条规则,以及执行了什么策略。这可以帮助你判断是规则编写错误、规则顺序错误,还是策略组配置问题。
- 检查规则顺序: 回顾规则列表,确认出问题的连接理论上应该匹配哪条规则,以及它实际匹配到的规则是否正确。记住“从上到下,一旦匹配成功就停止”。
- 检查规则值: 确认规则中的域名、IP 段等值是否正确。例如,域名的拼写错误,CIDR 范围错误等。
- 检查策略组配置: 如果规则指向一个策略组,检查该策略组是否存在、名称是否正确、组内是否包含了有效的代理节点或策略。
- 检查代理节点状态: 确认你使用的代理节点是否可用。节点本身的问题会导致指向该节点的规则失效。
- 逐步简化配置: 如果问题复杂,可以尝试暂时移除部分自定义规则,只保留少量基本规则和
MATCH
规则,看问题是否解决。通过逐步添加规则来定位是哪条规则导致了问题。 - 清除 DNS 缓存: 有时 DNS 缓存会导致旧的 IP 地址影响规则匹配。尝试清除系统和应用的 DNS 缓存。
- 重启 Clash Verge 或设备: 有时候简单的重启可以解决临时的配置加载或网络问题。
常见错误及对策:
- YAML 缩进错误: 导致配置加载失败。使用空格缩进,保持一致性,使用 YAML 验证工具。
- 规则名称或值错误: 规则无法匹配。仔细检查域名拼写、IP 段、进程名等。
- 策略名称错误: 规则指向不存在的策略组或策略。检查
proxy-groups:
部分的名称是否与规则中的名称一致。 - 规则顺序错误: 流量被错误的规则匹配。重新调整规则顺序,“具体”规则放在“通用”规则之前。例如,屏蔽规则通常放在前面,特定应用/域名的直连/代理规则放在需要处理的流量之前,
MATCH
规则放在最后。 GEOIP,CN
理解错误: 记住GEOIP,CN
条件匹配的是中国大陆的 IP。GEOIP,CN,DIRECT
意味着匹配到中国大陆 IP 就直连。要区分国内外,通常将GEOIP,CN,DIRECT
放在处理国内域名的规则之后、处理国外流量或MATCH
规则之前。
第八部分:获取高质量规则集资源
自己手动编写和维护所有规则是非常困难的。幸运的是,社区维护了许多高质量的 Clash 规则集,涵盖了广告屏蔽、国内常用域名/IP、流媒体、特定应用等。
你可以在 GitHub 等平台上搜索关键词,例如 “Clash rules”, “Clash rule provider”, “Clash rule list” 等,找到适合你的规则集项目。选择那些更新频繁、Star 数量多、维护者活跃的项目。
找到规则集 URL 后,按照本文第四部分介绍的方法,在 rule-providers:
中定义并引用即可。
结论
掌握 Clash Verge 的自定义规则设置,就像为你的网络连接赋予了大脑和指挥官。通过精心配置规则,你可以告别简单的“一刀切”代理模式,实现更智能、更高效、更安全的网络流量管理。无论是优化访问速度、绕过地域限制、增强隐私安全,还是屏蔽烦人的广告,自定义规则都能提供强大的支持。
虽然一开始接触 config.yaml
和各种规则类型可能会觉得有些复杂,但通过理解其基本原理(匹配顺序、规则类型、策略)并结合实践和日志调试,你将逐渐熟练掌握这项技能。大胆尝试,从简单的规则开始,逐步构建属于你的完美 Clash 配置吧!利用好社区提供的规则集资源,将大大降低你的维护成本。
Clash 的规则世界广阔而强大,深入探索它,你将发现前所未有的网络控制力。祝你在自定义规则的旅程中顺利前行!