Clash 如何优雅的管理自定义的规则集文件?

2023-04-28 11:57:41 +08:00
 Seayon

我将机场订阅连接和 github 各种规则集融合在一起定义了一份自定义的规则集文件,方便自定义各种分流,比如最近的 ChatGPT 我会给他分配美国节点,而其他网站使用香港节点以获得最佳访问速度。

但总有新的域名需要加入到规则集中,也有一些域名想临时直连试试。

尝试自己在 github 维护了自己的规则集, 这样做因为我可以用 git 来提交和同步,并且可以提供 http 链接给 clash 可以通过网络来试试获取分流规则,我的配置文件一部分就如下

rule-providers:
  myproxy:
    type: http
    behavior: domain
    url: "https://github.com/xxx/raw/master/MyProxy.yaml"
    path: ./ruleset/myproxy.yaml
    interval: 3600
  mydirect:
    type: http
    behavior: domain
    url: "https://github.com/xxx/Profiles/raw/master/MyDirect.yaml"
    path: ./ruleset/mydirect.yaml
    interval: 3600 
 
# 在自定义 Rules 中引入 
rules:
  # 自定义 Rule 开始
  - RULE-SET,myproxy,PROXY
  - RULE-SET,mydirect,DIRECT
  # 自定义 Rule 结束

试了一下现在这样可以,我只需要在 git 中编辑域名列表,然后 push ,在 clash 中刷新一下规则集即可应用。但手动编辑总归还是有点麻烦,我需要提交,push 。

早期的时候我使用 [SwitchyOmega] 浏览器插件,定义了一个全部走代理的的代理地址和端口,因为这个插件可以探测到网页的某些域名的资源加载是否正常,我可以快速的将其切换到使用直连还是使用代理,但后来发现这个插件能同步的域名列表有限,且我想要全局透明代理所以用了软路由,我在想能不能借助这个插件的能力,在检测到资源加载异常时,可以快速将一个域放到上述我定义的代理集中或者放到直连规则集中?或者大家都是怎么同步的?

还有一个问题,因为我现在有多台软路由,还有多端同步需求,所以自定义的原始的分流配置文件我也要多端同步,我现在是放在七牛云上的私有空间临时导出带访问权限的 http 链接给 clash 导入用一下(因为这些不常变但也会变,主要还是),也想问大家怎么处理的。

27824 次点击
所在节点    宽带症候群
64 条回复
LoveMyself546
2023-04-28 15:18:27 +08:00
@bpazy 配置分发的问题我想到的是用 subconverter 这种可以重新合并规则的工具,只要将 acr 添加规则到 file 变成添加规则到配置中心,配置中心收到规则整理一份新的规则文件,然后 acr 调用 cfw api 从配置中心拉取最新的规则文件,这样应该行得通。(又或者 acr 提交到 github 这类的仓库,然后直接由 subconverter 拉取合并)
cy18
2023-04-28 15:20:10 +08:00
@SenLief 只在第一次连接的时候判断,根据结果写成规则,之后连接就不影响体验了。

找了下,没找到现成的这种工具,不知道自己写一个工作量大不大。
Seayon
2023-04-28 15:22:21 +08:00
@bpazy 你是将整个配置文件进行同步了,我刚开始也想这么做,但是将配置文件上传到公网暴露出来 http 链接,里面包含了我的机场订阅链接,我担心泄露(虽然我们可以整一个非常复杂的文件名之类),然后没有考虑国外的网盘,因为本身到国外网络连接不稳,到时候再发生先有鸡还是先有蛋的难题。

后来我想明白了,我主要变动的是自定义规则域名那块儿,其余的机场订阅链接等不会经常变,于是我就将我的域名列表配置文件抽出来放到了公网,这也会暴露,但一堆域名列表可能会暴露我的喜好而已不会暴露其他的太多东西,还能接受。

我将域名列表更改后提交到 git ,这时候怎么让其他软路由中的 openclash 快速同步呢?
mydirect:
type: http
behavior: domain
url: "https://github.com/xxx/Profiles/raw/master/MyDirect.yaml"
path: ./ruleset/mydirect.yaml
interval: 3600
除了将这个配置这里的 interval 缩短一点,比如 120 ,两分钟之类
我还发现 openclash 带的 Yacd 控制面板 和 Dashboard 控制面板 都有一个刷新规则列表的按钮,你可以打开面板找找
在 管理面板的规则 -》 然后找到自定义的规则的 名字(比如上述的 mydirect ),然后点击 刷新,会立刻从配置的 url 拉取最新的规则生效。
SenLief
2023-04-28 15:38:14 +08:00
@cy18 #22 如果是这个,其实不用,因为 dns 有缓存,你第一次链接后,dns 会缓存这个 ip 地址,下一次的时候会直接匹配了,不用请求 dns 服务。
bpazy
2023-04-28 15:52:45 +08:00
@Seayon #23 感谢回复,感觉你说的方法也很好,有机会尝试一下
ungrown
2023-04-28 15:58:17 +08:00
@Seayon #8 你是在找 cow proxy 吗?
但是相信我,这玩意在解决就问题的同时带来新的问题
qwvy2g
2023-04-28 17:04:31 +08:00
@SenLief 这个不会污染,但是可能造成不在规则列表里面的域名查询目标暴漏给公司或者学校的记录设备,clash 对不在域名规则里面的 dns 查询会经过两次 dns 查询,第一次向本地 dns 查询,如果返回国外 ip ,clash 配置文件一般有个兜底规则,第二次就会走代理查询。被屏蔽域名一般是在列表里面,这部分自然不会泄露。但是不在列表里面的国外某些网站就不一定了,虽然比如学校或者公司不能看到你访问了某些网站,但是如果时不时查询某些网站 dns 解析结果,然后立马有加密流量,从行为上也能推断出在访问这个网站。
mohumohu
2023-04-28 18:11:30 +08:00
dns 的话,跑个 docker 就可以解决: https://github.com/kkkgo/PaoPaoDNS
airbotgo
2023-04-28 18:45:10 +08:00
大佬们的玩法都好高级啊。

我是 macOS 使用 ClashX ,配置文件保存路径设置为 iCloud 云盘,例外规则通常选“ DIRECT (全球直连)”,碰到不能访问的连接就临时手动切换到“ Proxy (节点选择)”,经常访问就打开本地配置文件将规则添加进去。


https://acl4ssr-sub.github.io/ 这个在本地生成一个配置文件(放在他们服务器上我不放心),大多数网站包括拦截广告都可以应付,例外的自己添加自定义规则到配置文件中。

Android 使用 Clash ,ClashX 的配置文件手动传过去,基本很长时间不会动。

iOS 使用 Shadowrocket ,网上找了拦截广告的默认配置就够用了。
SenLief
2023-04-28 18:52:08 +08:00
@qwvy2g #27 一样的,我说的就是这个意思,程序本身是没法知道域名是不是需要代理的,你如果请求就一定要走 dns 。
airbotgo
2023-04-28 18:57:22 +08:00
@airbotgo 我的观点是,先用一个通用的规则(网上结合 GEOIP 的拦截广告规则)应付 80%的日常使用场景。剩下临时碰到的,手动切换例外规则解决,这 20%中也只有不到 20%需要添加到规则中,剩下绝大多数可能一年都访问不到几次。碰到一个添加一个,时间长一大堆冗余规则,反而不便查阅和管理。
Yourshell
2023-04-28 20:14:07 +08:00
写一个浏览器插件或者扩展 clash dashboard ,跟 SwitchOmega 一样看可以管理一些手动规则,并且托管规则文件,更新后通知 clash 更新规则
Alixys
2023-04-28 22:07:49 +08:00
- GEOIP,CN,DIRECT
- MATCH,MATCH
一直都是这样兜底,上面 rule-providers 按需加现成的就完事了
zjp
2023-04-28 22:30:03 +08:00
我直接摆了😂
有些网站需要特定地区 id ,有的服务商提供的配置没有按地区分代理组,就需要自己写 append-proxy-groups 。但是代理服务器又不是固定的。
全能的办法是用客户端提供的脚本能力来修改配置
但是我现在 Android 、Windows 和 Linux 用了三个不同的客户端😹
tediorelee
2023-04-28 23:00:20 +08:00
zacharyjia
2023-04-28 23:06:04 +08:00
订阅转换啊,自己参考例子( https://github.com/tindy2013/subconverter/blob/master/base/config/ACL4SSR_Online_Full.ini)写好配置,然后扔到比如 github 上,订阅转换的 web 界面上远程配置那里把 url 给它就行了。这样每次更新订阅的时候,都会在订阅转换后端上按照你的配置文件生成对应的 profile 给 clash
sfdev
2023-04-28 23:23:30 +08:00
Clash 自定义规则及其难用!如果是 mac 或者 iOS 系统的话有更好用的应用,如圈 x 和小火箭,节点和规则分离式,使用非常省心。
banmuyutian
2023-04-28 23:52:06 +08:00
我是自己搭建 subconverter 再 fork ACL4SSR 规则上增加个人定制规则可以实现多端同步
Royal22
2023-04-29 00:39:46 +08:00
可以试一下我还在写的客户端 https://github.com/uutzlpikvq6852/vpc-pc-open-desktop 里面的规则集是否符合你要求
ajyz
2023-04-29 01:01:43 +08:00
现在好像 github 上很多都有 clash 适用规则的了,以前就是因为嫌麻烦,所以直接全套 surge 了

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

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

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

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

© 2021 V2EX