Skip to content

Clash使用说明 #8

Description

@zhongfly

本文试图用尽量简单的语言,向有理解能力的读者介绍clash的使用,但并不能保证每位读者都可以完全理解。
我十分希望读者有基础的英语阅读水平,用于阅读所涉及工具的文档。
我给出的一些定义或者解释并不完全正确,但力图在不犯错误的前提下简单介绍。

前言

我希望正在阅读的您,知道机场/节点/代理协议这些基础的概念。本文的介绍有一定的局限,因为我只在windows及android平台上使用过clash类软件。

有时我会使用引用格式(就像现在这样),来提供一些背景知识或者额外的提示

Clash是什么

Clash从狭义上来讲是仅指Clash内核的,它是一个支持多种代理协议的代理客户端,它可以在多个平台直接运行以提供本地代理服务;从广义上讲,所有使用Clash内核的代理软件统称为Clash,在后文中需要强调区别时我会使用 Clash类软件来称呼,由于Clash内核是命令行工具(CLI),直接使用的话并不方便,所以诞生了各种图形界面软件(GUI),它们大大简化了Clash的使用。

细心的人可能注意到了,我对Clash的定位是代理客户端,人们(用户)在自己的设备上运行这些软件来使用代理,而不是运行在服务器上为用户提供各种代理协议的服务端(机场主使用的)。打个比方,厨师(提供服务的人)用锅铲炒菜给客人吃,锅铲是“服务端软件”,它用于给食客提供服务(菜品),食客(客户)用筷子和碗吃饭菜,筷子和碗是“客户端软件”,是使用服务的工具。例如shadowsocks就是一种代理协议,同时还提供了相应的专用客户端如shadowsocks-windowsshadowsocks-android,而用于提供shadowsocks代理服务的服务端有shadowsocks-libev

但我依然希望大家严格区分Clash内核与它的图形界面软件,图形界面软件只是帮助大家使用Clash内核而已,为Clash内核套上了方便操作的“控制面板”,是Clash内核在干活、帮你把流量发给节点。假如你希望Clash支持某种代理协议,那你应该等待Clash内核支持这种代理协议。

图形界面软件只是好看的“外皮”,是帮你给Clash内核下命令的秘书/监工,Clash内核才是默默干活的打工人

目前,常用的图形界面有Clash for Windows(支持windows/macOS)、Clash For Android(Android)等

Clash的最大特点就是用一个文件来保存所有配置,包括所有节点、策略组、分流规则等,这使得任何一个Clash类软件都可以在导入相同的配置文件后,就导入了所有的设置(节点、策略组、分流规则等)并且获得几乎相同的代理体验。

另一个主要特点就是分流,如同一名娴熟的分拣机器人将进入Clash的流量按规则分到不同的流量出口(例如直连/代理节点A/代理节点B等),你可以增加合适的规则使国内网站全部不走代理,同时让 Netflix的流量 自动使用支持NF解锁的代理节点A,让 disney+ 使用支持disney+解锁的代理节点B,并且其余普通境外网站自动走另一个代理节点C。

之前的代理客户端如shadowsocks-android,在同一个时间只能使用一个节点,例如你选中了节点A,你不再次手动更改的话它就会一直使用A节点,对流量的分流处理只有2种:1)不走你使用的节点,即直连;2)走你使用的节点,即代理。简而言之是个二元判断题:是/否。新一代的代理客户端分流更加详细,是个选项众多的选择题,可以详细控制哪个网站具体走哪一个节点或者走直连,同时使用多个节点也是可能的。

Clash的版本

Clash是开源项目,依据公开的项目源码,编译得到的是开源版内核。
但作者有部分增强功能的代码并不愿意公开,开源版内核+增强功能=premium内核,一般称之为闭源版内核或者P核,下载地址固定为https://github.com/Dreamacro/clash/releases/tag/premium 不变。
premium内核中增加的功能有TUN(虚拟网卡,实现系统全局代理)、Script(使用python3语言,通过编程的方式自定义分流)、Script Shortcut(在rule模式里使用Script类型的分流规则)、Rule Providers(引用外部的规则)、Tracing。
对应大部分用户,开源内核已经可以满足需求。

Clash的分流逻辑

Clash有3种常用分流模式,1)direct,即所有进入Clash的流量都是走直连;2)global,全局,即所有进入Clash的流量都是走某个特定出口,例如直连、xx代理节点;3)rule,规则模式,即我们常用的基于规则进行分流。
还有一种使用门槛较高的Script模式(premium内核才有的功能),请自行研究学习

我强调了Clash的分流只是处理进入Clash的流量,一个软件的流量如果压根不进入Clash的话,当然无法被Clash分流。因此Clash中的“全局”模式只是指Clash所有的流量都全走一个出口,Clash里的全局而已

使用clash时的流量走向图:
流量走向图

Clash的规则

规则模式是基于规则进行分流,一个规则包括条件满足条件的流量该去哪
规则有优先级区别,上一行的规则优先于底下所有行的规则

我们可以把clash看成是一个分拣邮件的机器人,它按照我们告诉它的规则,来把流量送到不同的地方去

它阅读规则时,从上往下按顺序检查流量到底满足哪条规则,”第1条规则匹配吗?不匹配;第2条规则匹配吗?不匹配……第x条规则匹配吗?匹配!“,于是按照第x条规则,把流量送到指定的出口

条件有很多种类型,比如域名、ip地址、端口、流量来源的程序名等,我们就以最简单的规则为例简单介绍

DOMAIN-SUFFIX,google.com,proxy-group-A

用英文逗号分隔成3部分,第一个部分是规则的类型:DOMAIN-SUFFIX,即匹配域名后缀的规则,具体条件是google.com,结合类型,即域名后缀是google.com的网站流量就会命中此规则,第三部分就是流量命中规则的去向,此处是proxy-group-A即代理组A。这条规则的意思就是“域名后缀是google.com的网站流量会走代理组A中的节点”,至于具体是代理组A中的哪个节点,就由代理组A自己来决定。

总结:规则将流量分配到指定的代理组或直连/拒绝连接,代理组会根据不同的策略来选择流量具体走某个节点。

代理组是许多个具有相同特征的节点们的集合,例如你可以把日本地区的节点都放在同一个代理组里,然后命名为日本节点组。

下面介绍常用的规则类型

域名类型的规则

  1. DOMAIN 域名和规则中的域名完全相同时,就匹配该规则。
    例:DOMAIN,ad.com,REJECT
    流量的域名是ad.com时匹配该规则,如果域名是addddd.comaaaaad.comwww.ad.comad.com.cn都是不匹配的
    可以看出,这个规则的覆盖范围太小,适合精确匹配某些特殊的域名。如果只使用这种规则,面对多种情况,需要用多个精确的域名来匹配,很容易导致规则过长,影响可读性。

  2. DOMAIN-SUFFIX 域名后半部分(后缀)和规则中的域名完全相同时,就匹配该规则。
    例:DOMAIN-SUFFIX,ad.com,REJECT
    流量的域名是ad.comwww.ad.com666.ad.com时都匹配该规则,如果域名是addddd.comaaaaad.comad.com.cn都是不匹配的

  3. DOMAIN-KEYWORD 只要域名包含规则中的字符(或者称为关键词)时,就匹配该规则。
    例:DOMAIN-KEYWORD,ad,REJECT
    流量的域名是ad.comadddddd.comaaaad.comwww.ad.comad.com.cn都是匹配的,因为它们都包含关键词ad;假如域名是a666d.com,则不匹配
    可以看出,这个规则的覆盖范围太广,有可能误杀无关域名,建议谨慎使用

GEOIP规则

根据ip所属的国家/地区来分流
例:GEOIP,CN,DIRECT 把ip属于国家/地区代号为CN(即中国)的流量,使用直连

MATCH

最特殊的规则,它是必须有的规则,必须在规则的最末尾,意思是,如果上面的所有规则都不匹配,那就按这条规则分流
例:MATCH,DIRECT 如果所有规则都不匹配,那么这个流量就直连

阅读文档,了解更多类型的规则官方wiki 第三方wiki详细解释

Clash的代理组

待完成

Clash配置中的一些重要设置

待完成

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions