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

目录

前言
简单粗暴——修改配置文件
规则覆盖
Diff 模式/编辑规则
脚本模式

一般机场下载下来的配置都自带很多的规则,但是有时自己需要针对特定的域名和 IP 进行优化。Clash for Windows 的 Mixin 功能,以及 Clash Verge 的全局扩展配置和全局扩展脚本,让我们能在不修改原始配置文件情况下,自由定制配置的能力。

前言

我的 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 就够用了,这样就能完成自定义规则。

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

规则覆盖

Clash for WindowsMixin (yml) 模式,以及 Clash Verge全局扩展配置(yml),能在不配置原配置文件的基础上,通过编写额外的规则覆盖原有的规则。不管你切换到了哪个代理的配置,这个规则都能适用。

下面以 mixin 为例:

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

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

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

Diff 模式/编辑规则

  • Clash for Windows

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

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

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

  • Clash Verge

    编辑规则编辑代理组提供了可视化 UI,可以添加、删除规则(或代理组),编辑结果不会修改配置文件,效果与 Clash for Windows 的 Diff 类似。

脚本模式

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

  • Clash for Windows

    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

  • Clash Verge

    按官网提供的方法设置规则:

    js
    /** * 配置中的规则"config.rules"是一个数组,通过新旧数组合并来添加 * @param prependRule 添加的数组 */ const prependRule = [ // 将百度分流到直连 'DOMAIN-SUFFIX,cn.bing.com,DIRECT', 'DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT', ]; function main(config) { // 把旧规则合并到新规则后面(也可以用其它合并数组的办法) let oldrules = config["rules"]; config["rules"] = prependRule.concat(oldrules); return config; }

    参见:https://www.clashverge.dev/guide/rules.html?h=%E5%85%A8#_4

本文作者:Zerol Acqua

本文链接:

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