给CFW添加规则的N种方法

使用Clash的TUN/TAP模式为Emby进行代理的方式逐渐推广,但因规则问题使得无法准确代理Emby,故写下此教程。

本文将会尝试从帮助理解Clash规则入手,并辅以N种方式*来解决CFW规则添加问题。

*N种方式:表示很多种方式,忽略数量

教程中使用的Clash版本为v0.19.10,使用早于该版本的各方面细节可能不同,建议升级至最新版

理解Clash规则

以代理服务商最常用的分流模板为例,图中每一行都是一个代理组,点开各分组就会有节点列表,选中节点,当前展开的分组就会走这一个节点。

clash_proxy-groups

理解了这个概念,我们再看配置文件内的 Rules 部分。

clash_rules

红框代表匹配方式,有:DOMAINDOMAIN-SUFFIXDOMAIN-KEYWORD等等。

蓝框为匹配的域名,并会根据红框情况填写方式不同。

白框表示代理组名,根据红框与蓝框匹配到的内容,会通过该代理组控制流量去向。

以上就是Clash的一小部分基本概念,对所有Clash内核的软件均适用。虽然内容很少,但是足以达到代理Emby的目的了。

添加Clash规则

正如本教程标题所言,添加规则有N种方法,以下将从简到难全介绍,请读者按理解力自主选择。

为保护Emby服务器地址,此处相关地址以 https://termius.embyserver.media/ 为例,请在实际使用中自行替换为实际地址

DOMAIN-SUFFIX可以匹配任意次级域名,故使用 embyserver.media 即主域名做匹配,其他部分可以忽略,以此类推。

本教程使用🔰 节点选择作为Emby分流组使用,控制该组即可决定流量去向,可能部分用户不存在相应组,请根据实际情况选择你的分组。

手动添加规则

难度:⭐

缺点:每次更新规则都需要手动添加

  • 文本编辑

    右键当前正在使用的规则,选择 Edit,而后使用记事本打开,下拉到 rules 位置,在其下方新起一行添加规则,添加如下(注意保持缩进对齐)

    - DOMAIN-SUFFIX,embyserver.media,🔰 节点选择
    

    1_text

    如图 rules 下方第一行,保存即可,即可完成修改。

  • GUI添加

    右键当前正在使用的规则,选择 Rules,而后选择 Add,按图填写和选择:

    1_GUI

    填写和选择完毕后,点击 Add,再点击 Save,即可完成修改。

Mixin添加规则

难度:⭐⭐

优点:全局应用,无需每次修改

缺点:强制添加不便临时修改(mixin也不是为添加规则而设计的)

点击主界面左侧 General,点击Mixin右侧的齿轮打开编辑器。

2_mixin

编辑框内添加如下(如果 mixin 内已存在内容,请跟随至最后一行):

mixin: # 注意下面缩进
  rules:
    - DOMAIN-SUFFIX,embyserver.media,🔰 节点选择

添加完成后,点击右下角保存按钮,打开Mixin开关,随后重启Clash,即可完成修改。

Diff添加规则

难度:⭐⭐

优点:订阅更新时自动添加,无需手动修改

缺点:相比之下好像没什么缺点(

点击主界面左侧 Profiles,右键你正在使用的配置文件(必须为在线订阅的配置),选择 Diff,再选择 Init diff files

3_parser

在右侧编辑框内找到 rules 模块,添加如下(注意保持缩进对齐)

  - DOMAIN-SUFFIX,embyserver.media,🔰 节点选择

3_parser2

如图黄底样式,随后点击保存,而后更新一次订阅,即可完成修改。

Parsers添加规则

难度:⭐⭐⭐

优点:所有订阅更新时自动添加,无需手动修改

缺点:脚本写法理解困难

点击主界面左侧 Settings,依次滚动至Profile,点击 Parser右侧的Edit打开编辑器。

4_parser

编辑框内添加如下:

parsers: # array
  - reg: ^.*$
    yaml:
      prepend-rules:  # 添加Emby服务器分流规则
        - DOMAIN-SUFFIX,embyserver.media,🔰 节点选择

添加完毕后点击保存,而后更新一次订阅,即可完成修改。

检查规则是否添加

点击主界面左侧 Settings,右键先前修改的订阅,选择Rules,一般在第一条即可出现定义的分流规则。

check

添加规则常见错误

  • Could not switch to this profile!

    error1

    由于选择的配置文件中不存在 🔰 节点选择 分组,故无法使用。

    解决方法:将 🔰 节点选择 替换为选择的配置文件内存在的任意分组。

  • Error: A collection cannot be both a mapping and a sequence at line X, column X

    error2

    书写不遵守yaml语法,在 line X, column X 没有正确缩进导致配置文件无法保存。(图中为第3行没有缩进至rules层级下)

    解决方法:找到标识位置,缩进对齐,借助YAML在线格式化工具帮助纠正或学习YAML 入门教程手动纠正。

Parse添加规则与新建分组并过滤节点

难度:⭐⭐⭐⭐⭐

缺点:相比仅添加规则,还需要添加分组甚至学习正则表达式

添加规则同Parse添加规则,这里主要突出新建分组,以新建 ▶ Emby服 分组为例。

parsers: # array
  - url: <你的订阅地址>
    yaml:
      prepend-rules:  # 添加Emby服务器分流规则
        - DOMAIN-SUFFIX,embyserver.media,▶ Emby
      append-proxy-groups:  # 添加自定义组▶ Emby
        - name: ▶ Emby
          type: select
          proxies:
            - DIRECT
      commands:  # 向策略组添加节点
        # - proxy-groups.▶ Emby.proxies.1+[]proxyNames|(.*) # 添加所有节点
        - proxy-groups.▶ Emby.proxies.1+[]proxyNames|(0.\d+|1[Xx倍]) # 仅添加命名中存在'0.x或1x或1倍'字样的节点
        # - proxy-groups.▶ Emby.proxies.1+[]proxyNames|[Ee][Mm][Bb][Yy] # 仅添加命名中存在'Emby'字样的节点
        # - proxy-groups.▶ Emby.proxies.1+[]proxyNames|(^((?!HK|港|TW|台|SG|新加坡).)*$) # 仅添加命名中存在'港、台、新加坡'字样的节点

特别注意 commands,这里提供了四种匹配模式,请根据代理服务商的节点命名方式和个人喜好进行选择,该例中仅启用了第二种匹配模式(匹配0.x或1x或1倍节点),请按需解除和添加注释。可能会遇到无法匹配到的情况,请学习正则表达式 - 语法后结合自身情况填写匹配表达式。

保存后点击主界面左侧 Profiles,更改<你的订阅地址>对应的订阅配置,再点击 Proxies,即可在最下方找到▶ Emby代理组,通过控制该组节点即可实现代理与否(DIRECT或节点)、使用期望节点(本例为低倍率节点)的目的。

5_parser+

该方案还有Javascript写法,有兴趣的自行了解,不再赘述。

感谢

parser参数说明

parser正则订阅全匹配范例

parser正则节点过滤添加范例

results matching ""

    No results matching ""