我将机场订阅连接和 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 导入用一下(因为这些不常变但也会变,主要还是),也想问大家怎么处理的。
GPT-4 的回复:
对于您的需求,我有以下几点建议。
- 利用自动化工具简化域名列表编辑:您可以编写一个简单的脚本或使用现有的自动化工具(如Python脚本、Shell脚本等)来简化域名列表的编辑、提交和推送过程。当您需要添加或删除域名时,只需运行脚本,脚本会自动完成相关操作并将更改推送到GitHub仓库。这将大大减轻手动编辑、提交和推送的繁琐过程。
- 对于浏览器插件:虽然SwitchyOmega插件可以实现您所需的部分功能,但是要实现在检测到资源加载异常时快速将域名添加到代理集或直连规则集中,您可能需要研究其他插件或者尝试开发一个自定义的浏览器扩展来满足需求。
- 多端同步:您提到的将分流配置文件放在七牛云上的私有空间并导出带访问权限的HTTP链接的方法是可行的,这样可以确保多台软路由和多端设备都能访问到最新的配置。另外,您可以考虑使用其他同步工具或服务,如Dropbox、Google云端硬盘等,将配置文件同步到不同设备。这样可以确保所有设备都能获取到最新的分流配置,减轻手动同步的负担。
最后,希望我的建议能对您有所帮助,如果您有其他问题或疑问,请随时提问。
1
cy18 2023-04-28 12:07:43 +08:00
不知道有没有什么工具,可以自动在后台智能判断,第一次连接新域名或者 IP 的时候通过判断可连接性自动建立规则集,那就方便了。
|
3
cy18 2023-04-28 12:42:05 +08:00
@Seayon 一个初步思路,在后台分别通过代理跟不走代理连一下目标地址,然后根据连接是否成功,连接速度,甚至进一步判断内容是否一致来自动建立规则。这个只在某个域名或者 ip 第一次连接的时候做判断,所以总体来说对使用体验不大。
|
4
cy18 2023-04-28 12:43:18 +08:00
当然静态规则也是必不可少的
|
5
Musong 2023-04-28 13:12:52 +08:00
|
6
Musong 2023-04-28 13:13:39 +08:00
奥看错了 撤回
|
7
pC0oc4EbCSsJUy4W 2023-04-28 13:15:25 +08:00
参考 https://github.com/ACL4SSR/ACL4SSR/tree/master
然后加上自己自定义,可以自己配置 config 常用远程用库里面的,自己特殊域名自己加 |
10
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. 添加规则后,其他机器如何立刻生效?比如我本地添加规则,其他机器立刻同步到新规则后,也可以访问相同的域名; |
11
Helsing 2023-04-28 13:47:56 +08:00 via iPhone
GitHub 不是有手机客户端吗,编辑一下很麻烦吗
我的自定义规则就是放在 GitHub 仓库里的,要改就打开客户端改一下 |
12
anto17 2023-04-28 14:15:15 +08:00
为啥不用 geoip 啊,非大陆地址默认走代理不就好了。特殊情况想直连就单独加一条规则,但这种频率应该不高
|
13
JxQg597 2023-04-28 14:21:57 +08:00
@bpazy #10 有修改配置和刷新重启的工具了。
手撸一个配置中心,加分发到各个服务,如果要浏览器一键添加,再撸一个浏览器插件。 插件填写配置中心的服务地址,浏览器添加规则到配置中心的规则文件,再通过配置中心推送到各个服务执行修改配置和刷新重启。 |
14
bpazy 2023-04-28 14:25:24 +08:00
@JxQg597 #13 请问你是怎么解决配置分发到客户端的问题的?比如软路由使用的是 openclash ,为了达成分发的目的,我还需要对 openclash 进行改造吗?
|
15
JxQg597 2023-04-28 14:50:34 +08:00
@bpazy #14 哈哈哈,我就是提供一个理论可行的解决方案。具体实现起来应该占用很大内存(java),还需要一个公网的机器。也可以用 go 去实现把。
openclash 点击按钮底层也是使用 sh 脚本的,直接调用它的脚本好了。 我没那么多软路由,也没有那么多网址需要添加,所以传到 github 私有 gist 里面,手动去多端同步。 |
16
SenLief 2023-04-28 14:56:56 +08:00 5
不要用 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 兜底。 |
18
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 指定域名用这个规则组的连接即可,每次更新自动覆盖 软路由的话就不清楚了,我不喜欢把代理放在路由上,没操作过 |
20
SenLief 2023-04-28 15:11:17 +08:00
@cy18 dns 污染后,它会给你 ip ,只不过是污染的,你还需要请求两次,两次握手还需要时间,这样无法做到无感知,你会有明显感知变慢了。
|
21
LoveMyself546 2023-04-28 15:18:27 +08:00
@bpazy 配置分发的问题我想到的是用 subconverter 这种可以重新合并规则的工具,只要将 acr 添加规则到 file 变成添加规则到配置中心,配置中心收到规则整理一份新的规则文件,然后 acr 调用 cfw api 从配置中心拉取最新的规则文件,这样应该行得通。(又或者 acr 提交到 github 这类的仓库,然后直接由 subconverter 拉取合并)
|
22
cy18 2023-04-28 15:20:10 +08:00
|
23
Seayon OP @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 拉取最新的规则生效。 |
24
SenLief 2023-04-28 15:38:14 +08:00
@cy18 #22 如果是这个,其实不用,因为 dns 有缓存,你第一次链接后,dns 会缓存这个 ip 地址,下一次的时候会直接匹配了,不用请求 dns 服务。
|
27
qwvy2g 2023-04-28 17:04:31 +08:00
@SenLief 这个不会污染,但是可能造成不在规则列表里面的域名查询目标暴漏给公司或者学校的记录设备,clash 对不在域名规则里面的 dns 查询会经过两次 dns 查询,第一次向本地 dns 查询,如果返回国外 ip ,clash 配置文件一般有个兜底规则,第二次就会走代理查询。被屏蔽域名一般是在列表里面,这部分自然不会泄露。但是不在列表里面的国外某些网站就不一定了,虽然比如学校或者公司不能看到你访问了某些网站,但是如果时不时查询某些网站 dns 解析结果,然后立马有加密流量,从行为上也能推断出在访问这个网站。
|
28
mohumohu 2023-04-28 18:11:30 +08:00
dns 的话,跑个 docker 就可以解决: https://github.com/kkkgo/PaoPaoDNS
|
29
airbotgo 2023-04-28 18:45:10 +08:00
大佬们的玩法都好高级啊。
我是 macOS 使用 ClashX ,配置文件保存路径设置为 iCloud 云盘,例外规则通常选“ DIRECT (全球直连)”,碰到不能访问的连接就临时手动切换到“ Proxy (节点选择)”,经常访问就打开本地配置文件将规则添加进去。 用 https://acl4ssr-sub.github.io/ 这个在本地生成一个配置文件(放在他们服务器上我不放心),大多数网站包括拦截广告都可以应付,例外的自己添加自定义规则到配置文件中。 Android 使用 Clash ,ClashX 的配置文件手动传过去,基本很长时间不会动。 iOS 使用 Shadowrocket ,网上找了拦截广告的默认配置就够用了。 |
30
SenLief 2023-04-28 18:52:08 +08:00
@qwvy2g #27 一样的,我说的就是这个意思,程序本身是没法知道域名是不是需要代理的,你如果请求就一定要走 dns 。
|
31
airbotgo 2023-04-28 18:57:22 +08:00
@airbotgo 我的观点是,先用一个通用的规则(网上结合 GEOIP 的拦截广告规则)应付 80%的日常使用场景。剩下临时碰到的,手动切换例外规则解决,这 20%中也只有不到 20%需要添加到规则中,剩下绝大多数可能一年都访问不到几次。碰到一个添加一个,时间长一大堆冗余规则,反而不便查阅和管理。
|
32
Yourshell 2023-04-28 20:14:07 +08:00
写一个浏览器插件或者扩展 clash dashboard ,跟 SwitchOmega 一样看可以管理一些手动规则,并且托管规则文件,更新后通知 clash 更新规则
|
33
Alixys 2023-04-28 22:07:49 +08:00
- GEOIP,CN,DIRECT
- MATCH,MATCH 一直都是这样兜底,上面 rule-providers 按需加现成的就完事了 |
34
zjp 2023-04-28 22:30:03 +08:00
我直接摆了😂
有些网站需要特定地区 id ,有的服务商提供的配置没有按地区分代理组,就需要自己写 append-proxy-groups 。但是代理服务器又不是固定的。 全能的办法是用客户端提供的脚本能力来修改配置 但是我现在 Android 、Windows 和 Linux 用了三个不同的客户端😹 |
35
tediorelee 2023-04-28 23:00:20 +08:00 1
|
36
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
|
37
sfdev 2023-04-28 23:23:30 +08:00 via Android 1
Clash 自定义规则及其难用!如果是 mac 或者 iOS 系统的话有更好用的应用,如圈 x 和小火箭,节点和规则分离式,使用非常省心。
|
38
banmuyutian 2023-04-28 23:52:06 +08:00 1
我是自己搭建 subconverter 再 fork ACL4SSR 规则上增加个人定制规则可以实现多端同步
|
39
Royal22 2023-04-29 00:39:46 +08:00 via Android 1
可以试一下我还在写的客户端 https://github.com/uutzlpikvq6852/vpc-pc-open-desktop 里面的规则集是否符合你要求
|
40
ajyz 2023-04-29 01:01:43 +08:00
现在好像 github 上很多都有 clash 适用规则的了,以前就是因为嫌麻烦,所以直接全套 surge 了
|
42
Greatshu 2023-04-29 15:50:52 +08:00
我个人放弃了软路由,切换节点不够灵活,会产生单点故障,不同场景使用节点不同。我在桌面浏览器使用 switch omeg 搭配 GFWLIST ,添加代理也就几秒钟的事,然后 clash 配置域名和 IP 分流。移动端使用分应用代理,然后配置域名和 IP 分流。
|
43
Greatshu 2023-04-29 15:52:07 +08:00
不建议折腾这个事,除非是公司网管,否则花费的时间远大于节省的时间
|
45
SenLief 2023-04-29 18:25:56 +08:00
|
46
SenLief 2023-04-29 18:26:28 +08:00 1
@noqwerty #41 以前在群潜水的时候有看到,不过现在 PC 上性能不是问题,可能更多的是 ios 上吧,毕竟内存有限制。
|
47
PrinceofInj 2023-04-29 18:54:41 +08:00
@cy18 以前我用过一个工具叫 cow ,差不多的方案,先直连,发现有问题后尝试代理。可能是不方便,后来没更新了。
|
48
ncepuzs 2023-05-01 01:30:42 +08:00
|
50
Nihosijie 2023-05-16 08:53:08 +08:00
@Seayon 我用的是 clash 的 provider 功能,写一份包含规则集和分组的配置文件放在 cloudflare works 上,然后加订阅的时候,网站后面带 订阅名=订阅链接 的参数,然后就能实现不暴漏订阅链接的同时,还能自定义配置了。
|
52
yqs112358 2023-09-06 10:14:34 +08:00
@Seayon #23 担心订阅泄露问题的话,可以试试 github 的 gist ,这东东创建的时候默认是 secret 状态的,不像 github 仓库一样可以被搜到,只要不泄露那个 gist 网址就不会发生泄漏。可以放心地把整个配置文件托管在上面,用 raw 引用原文作为订阅链接让 clash 加载。在线编辑也比较方便,编辑完点击提交即可。
|
53
yqs112358 2023-09-06 10:17:20 +08:00
@Huelse 我之前也用的 cfw 的 parser ,但是后面发现不方便因为其他端( android/ios )没有 parser 这东西,没法共享自定义规则。最后还是换回线上 gist 托管的模式
|
55
yqs112358 2023-09-06 22:44:22 +08:00 1
@Seayon #54 确实会墙。所以说我这边还自己在 cloudflare workers 搭了反代给 gist.githubcontent.com 用,方便国内访问。当然既然楼主之前用 github 那肯定已经处理过墙的问题,用一样的办法对付 gist 即可。
|
56
playboy0 2023-10-13 19:08:45 +08:00
@SenLief #16 '不要用 rules 。尤其是经典类型的,匹配很差,性能也低。' 有出处吗?我查到的结果是 rule-set 性能很强
|
57
SenLief 2023-10-13 19:43:28 +08:00 via iPhone
@playboy0 翻一下 issues 就知道了,经典类型的 rules 需要全部 dns 的。性能也一般。
|
58
playboy0 2023-10-13 22:16:32 +08:00
@SenLief #57 这里的经典是指所有使用 rule-set 设置的规则吗,我查了一下,有文章建议不要展开 rule-set 即可获得较好的性能,谢谢
|
59
SenLief 2023-10-14 01:20:44 +08:00 via iPhone
@playboy0 rule-set 本身没啥问题吧,它也是下载到本地的,不过如果用的是 meta 或者 singbox 不如用 geodite.db ,匹配性能会更好一些。
|
64
ruanimal 88 天前
在路由器上直接写规则文件吧,监听变更然后触发重启服务
|