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 导入用一下(因为这些不常变但也会变,主要还是),也想问大家怎么处理的。

27813 次点击
所在节点    宽带症候群
64 条回复
cy18
2023-04-28 12:07:43 +08:00
不知道有没有什么工具,可以自动在后台智能判断,第一次连接新域名或者 IP 的时候通过判断可连接性自动建立规则集,那就方便了。
Seayon
2023-04-28 12:16:31 +08:00
@cy18 那怎么判断这个域名或者 ip 该走代理还是直连呢?这个数据哪里来
cy18
2023-04-28 12:42:05 +08:00
@Seayon 一个初步思路,在后台分别通过代理跟不走代理连一下目标地址,然后根据连接是否成功,连接速度,甚至进一步判断内容是否一致来自动建立规则。这个只在某个域名或者 ip 第一次连接的时候做判断,所以总体来说对使用体验不大。
cy18
2023-04-28 12:43:18 +08:00
当然静态规则也是必不可少的
Musong
2023-04-28 13:12:52 +08:00
Musong
2023-04-28 13:13:39 +08:00
奥看错了 撤回
pC0oc4EbCSsJUy4W
2023-04-28 13:15:25 +08:00
参考 https://github.com/ACL4SSR/ACL4SSR/tree/master
然后加上自己自定义,可以自己配置 config 常用远程用库里面的,自己特殊域名自己加
Seayon
2023-04-28 13:17:16 +08:00
@cy18 哇,这个思路好,牛的
Seayon
2023-04-28 13:18:25 +08:00
@fatelight 其实我的问题就是如何快速添加和移除自定义的特殊域名,以及在多端自动同步自己的操作
bpazy
2023-04-28 13:42:40 +08:00
和 OP 有相同的问题,我目前的方法是将规则写在文件中,rule-provider 指向这个文件,然后创建硬链接通过 onedrive 同步,这样多设备都可以同步了。

快速添加规则是通过写的一个小程序来满足的: https://github.com/Bpazy/acr, 目的是添加规则到 file 中然后调用 cfw API 快速刷新规则已达到实时生效。

这样我的整个流程就变为:
1. 打开 YouTube 发现打不开;
2. 执行命令快速添加域名: acr add https://www.youtube.com/
3. 刷新网页;

但也有问题没解决:
1. 软路由如何同步我的配置,毕竟软路由没有 onedrive ;
2. 添加规则后,其他机器如何立刻生效?比如我本地添加规则,其他机器立刻同步到新规则后,也可以访问相同的域名;
Helsing
2023-04-28 13:47:56 +08:00
GitHub 不是有手机客户端吗,编辑一下很麻烦吗

我的自定义规则就是放在 GitHub 仓库里的,要改就打开客户端改一下
anto17
2023-04-28 14:15:15 +08:00
为啥不用 geoip 啊,非大陆地址默认走代理不就好了。特殊情况想直连就单独加一条规则,但这种频率应该不高
JxQg597
2023-04-28 14:21:57 +08:00
@bpazy #10 有修改配置和刷新重启的工具了。
手撸一个配置中心,加分发到各个服务,如果要浏览器一键添加,再撸一个浏览器插件。
插件填写配置中心的服务地址,浏览器添加规则到配置中心的规则文件,再通过配置中心推送到各个服务执行修改配置和刷新重启。
bpazy
2023-04-28 14:25:24 +08:00
@JxQg597 #13 请问你是怎么解决配置分发到客户端的问题的?比如软路由使用的是 openclash ,为了达成分发的目的,我还需要对 openclash 进行改造吗?
JxQg597
2023-04-28 14:50:34 +08:00
@bpazy #14 哈哈哈,我就是提供一个理论可行的解决方案。具体实现起来应该占用很大内存(java),还需要一个公网的机器。也可以用 go 去实现把。
openclash 点击按钮底层也是使用 sh 脚本的,直接调用它的脚本好了。
我没那么多软路由,也没有那么多网址需要添加,所以传到 github 私有 gist 里面,手动去多端同步。
SenLief
2023-04-28 14:56:56 +08:00
不要用 rules 。尤其是经典类型的,匹配很差,性能也低。

改用 clash.meta ,使用 geosite.dat 或者 geosite.db 以及 geoip 即可。

例外自己的规则托管在 gist 多好啊,比如我的 rules
rules:
- DOMAIN-SUFFIX,jsdelivr.net,DIRECT
- DOMAIN,ghproxy.com,DIRECT
- RULE-SET,SelfDirect,DIRECT
- RULE-SET,SelfProxy,Proxy

- GEOSITE,bilibili,DIRECT
- GEOSITE,icloud,Icloud
- GEOSITE,onedrive,OneDrive
- GEOSITE,spotify,Spotify
- GEOSITE,youtube,Streaming
- GEOSITE,netflix,Streaming
- GEOSITE,spotify,Spotify
- GEOSITE,telegram,Proxy
- GEOSITE,github,Proxy
- GEOSITE,microsoft,Microsoft
- GEOSITE,openai,OpenAI
- GEOSITE,category-games@cn,DIRECT
- GEOSITE,geolocation-!cn,Proxy
- GEOSITE,CN,CN

# telegram
- IP-CIDR,91.108.0.0/16,Proxy,no-resolve
- IP-CIDR,109.239.140.0/24,Proxy,no-resolve
- IP-CIDR,149.154.160.0/20,Proxy,no-resolve
- IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
- IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
- IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
- IP-CIDR,43.134.232.155/16,Proxy,no-resolve

- GEOIP,CN,CN
- MATCH,Proxy

前面 SelfDirect 和 SelfProxy 是自己的规则,托管在 gist 上,如需添加就修改 gist ,然后更新一下就可以了。后面的规则全部是 GEOSITE ,最后用 GEOIP 兜底。
SenLief
2023-04-28 14:58:31 +08:00
@cy18 现在都不是这样请求的,因为你需要先 dns ,如果需要代理的请求 dns 给国内的,大概率是要污染的。
Huelse
2023-04-28 14:59:49 +08:00
我倒是没这么麻烦,在 CFW 中用配置文件预处理来实现按需分配 https://docs.cfw.lbyczf.com/contents/parser.html#%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E

prepend-proxy-groups 添加特定的规则组,例如美国 IP 的,然后在 prepend-rules 指定域名用这个规则组的连接即可,每次更新自动覆盖

软路由的话就不清楚了,我不喜欢把代理放在路由上,没操作过
cy18
2023-04-28 15:03:28 +08:00
@SenLief DNS 肯定也得分不同线路也要走两次
SenLief
2023-04-28 15:11:17 +08:00
@cy18 dns 污染后,它会给你 ip ,只不过是污染的,你还需要请求两次,两次握手还需要时间,这样无法做到无感知,你会有明显感知变慢了。

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

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

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

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

© 2021 V2EX