如何优雅地为 Clash 添加自定义代理规则?这是你要看的最后一篇教程

2023-06-17 09:22:08 +08:00
 studyingss

前言

上一篇文章里很多人想学怎么为 Clash 自定义教程,所以尽量快地写出来了。

只要利用好 gist 和订阅转换,为 Clash 添加规则并不难,既不用自己写工具,也不用自己买台服务器。

看完这篇文章,只需要短短 4 步,你就可以实现:

下面是正文,原文链接在 https://luxirty.com/article/custom-clash-rule 内容跟这里没区别,只多了一两句话

所需工具

一、创建远程配置

这一步仅仅是准备工作,你只需要跟着教程做就好,不需要在意细节,等看完整篇教程再回来关注细节也不迟。

打开 https://gist.github.com/ 创建一个新的 gist

为了方便理解,我们从一个非常简单的配置开始

把下面这个 gist 中的所有内容复制到你自己的 gist 里,然后点 create secret gist

https://gist.github.com/miaomiaoclub/8afa34d1be421f9ac14ee5f872865bdb/e7e660e7796e82f6d00c46756b2e593494cd8961

完成之后来仔细查看一下这段配置文件,它实际上就只有两项配置:

# 定义了规则
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 复制出来:

https://gist.githubusercontent.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5/raw/0d15083648bda2d0420b9260632736eceb4dcb3c/yourlist.list

删掉“raw”后面的所有部分: https://gist.githubusercontent.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5/raw/yourlist.list 这里我保留了文件名,删掉也可以,随你喜欢,只要能打开就行。

回到第一步创建的 gist ,添加一行,其中后面的链接用上面得到的

ruleset=🚀 节点选择,https://gist.githubusercontent.com/miaomiaoclub/76a9b5dbaad3203f9617dd69b4c74ea5/raw/yourlist.list

完成之后是这样(第 12 行是新添加的):

https://gist.github.com/miaomiaoclub/8afa34d1be421f9ac14ee5f872865bdb/03a5288b68c0fdb780e6e533c70ade4aff65b3a8

四、订阅转换

打开你平常爱用的订阅转换。

任意一个都可以,请不要发“偷订阅”之类的回复。

由于上个帖子有人恶意揣测,这里不贴链接和截图,自行 Google 。

打开之后先像平常一下在订阅链接里填上订阅。

重点来了。

打开第一步创建的 gist ,点击 raw ,一样把 URL 中 raw 后面的内容全部删掉,粘贴到“远程配置”一栏,注意,粘贴进去之后还需要在下拉框点击一下。

五、完成

像平常一样点击生成订阅链接,到 Clash 中订阅,一切就完成了。

六、一些后记

在这篇教程的例子中,我将 chatgpt 添加到了代理列表中,如果你还没理解如何做到的,请再看一下第二步创建的配置文件。

我相信你的好奇心和求知欲还想做更多操作,所以你应该会想看看官方文档:https://github.com/tindy2013/subconverter/blob/master/README-cn.md

一个关于性能的小 tip

subconverter 默认展开规则,但实际上 rule provider 的性能更好,在正文里没有提到这点是因为开启这个选项可能导致无法订阅,因为 clash 更新 provider 是通过直连。

如果有能力,最好还是使用 provider ,ip-cidr 和 domain 两种类型的 rule set 可以带来非常大的速度提升和内存节省,stash 的 wiki 里也有提到这一点,具体原因和解释可以看 https://t.me/AirixCloud/36

如果你觉得这个帖子有用的话,希望不要只点击收藏,可以回复来讨论或者提问,或者点一下标题下面的箭头,我更希望和各位有更加直接的交流,不需要担心自己提的问题过于简单,感谢~

41283 次点击
所在节点    分享创造
62 条回复
binghe
2023-07-02 21:54:06 +08:00
@studyingss subconverter 默认都没有 DNS 配置,再讲讲 DNS 配置方面吧。
studyingss
2023-07-02 22:57:02 +08:00
@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 规则的兜底作用全部废掉,用了他的规则之后,只要是没在域名列表里面的连接要么全直连要么全代理,全代理就是国内网站巨慢,全直连就是国外网站上不去。但他才不管,小白爱听就完事了。
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'
```

我还在想着什么时候再问问。。。

看了你的回答后,我觉得还是跟着搞规则或者工具的人的步伐。
studyingss
2023-07-03 00:07:22 +08:00
@binghe 如果你是说 subconverter 想转出来自带 dns 配置的话,有一个叫 clash 模板的配置,你可以写好然后指定一下。

去官方文档里面搜 clash_rule_base 就好。

转换之后会丢掉 no resolve 这个我也没找到好办法,如果对 clash 配置再熟悉一点的话,可以手写 rule 部分来实现,我目前是这样做的。
JimmyChan1506
2023-07-07 08:22:04 +08:00
可以当个无耻的伸手党吗? 楼主可否发一下生成的最终配置? 把订阅相关的东西去掉发出来?
@studyingss
garyvalue
2023-07-09 09:42:39 +08:00
请问能实现这种需求吗
用户→机场 A 中转服务器→机场 A 落地服务器→机场 B 落地服务器
studyingss
2023-07-09 12:30:25 +08:00
@garyvalue 如果 b 的落地你也有办法直接连上就可以
garyvalue
2023-07-09 13:54:42 +08:00
@studyingss #47 b 的落地可以直接连上,但是需要怎么操作呢,毕竟只能得到订阅链接
studyingss
2023-07-09 20:40:20 +08:00
@garyvalue 这个问题问 Google 吧,已经有不少现成的教程了。
binghe
2023-07-15 00:40:39 +08:00
”subconverter 默认展开规则,但实际上 rule provider 的性能更好“

这句话的意思是不是:
subconverter 默认会把所有规则写入配置文件,而造成性能相对下降。
RJY
2023-08-31 09:31:42 +08:00
感谢 OP ,按照这个方案搞定了 windows 设备间规则的同步。
RJY
2023-08-31 10:00:57 +08:00
感谢 OP ,刚想找到如何让 subconverter 如何不展开 rule ,就在回答里找到了答案。
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 和域名规则做优化,能在有大量规则的同时还保持着很快的匹配速度,当然这是以牺牲内存为代价换来的匹配速度(以目前的实现来说,几十万的规则大概占用几十兆内存)。台式机不在乎那点内存,但一些性能受限的设备可能很在乎。」
Temtselt
2023-11-17 10:23:06 +08:00
感谢楼主!
Mickeyy
2023-11-21 19:56:32 +08:00
感谢楼主,真的帮大忙了,小白还有个问题,这个 Gits 可以和本地的编译器之类的同步吗?每次改规则都要去 Github 有点麻烦
studyingss
2023-11-25 17:20:06 +08:00
@Mickeyy vscode 里有个叫做 gist 的插件,我是用那个编辑的,感觉还不错。
zwyyy456
343 天前
@studyingss 有个问题请教一下,domain 模式的 rule-set ,"+.google.com" 会同时匹配 "google.com" 和 "www.google.com" 吗?
另外,规则文件其实不需要放在 gist ,完全可以自己建立一个 repo 把规则都放进去,可以通过 raw.githubusercontent.com 像 gist 那样直接下载文件。
zwyyy456
343 天前
以及,ip-cidr 类型的 rule-set ,例如 cncidr ,是在 cncidr 的文件里面加上 no-resolve 还是 RULE-SET,cncidr,DIRECT,no-resolve 呢?
z5238384
324 天前
楼主,你好,我完整 的看了你的思路,也阅读 了 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 似乎并适合处理上述这种情况, 特来求助,有没有其他什么方式能实现我期望的目标。
万分感谢,写的罗里吧嗦,希望大佬不要介意。
gtshine
323 天前
我也希望能保留机场配置, 然后给 proxy-groups 中的某个 group.proxies 增加选择, 刚接触 subconverter. 文档看的头晕.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/949462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX