# 订阅预处理

# 0.功能说明

因为订阅中预配置的分流规则可能无法满足个性化需求,如果需要对规则进行定制的同时避免被覆盖,就需要用到 Clash For Windows 的订阅预处理功能。

# 1.功能入口

订阅预处理的入口位于:Profiles > 右键单击订阅配置 > Parsers > Edit Parsers ,点击后会弹出代码编辑区域。 Yaml 格式代码对于缩进和空格有着严格的要求,后续务必留意。

# 2.代码格式解析

下面是一个订阅预处理的配置模板,展示它的目的是为了更好的解释和说明代码结构,不要将它直接复制到 Clash 中。

parsers: # array
  - url: https://sub.rssp.link/sub?target=clash&url=https://ss.reiz.link/sub/114514/clash&insert=false
    yaml:
      prepend-rules:
        -  DOMAIN-SUFFIX,adobe.io,REJECT
        -  DOMAIN,prod.adobegenuine.com,REJECT
        -  DOMAIN-SUFFIX,adobestats.io,REJECT
        -  DOMAIN,hz1.reizhi.com,DIRECT
      append-proxy-groups:
        -  name: relay-from
           type: select
           proxies:
             -  DIRECT
             -  故障转移1.1-1.4
      commands:
        -  proxies.(🇭🇰 [4.0x]广港专线-6).udp=true

该段配置的顶层为 parsers ,它包含一个 url 和一个 yaml 。其中 yaml 又包含 prepend-rules , append-proxy-groupscommands 三个对象。而这三个对象的值由数组组成。

如果对于数据结构感到难以理解,可以直接复制高亮部分(1-3行)到 Clash 中,并将 url 修改为你自己的订阅地址。

该段代码中, url 部分用于指定后续规则所应用的订阅地址。所以如果你主动在网站更换了订阅地址,此处的 url 也需要留意修改。

yaml 区块中的部分是实际的自定义规则区块,我们需要用到的订阅预处理操作有以下几种:

操作
prepend-rules 在头部插入新规则
append-proxy-groups 在头部插入新代理组
prepend-proxy-groups 在尾部插入新代理组
commands 修改指令

其他如 append-proxiesmix-proxy-providers 等可以自行了解如何使用。

# 3.分流规则格式

在 Clash 中分流规则每行一条,格式为:匹配方式,匹配值,操作

匹配方式主要有以下几种,必须大写:

匹配方式 对应含义 举例
DOMAIN-SUFFIX 后缀匹配 a.com 能够匹配 1.a.com , 不能匹配 1.a.com.cn
DOMAIN 完全匹配 a.com 不能匹配 1.a.com
DOMAIN-KEYWORD 关键字匹配 ad 能够匹配 1.qadc.com
PROCESS-NAME 进程名匹配 qq.exe 能够匹配 qq 这款程序

匹配值上面其实已经介绍到了,即你需要符合什么样条件时,触发这条规则,如 example.com 。

操作是当这条规则匹配成功时,如何处理对应流量。主要有以下几种:

操作 对应含义
DIRECT 直连,不走代理
REJECT 阻止,不允许访问
🔰 节点选择 走对应的代理组,需要切实存在
🐟 漏网之鱼 同上

下面我们来看几个例子,以便于理解:

DOMAIN-SUFFIX,dd.com,DIRECT > 所有 dd.com 为后缀的域名都直连,如 dd.com , 1.dd.com 。

DOMAIN,ads.cc.com,REJECT > 阻止访问 ads.cc.com 这个域名,但不影响 1.cc.com 。(通常用于拦截广告)

DOMAIN-KEYWORD,fff,🔰 节点选择 > 所有包含 fff 的域名,都走节点选择代理组,如 afff.com 1.fffx.net 。

最后,Clash 中的分流规则自上而下进行匹配,当符合时就会执行对应的操作,不再向下搜索。如:指定一条规则设置 1.com 直连,再后面指定第二条规则设置 1.com 阻止,最终会走直连。

# 4.添加自定义规则

yaml 区块下空两格并增加 prepend-rules: 区块,就可以开始添加自定义规则了。同样的,每一行规则需要再空两格,并以 - 开头。(参考第2节中的示例)

# 5.代理组说明

在 Clash 中,每一个代理组包含若干个代理,且必须手动或自动选择其中一个。在网络流量命中不是 DIRECTREJECT 的规则时,对应的流量会被发往这条规则中所设定的代理。

同样我们举例以便于理解,假设代理组 🔰 节点选择 包含以下几条规则:

DOMAIN-SUFFIX,adobe.io,REJECT
DOMAIN,prod.adobegenuine.com,REJECT
DOMAIN-SUFFIX,adobestats.io,REJECT
DOMAIN,reizhi.com,🔰 节点选择
DOMAIN,1.reizhi.com,🐟 漏网之鱼

同时代理选择如下:

🔰 节点选择 > 服务器A
🐟 漏网之鱼 > 服务器B

那么,访问 1.adobe.io 的请求会被禁止(表现为打不开),访问 reizhi.com 的请求会走服务器A进行代理,访问 1.reizhi.com 的请求会走服务器B进行代理。

# 6.追加代理组

与分流规则不同,代理组的排序先后不会有任何区别。所以这里可以根据个人喜好选择 append-proxy-groups 在最前插入代理组或是 prepend-proxy-groups 在最后追加代理组。

这里我们以追加到末尾为例,展示对应的代码段:

append-proxy-groups:
  -  name: relay-from
      type: select
      proxies:
        -  DIRECT
        -  故障转移1.1-1.4

其中 Name 为代理组的名称,可以自由设置,但与分流规则中需要对应。例如设置了分流规则 DOMAIN,a.com,测试分组 ,那么就需要存在对应名为“测试分组”的代理组。

type 在这里暂时只介绍 select ,即手动选择。其他可设置的值还有:relayfallback 等。

proxies 为本代理组可以选择的服务器列表,除了通用的 DIRECTREJECT 外,还可以加入订阅中已有的代理组,如 🔰 节点选择

# 7.修改指令

commands 用于对已有的订阅配置进行修改,这里不做详细介绍,以配置模板为例做简要的解释说明。

proxies.(🇭🇰 [4.0x]广港专线-6).udp=true

本条指令的作用是在代理( proxies )中,将名为( 🇭🇰 [4.0x]广港专线-6 )的代理的 udp 属性,改为支持( true )。

需注意修改指令中不能包含空格,如代理组或代理的名称中包含空格时,需用括号进行包裹。