编辑
2024-12-13
折腾工具
00
请注意,本文编写于 35 天前,最后修改于 35 天前,其中某些信息可能已经过时。

目录

前言
简单粗暴
Minin 的 yml 模式
Diff 模式
Minin 的 js 模式

Clash 的 Mixin 功能让我们在不修改原始配置文件情况下,自由定制配置的能力。一般机场下载下来的配置都自带很多的规则,但是有时自己需要针对特定的网站进行优化,就可以用到这个功能。

前言

一开始尝试配置 Mixin 是因为我的 Clash 在规则模式下:

  • cdn 走了国外的流量
  • 一个游戏国内路线更流畅
  • 访问一些外国网站,走代理反而会访问失败

如此种种,虽然下载的配置文件中为我设定了详细的规则。但我总希望我能自己定义一些规则,由于就有了这个文章。

简单粗暴

可以直接修改对应机场的配置文件中的 rules

rules: - DOMAIN-SUFFIX,cn.bing.com,DIRECT - DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT - DOMAIN-SUFFIX,zerolacqua.top,DIRECT - DOMAIN-SUFFIX,docs.opencv.org,DIRECT

对我来说 DOMAIN-SUFFIX 就够用了,这样就能完成自定义规则。

但是这么做有一个问题,修改的规则是在配置文件中的,哪天你更新了配置文件(代理的配置文件一般都会经常更新),你的自定义规则就没有了。那如何避免直接在代理的配置文件中进行修改呢?

Minin 的 yml 模式

Mixin 文件能在不配置原配置文件的基础上,通过编写额外的规则覆盖原有的规则。不管你切换到了哪个代理的配置,这个 Mixin 规则都能适用。

yaml
mixin: rules: - "DOMAIN-SUFFIX,zerolacqua.top,DIRECT" - "DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT"

这样,当访问 *.zerolacqua.top 或者 *.zhuanlan.zhihu.com 时,就会直接走 DIRECT 流量。

但是这样做还是有问题,那就是 Mixin 中定义的 rules 字段将把原配置文件中 rules 覆盖掉。导致代理配置中定义的那么多规则全部没了。当然,你可以选择把代理配置中的规则复制进 Mixin 中,不过这肯定不是我想要的。

Diff 模式

Clash 的 Diff 模式可以让我们既做到增量式地添加规则,不过针对每个配置文件,Diff 都是独立的,如果有多个配置文件,那么你就要定义多次 Diff。

diff
rules: + - DOMAIN-SUFFIX,cn.bing.com,DIRECT + - DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT - DOMAIN-SUFFIX,bilibili.com,🌏 爱奇艺&哔哩哔哩

比如你在 Diff 中添加了如上的两行,那么每次更新配置后,你所做的修改都会应用在这个配置文件上。

Minin 的 js 模式

Diff 似乎已经帮助我们解决了问题,但有一点遗憾的地方是,每个代理配置文件都需要单独进行配置。有没有更好的办法,让我“一处配置、处处生效”?

Mixin 除了 yml 格式,还有 js 格式的(需要在设置中打开)。在 js 格式中,Clash 给出了默认的配置:

js
module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => { return content }

修改:

js
module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => { const extra = { rules: [ 'DOMAIN-SUFFIX,cn.bing.com,DIRECT', 'DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT', ...content.rules, ], } return { ...content, ...extra } }

这里 content 是配置文件的结构化数据,将 rule 属性进行修改,添加上需要的内容即可。

参见:https://blog.in-x.cc/tech/other/cfw-mixin

本文作者:Zerol Acqua

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!