上一篇文章里很多人想学怎么为 Clash 自定义教程,所以尽量快地写出来了。
只要利用好 gist 和订阅转换,为 Clash 添加规则并不难,既不用自己写工具,也不用自己买台服务器。
看完这篇文章,只需要短短 4 步,你就可以实现:
下面是正文,原文链接在 https://luxirty.com/article/custom-clash-rule 内容跟这里没区别,只多了一两句话
这一步仅仅是准备工作,你只需要跟着教程做就好,不需要在意细节,等看完整篇教程再回来关注细节也不迟。
打开 https://gist.github.com/ 创建一个新的 gist
为了方便理解,我们从一个非常简单的配置开始
把下面这个 gist 中的所有内容复制到你自己的 gist 里,然后点 create secret gist
完成之后来仔细查看一下这段配置文件,它实际上就只有两项配置:
# 定义了规则
ruleset=
# 定义了分组
custom_proxy_group=
暂时不需要关注更复杂的细节,下面会讲。
再新建一个 gist ,这个 gist 里写你自己需要代理的域名,一行一个。
格式如下:
DOMAIN-SUFFIX,google.com
如果想要指定 IP ,格式是
IP-CIDR,1.201.0.0/24,no-resolve
完成之后是这样:
https://gist.github.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5
以后想添加需要走代理的域名,修改这个 gist 就可以。
打开上一步创建的代理列表 gist ,点击 “raw”,把整段 URL 复制出来:
删掉“raw”后面的所有部分: https://gist.githubusercontent.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5/raw/yourlist.list 这里我保留了文件名,删掉也可以,随你喜欢,只要能打开就行。
回到第一步创建的 gist ,添加一行,其中后面的链接用上面得到的
ruleset=🚀 节点选择,https://gist.githubusercontent.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5/raw/yourlist.list
完成之后是这样(第 12 行是新添加的):
打开你平常爱用的订阅转换。
任意一个都可以,请不要发“偷订阅”之类的回复。
由于上个帖子有人恶意揣测,这里不贴链接和截图,自行 Google 。
打开之后先像平常一下在订阅链接里填上订阅。
重点来了。
打开第一步创建的 gist ,点击 raw ,一样把 URL 中 raw 后面的内容全部删掉,粘贴到“远程配置”一栏,注意,粘贴进去之后还需要在下拉框点击一下。
像平常一样点击生成订阅链接,到 Clash 中订阅,一切就完成了。
在这篇教程的例子中,我将 chatgpt 添加到了代理列表中,如果你还没理解如何做到的,请再看一下第二步创建的配置文件。
我相信你的好奇心和求知欲还想做更多操作,所以你应该会想看看官方文档:https://github.com/tindy2013/subconverter/blob/master/README-cn.md
subconverter 默认展开规则,但实际上 rule provider 的性能更好,在正文里没有提到这点是因为开启这个选项可能导致无法订阅,因为 clash 更新 provider 是通过直连。
如果有能力,最好还是使用 provider ,ip-cidr 和 domain 两种类型的 rule set 可以带来非常大的速度提升和内存节省,stash 的 wiki 里也有提到这一点,具体原因和解释可以看 https://t.me/AirixCloud/36
如果你觉得这个帖子有用的话,希望不要只点击收藏,可以回复来讨论或者提问,或者点一下标题下面的箭头,我更希望和各位有更加直接的交流,不需要担心自己提的问题过于简单,感谢~
原本不想吐槽的,结果回复里还是出现了。
这篇帖子的意义就在于说明 “subconverter 拥有远程配置功能,无需自行搭建也可以利用别人提供的 subconverter 实现自定义规则” 。
parsers、自行编辑脚本等方法最大的问题在于两点。一是 parsers 是 CFW 的功能而不是 clash 核心的功能,你定义好之后只能在 cfw 使用,在 android、 ios、路由器上就无法使用了。第二它不具备跨平台同步功能,你需要手动维护各个客户端上的规则,如果你只有一个设备这样使用当然没问题。
末尾提到 provider 只是为了给 有足够能力理解文章主要内容,并且想要优化内存占用和性能的人 准备的,如果连 Clash 的一些基本概念都没理解,暂时没必要关注这个。
Clash.Meta 的订阅转换功能是让他可以识别非 clash 格式的节点,本文的内容是 “如何利用订阅转换工具自定义分流规则”,#5 真的不是关键词机器人吗?
1
Moha 2023-06-17 09:43:26 +08:00
感谢分享
|
2
paststrange 2023-06-17 09:48:31 +08:00
airixcloud 所说的 rule-set 不要展开是啥意思
|
3
studyingss OP @paststrange “subconverter 默认展开规则,但实际上 rule provider 的性能更好”,所以推荐使用 provider
要了解 provider 可以看 clash 的官方文档 https://dreamacro.github.io/clash/premium/rule-providers.html 或者 https://lancellc.gitbook.io/clash/clash-config-file/proxy-provider 要让 subconverter 不展开规则,在订阅链接末尾加上&expand=false ,但是又可能导致订阅无法使用,原因正文说过了。 说得直观一点,就是打开配置文件,如果 rule 里全部都是域名和 ip ,那么规则就是展开的,这时性能非常差,并且占内存。 如果 rule 下面是 RULE-SET ,那么就叫做不展开,这时性能更好,匹配速度更快( 34 万规则 7 微秒),内存占用更小。 另外,rule set 也分类型,classic 没有优化作用,ip cidr 和 domain 有强力的优化作用,这部分具体还是看 https://lancellc.gitbook.io/clash/clash-config-file/proxy-provider 。 |
4
DemoJameson 2023-06-17 10:25:17 +08:00
如果用 Clash.Meta 内核也能从 rule provider 获益么
|
5
lekai63 2023-06-17 10:41:25 +08:00
现在完全切换到 clash meta 了。感觉不需要订阅转换了。
|
6
jiezhi 2023-06-17 10:41:55 +08:00 via iPhone
感谢分享 回去试试
|
7
canbingzt 2023-06-17 11:07:08 +08:00 via iPhone
我是用 parsers 来添加的
|
8
Helsing 2023-06-17 11:21:05 +08:00 via iPhone
|
9
studyingss OP @Helsing 你真的有看正文吗?
|
10
luckyjoe 2023-06-17 11:45:33 +08:00
收藏 有空了整
|
11
studyingss OP @Helsing 从你的回复我大致可以确定你完全不懂,但是为了以防可能的误解,以及你的回复误导别人,我针对你提出的两个问题详细解释一下。
第一个,关于 provider 参考 https://lancellc.gitbook.io/clash/clash-config-file/rule-provider classic 类型的 provider 的格式是 ``` payload: - '.blogger.com' - '*.*.microsoft.com' - 'books.itunes.apple.com' ``` domain 类型的 provider 的格式是 ``` payload: - DOMAIN-SUFFIX,google.com - DOMAIN-KEYWORD,google - DOMAIN,ad.com - SRC-IP-CIDR,192.168.1.201/32 - IP-CIDR,127.0.0.0/8 - GEOIP,CN - DST-PORT,80 - SRC-PORT,7777 ``` 你说的“订阅规则都不好找”是什么意思?你要说是找不到文件,配置文件里路径写的明明白白的,正常使用情况下也不用手动找。但是如果你的意思是“- DOMAIN-SUFFIX,google.com”比“.blogger.com”更容易看我觉得更奇怪。 第二,“不如搭建 subconverter”,你真的有搭建过吗?我搭建过。你知道自定义规则需要怎么做吗?依然需要写这个格式的配置。 对比来说,我的教程只是把自建的时候写到“配置文件”部分的内容,移动到了“外部配置”这部分,我很想知道你说的省心是指省心在哪里? 给其他人:关于这部分内容,可以参考 https://github.com/tindy2013/subconverter/blob/master/README-cn.md 或许你的语言表达有误,但是单从你的这一条回复来说是基本概念没有分清的状态。 |
12
azhangbing 2023-06-17 12:11:41 +08:00
这个非常有用 我用 clash for window 的 diff 很不好用 不会自动合并订阅的变化 每次要手动加
|
13
Helsing 2023-06-17 12:34:59 +08:00 via iPhone
|
14
dl123100 2023-06-17 12:37:57 +08:00
虽然远程配置就是加上&config=,但是因为出过 RCE ,明面上支持远程配置的 subcoverter 公益站不多吧,很多连上传配置功能实际都没法用。
|
15
studyingss OP @Helsing 手滑贴反了,那么请你回答一下两个问题?省心在哪里?又不方便看在哪里?
|
16
Helsing 2023-06-17 12:43:42 +08:00 via iPhone
@studyingss #11
要加自定义规则也很简单: 1. 熟悉 subconverter 的话,加一个 provider 并不比你这样操作麻烦多少 2. 如果不是在 openclash 这样的客户端用的话,桌面端基本都有 parser 可以添加规则,不比你这个要方便? |
17
hfl1995 2023-06-17 13:05:22 +08:00
ruleset=🎯 V2EX,https://raw.githubusercontent.com/lageev/chatgpt-openclash/main/v2ex.list
ruleset=🎯 Chatgpt,https://raw.githubusercontent.com/lageev/chatgpt-openclash/main/chatgpt.list 我平时需要自定义的就是 ChatGPT 和 V2 ,V2 节点要是选不好,容易进不去或者不显示头像 |
18
civelxu 2023-06-17 13:10:15 +08:00
Rule Provider 支持在 clashX 上使用吗?
Mac 上的 clash for windows 体验太差。 |
19
Hoshizora 2023-06-17 13:13:37 +08:00 via Android
meta 和 premium 内核不是支持代理和规则集的订阅吗? proxy-provider 和 rule-provider 一起使用会更方便啊,还能通过 clash 自身来管理订阅的更新,配置文件也跟简洁
|
20
thet 2023-06-17 13:21:29 +08:00 via iPhone
|
21
studyingss OP @Hoshizora 确实,你说的这个方法更好。
|
22
airbotgo 2023-06-17 15:00:53 +08:00
感谢楼主提供这么好的教程。对非程序员是一个很好的指导。
|
24
bobbyshmurda 2023-06-17 15:24:28 +08:00
看不懂,我还是用 V2RAY 3.29 版本号了。
|
26
beyondgamp 2023-06-17 22:25:38 +08:00 via iPhone
这个必须关注了
|
27
GoodRui 2023-06-17 22:56:11 +08:00 via Android 2
我是一直不理解,为什么只有苹果系的 APP ,qx 、surge 、loon 等采用订阅节点和规则分离的架构模式?其它平台的软件为什么就没有一个这种采用灵活架构的配置文件的软件啊? clash 真的难用,不过现在躺平了,只用机场自带的配置文件懒得折腾了,除非万不得已必须要用就手动从 clash 里。加两条规则,但是一更新配置就完蛋了。
|
28
chen7ie 2023-06-18 08:07:49 +08:00
@GoodRui 按照正常思维或者说“刻板印象”来看,我也觉得 ios 限制颇多,安卓应该有更牛逼更方便的 app 。最近买了个安卓手机双持,才发现还是 qx Loon 香啊
|
29
95276 2023-06-18 10:27:34 +08:00
|
30
Jaeden 2023-06-19 06:06:14 +08:00
楼主遇到过订阅转换失败吗,我之前用了 jsDriver 还是失败,换了个配置文件的地址就好了
|
31
hehehu 2023-06-19 10:38:01 +08:00
OP 可以帮我看下我这个场景的规则应该怎么配置吗? https://www.v2ex.com/t/949694
|
32
Hoshizora 2023-06-19 12:27:42 +08:00 via Android
@GoodRui #27 clash 的 rule provider 和 proxy provider 就是负责规则和代理分类
|
34
binghe 2023-06-20 03:02:46 +08:00
@thet clash 竟然还支持 AdGuard 的规则写法吗?我目前在用的是 clash for Windows ,不知道能否支持。
|
36
molezznet 2023-06-20 10:27:10 +08:00
请问下作者,用了这个 gist 和 list 组合后,是否可以替代删除掉以下文件中的 rules 了?
```当初随便拿来放临时配置的 gist 也有了 50 多个 star https://gist.github.com/miaomiaoclub/6947f7cb93846301f1658da0edcd61bf ``` |
38
Hoshizora 2023-06-22 13:48:15 +08:00 via Android
@635614874 #33 你可以订阅你自己的 rule ,然后在配置文件里用你自己的 rule 组名就行
|
39
ob 2023-06-24 22:43:26 +08:00
打扰下,第四步的,“打开之后先像平常一下在订阅链接里填上订阅。以及远程配置这个”,CFW 我没找着,是我姿势不对吗?能否帮忙详细描述下?谢谢
|
40
studyingss OP @ob 你需要打开的是订阅转换网站。
|
41
binghe 2023-07-02 21:54:06 +08:00
@studyingss subconverter 默认都没有 DNS 配置,再讲讲 DNS 配置方面吧。
|
42
studyingss OP @binghe
正确配置的规则应该完全不依赖 dns ,因为需要代理的连接在触碰到 ip rule 之前就被分流走了,dns 只用来偶尔负责兜底一些不在分流规则的网站。 关注 dns 配置的无非就是天天说 dnsleak 的人。 然而 dns 泄露是个伪命题,或者说这个用于 vpn 的名词根本没办法套用到需要分流的场景里。 举个简单的例子,假如不知道域名 A 该走代理还是直连,这个时候就需要做 dns 解析,那应该先用远程 dns 解析还是本地 dns 解析呢? 1. 用远程 dns ,会导致有海外 cdn 的网站分流错误,国内网站解析不到最优 cdn ,结果是显著影响国内网站的体验。 2. 用本地 dns ,就会出现所谓“dns 泄露”。 dns 泄露是 vpn 厂家发明出来的,他们的用户完全没有分流需求,要的就是极致的隐私保护,当然就不存在以上问题。用这种概念往分流代理工具上硬套完全就是庸人自扰。 上面这段话全是事实,教程当然可以写,但是如果实事求是把这些东西讲出来,天天发 dnsleaktest 截图那帮人就不爱听了,而不关注 dns 的其他用户又不会点,结果就是根本没人看。 y2b 上一帮哗众取宠的博主拿个概念唬小白,给出来个笑话一样的解决方案,骗到播放量跟粉丝完事,他们才不关心实际体验怎么样。 比方说某三字主播,给的方案是所有 ip rule 加上 no resolve ,那当然没泄露了,代价是所有 ip 规则的兜底作用全部废掉,用了他的规则之后,只要是没在域名列表里面的连接要么全直连要么全代理,全代理就是国内网站巨慢,全直连就是国外网站上不去。但他才不管,小白爱听就完事了。 |
43
binghe 2023-07-02 23:34:54 +08:00
@studyingss ok ,因为之前看到别人的配置文件,有些有 DNS ,有些则没有。然后用 subconverter 转换的,默认则全部没有加 dns ,我也感觉很奇怪,到底是 dns 是因为无法相对“通用”,所以默认生成的配置才没有。还是不是那么重要才没加上。
而我因为也不了解,自己收集了一份 ip 地址,倒是统统加上了 no-resolve 。然后转换链接经过 expend=false 后,生成规则则全部都自动去掉了 no-resolve ,变成如下。 ``` payload: - '129.146.102.194/8' - '129.146.46.164/8' - '129.146.48.191/8' ``` 我还在想着什么时候再问问。。。 看了你的回答后,我觉得还是跟着搞规则或者工具的人的步伐。 |
44
studyingss OP @binghe 如果你是说 subconverter 想转出来自带 dns 配置的话,有一个叫 clash 模板的配置,你可以写好然后指定一下。
去官方文档里面搜 clash_rule_base 就好。 转换之后会丢掉 no resolve 这个我也没找到好办法,如果对 clash 配置再熟悉一点的话,可以手写 rule 部分来实现,我目前是这样做的。 |
45
JimmyChan1506 2023-07-07 08:22:04 +08:00
可以当个无耻的伸手党吗? 楼主可否发一下生成的最终配置? 把订阅相关的东西去掉发出来?
@studyingss |
46
garyvalue 2023-07-09 09:42:39 +08:00
请问能实现这种需求吗
用户→机场 A 中转服务器→机场 A 落地服务器→机场 B 落地服务器 |
47
studyingss OP @garyvalue 如果 b 的落地你也有办法直接连上就可以
|
48
garyvalue 2023-07-09 13:54:42 +08:00
@studyingss #47 b 的落地可以直接连上,但是需要怎么操作呢,毕竟只能得到订阅链接
|
49
studyingss OP @garyvalue 这个问题问 Google 吧,已经有不少现成的教程了。
|
50
binghe 2023-07-15 00:40:39 +08:00
”subconverter 默认展开规则,但实际上 rule provider 的性能更好“
这句话的意思是不是: subconverter 默认会把所有规则写入配置文件,而造成性能相对下降。 |
51
RJY 2023-08-31 09:31:42 +08:00
感谢 OP ,按照这个方案搞定了 windows 设备间规则的同步。
|
52
RJY 2023-08-31 10:00:57 +08:00
感谢 OP ,刚想找到如何让 subconverter 如何不展开 rule ,就在回答里找到了答案。
|
53
RJY 2023-08-31 15:11:48 +08:00
查了一下,https://github.com/Dreamacro/clash/issues/1165 这条 issue 大概解释清楚了 rule-provider 三个 behavior 的区别。
---------------------------------------------------------------- 「 classical 是朴素的规则,支持其他所有的 rule ,但由于整个 rule 是一起的,所以当包含需要解析 dns 的规则时,整个 rule 被视为需要 dns 解析,所以要对 classical 做适当拆分(当然如果不在乎 dns 解析忽略即可) ipcidr 和 domain 是对大量的 ipcidr 和域名规则做优化,能在有大量规则的同时还保持着很快的匹配速度,当然这是以牺牲内存为代价换来的匹配速度(以目前的实现来说,几十万的规则大概占用几十兆内存)。台式机不在乎那点内存,但一些性能受限的设备可能很在乎。」 |
54
Temtselt 2023-11-17 10:23:06 +08:00
感谢楼主!
|
55
Mickeyy 2023-11-21 19:56:32 +08:00
感谢楼主,真的帮大忙了,小白还有个问题,这个 Gits 可以和本地的编译器之类的同步吗?每次改规则都要去 Github 有点麻烦
|
56
studyingss OP @Mickeyy vscode 里有个叫做 gist 的插件,我是用那个编辑的,感觉还不错。
|
57
zwyyy456 334 天前
@studyingss 有个问题请教一下,domain 模式的 rule-set ,"+.google.com" 会同时匹配 "google.com" 和 "www.google.com" 吗?
另外,规则文件其实不需要放在 gist ,完全可以自己建立一个 repo 把规则都放进去,可以通过 raw.githubusercontent.com 像 gist 那样直接下载文件。 |
58
zwyyy456 334 天前
以及,ip-cidr 类型的 rule-set ,例如 cncidr ,是在 cncidr 的文件里面加上 no-resolve 还是 RULE-SET,cncidr,DIRECT,no-resolve 呢?
|
59
z5238384 315 天前
楼主,你好,我完整 的看了你的思路,也阅读 了 subconverter 的文档,目前还是遇到些困难,个人小白一枚,只能求助:
情况: 1. 我的机场提供了一份完整的 clash 配置订阅文件。 2. 自己在原配置文件上增加了 一些分流规则,修改了配置文件头部的一些信息,目前是在 CFW 上使用 diff 来完成的。 期望目标: 我希望通过 subconverter 来实现:保留机场的完整 clash 配置,仅仅把我定义的规则和修改过的几项配置,每次刷新订阅,通过类似 CFW 中 diff 功能那样的合并方式,生成新的订阅链接。 目前想法: 使用机场完整的 clash 配置文件,作为 clash_rule_base 的参数。 但是机场 clash 的配置中,并没有使用 subconveter 中模板文件那样的 INJA 语法,base 文件中并不是这样的语法: 意味着我无法通过在外部配置文件中使用如下字段,设置 clash 头部的单项参数: [[template.local]] key = "clash.socks_port" value = "7891" 个人目前得出的结论是 subconverter 似乎并适合处理上述这种情况, 特来求助,有没有其他什么方式能实现我期望的目标。 万分感谢,写的罗里吧嗦,希望大佬不要介意。 |
60
gtshine 313 天前
我也希望能保留机场配置, 然后给 proxy-groups 中的某个 group.proxies 增加选择, 刚接触 subconverter. 文档看的头晕.
|
61
poterliu 212 天前 1
回复附言 2 ,是从这里 https://www.v2ex.com/t/1032535 看到这本贴。
|
62
dwu8555 189 天前
还是没 quanx 方便,quanx 本身就把机场和配置分离了
|