Clash 配置文件基础
Clash是一个基于规则的跨平台网络代理工具,支持诸如Shadowsocks/V2Ray/Trojan等协议,功能强大,界面美观。
与传统的网络代理工具不同,Clash需要依赖配置文件(其他软件也得用,所以这话相当于废话)但是Clash不像一般的代理工具,无法在图形化前端上直接配置,不够直观,也就劝退了一堆小白。
好在,对于机场及付费服务用户来说,只要导入机场提供的订阅Url就完事了;对于自建用户,网络上也有很多“订阅转换”工具,能够满足基本要求。
然而,如果需要更好的个性化设置,那么只能对Clash的配置文件进行处理才能更好的让Clash**“为我所用”**。
(Q:Clash For Windows没有中文么?A:要不第三方汉化版,要不Google翻译去,总有一款适合你)
Clash的配置文件基于Yaml格式,也正应此,配置文件可读性很高。
Yaml有如下优点:
- 大小写敏感
- 缩进只能使用空格(不能用tab)
- 以缩进指示层级关系
- 支持注释(因此比json可读性就高了不是一星半点)
闲话少叙,下面进入正题。
(Ps:本文使用模板文件来自此处)
Clash配置文件分成多段,
首先是客户端设置:
1 | port: 7890 |
这是一些基础选项,
port与socks-port无须多论,就是本地的http及socks5代理端口(
allow-lan:允许局域网共享,设置成true时发挥作用
bind-address:当allow-lan设置true时发挥作用,设置”*”时绑定所有ip(包括v4及v6)
当然也可以单个v4或者v6。
mode:相当于Shadowrocket(或者桌面版ss/ssr/v2rayn)的模式
可选rule(按规则放行)/Global(全局走Clash)/Direct(全不走Clash)
log-level:日志选项
可选silent(完全不输出日志)/warning(仅warning等级日志)/error(仅error等级日志)/info(正常输出)/debug(调试模式/嘈杂模式,输出最详细)
external-controller:用不着不管(不是很懂)
experimental:实验性功能
ignore-resolve-fail:忽略DNS解析失败(默认开)
Hosts设置:
1 | hosts: |
这里支持通配符,但是请注意静态(即完整域名)优先级是高于使用通配符的域名的。
(即定义了*.example.com又定义了foo.example.com会优先考虑foo.example.com)
(神马?不会用Hosts?Pls Google it.)
然后是DNS设置:
1 | dns: |
enhanced-mode设置为fake-ip或者redir-host模式
(以下内容来自某段网络资料)
如果是不使用 Fake-IP 的 redir 情况下,由于操作系统、浏览器或者应用程序中的任何一个缓存了 DNS 解析结果,因此 TCP 连接可以直接根据缓存的解析结果的 IP 建立,代理客户端并没有预先收到对应的 DNS question。在这种情况下,代理客户端有可能直接将这个连接视为和 IP 连接而不是和域名连接,根据域名规则的分流可能就会因此失效,不过根据 IP 分流的规则没有失效。
如果为了避免域名分流规则失效,你可以设法阻止操作系统或者浏览器缓存 DNS 解析结果,这样每次建立 TCP 连接之前都会发送 DNS question 使代理客户端探测到域名。但是这意味着每次 TCP 连接建立都需要代理客户端进行一次 DNS 解析请求(当然代理客户端可以对 DNS 解析进行缓存避免出现延时激增)。
Fake-IP 模式下,浏览器、应用程序都是对 Fake IP 发起连接,如果没有代理客户端对连接进行重新封转,那么这部分流量就不能被发往真实的目的 IP,因此所有流量都必须经过代理客户端,而根据端口、设备的分流就需要由代理客户端自己实现。(PS:坏处也是有的,如果Clash崩了你的网就全断了)
下面的fake-ip-filter:虚假ip过滤器(过滤本地地址)
这玩意的用处:比如不处理qq的快速登录(原理:QQ/TIM本地客户端打开服务器与网页交互)(腾讯远端可没这个服务器)或者Tplink路由器的Tplogin.cn,网件路由器的routerlogin.net等。
nameserver:设置DNS(支持DNS-over-TLS以及DNS-over-HTTPS)
fallback:当选择全部不可用时,故障恢复。
然后是Proxies一节(虽然鬼都不会手填)
1 | proxies: |
在这里我们手动定义了一个Shadowsocks服务器。
name:不用说都明白
type:ss表示是个Shadowsocks服务器。
以下都很好懂
udp:是否允许udp连接。
当然V2Ray 和Trojan也可以
1 | - name: "v2ray" |
(友情提示:请勿打开skip-cert-verify(跳过证书验证)否则会带来严重安全性问题:比如来自GFW的MITM(中间人攻击))
(不过一般都不会手填,要不然,,)
接下来是代理组策略:
可以在此定义切换节点,它与下一节的Rule(策略)都很重要。
假设你已经在上一节(proxies)定义过了
- HK2
- HK1
- US1
- TW1
- KR1
这五个节点
Clash共四种代理方式:分别是自主选择,延迟最低,故障转移,负载均衡
自主选择:
1 | proxy-groups: |
name不用多讲
type为select表示自选,
proxies以下内容为存在于此组内的节点列表。
关于自选很简单,比如我们选择了HK1这个节点,那么所有分流到这组的都需要走HK1这个节点。
延迟最低:
1 | - name: "LowDelay" |
type:模式选择
在这里使用了url-test模式
(以下内容摘自某Clash文档)
很多刚接触这类分流软件的用户往往会犯一个常识性错误,那就是当他们得知自动选择是自动选择一个最快的节点,就很可能认为这个策略组选择的是速度最快的节点,然而显然不是如此。自动选择选出的节点是批量测延迟过后延迟最低的那个节点,而非许多人认为的速度最快的节点。clash没有内置一个策略组类型以供获取速度最快的节点。
根据我的理解,自动选择将选出组内一个能连的上且延迟最低的节点,这个节点不一定速度快,也不一定稳定,但是毫无疑问是这次批量测延迟中延迟最低的节点。
(比如iplc本来是给你打游戏用的,去下Google Drive还拉满速度岂不是多少有点那啥)
补充:这种低延迟的节点特别适合给Telegram或者Whatsapp用(尤其是语音通话的时候);或者是游戏用(低延迟硬性要求)
比如在Telegram/Clubhouse开语音电话的时候延迟太高这语音电话就会非常不稳定(乃至听了半天一句话听不到,无疑是非常致命的)
其他选项说明:
interval:间隔时间,单位秒(s)
tolerance:批量检测完后切换节点所需的延迟差
比如:
第一次:
| HK1 | HK2 | TW1 |
|---|---|---|
| 300 | 350 | 345 |
(延迟,单位毫秒(ms),下同)
过了300秒,第二次检测:
| HK1 | HK2 | TW1 |
|---|---|---|
| 325 | 300 | 325 |
因为 325 - 300 = 25 < 75
所以不做切换(仍旧保持HK1节点)
又过了三百秒,第三次:
| HK1 | HK2 | TW1 |
|---|---|---|
| 400 | 275 | 310 |
因为 400 - 275 = 125 > 75
所以切换至HK2节点。
故障转移:
这个模式与自动选择逻辑相近:都用测延迟选择节点,区别在与选择模式;
1 | - name: "Fallback" |
type:模式选择;这里选择了failback模式
interval:同上
说明:
第一次(当你夜里用不稳定的移动光纤家宽上网)
| HK1 | HK2 | TW1 |
|---|---|---|
| No Response | 1000 | 1500 |
(延迟,单位毫秒(ms))
此时选择HK2节点
过了三百秒第二次检测:
| TW1 | HK1 | HK2 |
|---|---|---|
| 450 | 375 | 1500 |
此时依旧选择HK2节点联网
又过了三百秒:
| TW1 | HK1 | HK2 |
|---|---|---|
| 300 | 290 | No Response |
此时才会使用HK1节点
此模式虽有用但不一定完全可用
(延迟高到10^3ms可用吗?)
负载均衡:
与前面的工作方式也很类似,同样测延迟,但是并非只是单独一个节点,而是不同网站使用不同节点。
1 | load-balance: |
type为load-balance表示此(负载均衡模式)
url及interval见上。
这也就是为何称作“负载均衡”:不同流量不同代理,(理论)可以减轻服务器负载。
stragery:关键参数;
选项有叁:
- 不填
- consistent-hashing
- round-robin
第二项大致是对于同一个ip/网址下的请求都使用同一个节点。
(比如Google只用Hk1)
C项则是轮换;(爬虫事务有效——一直用一个节点会被拉清单的)
(友情提示:如果你的机场禁止批量测速/测延迟,那么以上三种策略请勿使用,否则会因为违反TOS被机场拉清单)
链式代理:
简单讲就是套娃;
比如你在校内找到了无线网,但是无线网需要认证啊,
这时候你发现不认证的时候校内有一台机器可以直连,这时候你“挪为私用”,在上面配置好Nodejs与npm,装好了SS-nodejs(ps:电信网直连npm不算慢)
可是你的机场只用v2ray啊,他不支持前置代理,这就很内啥,,
这时候Clash的链式代理就可以出场了。
1 | - name: "OUTSIDE" |
“出口”当然是你的自己搭建的ss
“自选”就是你选定的连接外网的节点组。
(ps:安全性很抱歉我们不能确保,就像你搭的SS如果被学校抓了,很难说不会出一个处分。这个问题不是一个clash客户端该讨论的,而是相对于这个协议来讨论的)
接下来是Rule部分:
这一部分可以说是Clash的关键:
Clash 是一款用Go 语言编写的、基于规则的隧道(Tunnel )程序,它支持多种加密通信协议和跨平台
1 | Rule: |
此句定义了一个规则:
DOMAIN-SUFFIX:按域名前缀匹配,此处即”*.google.cn”
DIRECT:直连
1 | - DOMAIN-KEYWORD,twitter,自选 |
DOMAIN-KEYWORD:以关键词匹配,本例中匹配“twitter”(即凡是遇到twitter都走“自选”)
1 | - USER-AGENT,niconico*,自选 |
USER-AGENT:用useragent字符串进行匹配;(在本例中凡是遇到有niconico就走“自选”)
1 | - DOMAIN,www.flash.cn,REJECT |
DOMAIN:对www.flash.cn精准匹配
REJECT:拒绝连接
1 | - IP-CIDR,91.108.4.0/22,LowDelay,no-resolve |
IP-CIDR:此句为CIDR语法
,可以使用此计算器来确定范围。
no-resolve:告诉Clash不要去尝试解析来匹配这条规则,只处理「直接IP 访问」的请求。
1 | - MATCH,Final |
该句只能放在末尾,指定漏网之🐟该走哪个代理。
通过结合以上内容可以很方便的拉出来一份代理清单。
Such As Telegram:
1 | - DOMAIN-SUFFIX,t.me,PROXY |






