Avatar

Clash Party(原 Mihomo Party)/ Clash Verge Rev / Sparkle 覆写与扩展脚本指南

Oct 29, 2024 · comments

请大家先看看我的上一篇文章:Mihomo自用配置 再观看以下内容,理解起来可能更为顺畅!

1. 起因

Windows我自己一直都是用的clash,从最早的clash for Windowsclash verge再到clash verge rev然后回到裸核,最后又发现了一个不错的软件布丁狗维护的Mihomo Party[不过现在他不维护了],从他不到几十个star用到现在,个人感觉体验下来还是十分不错的~ 也推荐使用,裸核用久了还是十分焕然一新的~(后续接手的 clash party 不建议使用)现在如果非要用 GUI 的话,推荐使用 sparkle

clash verge revsparkle/mihomo party/clash party 这几个都支持覆写脚本,就一起讲了吧。

我其实写了一份自用的mihomo.yaml配置,不过在mihomo pary/clash verge rev上还是想把覆写玩起来,于是多方借鉴下,自己也折腾了一份覆写。

仓库:https://github.com/yyhhyyyyyy/selfproxy

覆写/扩展脚本:https://github.com/yyhhyyyyyy/selfproxy/blob/main/Mihomo/Extension_Script/script.js

接下来分三个部分为大家讲解: 覆写内容Mihomo Party 覆写Clash Verge Rev 扩展脚本

⚠️ 因为我就只用了布丁狗还是 core dev 的 mihomo party 以及一两天的 sparkle,因此本篇文章都会以 mihomo party 来说明这一个系列,涵盖clash party sparkle

2.覆写内容

2.1 覆写规则

规则在Mihomo中是重中之重的,因此就先写了

我的整体规则组成很简单 ,大体分成两个部分且请遵循我写的先后顺序:nonip(非ip类)>ip(ip类) 原因请看 Mihomo自用配置

  • nonip

    adNonipRules>customRules>nonipRules

    整体就是去广告规则集放最先(出广告自己酌情开启,当前我不大推荐去广告),之后是自定义规则集(这边是为了保证优先级,所以这么放进来了,里面放nonip和ip类规则都行,就是保证其优先级),最后再放入非ip类的规则集即可

  • ip

    直接放入 ipRules 即可

最后的顺序也就是 adNonipRules>customRules>nonipRules>ipRules

// 覆写规则
function overwriteRules(params) {
  const adNonipRules = [
    'RULE-SET,reject_non_ip,REJECT',
    'RULE-SET,reject_domainset,REJECT',
    'RULE-SET,reject_non_ip_drop,REJECT-DROP',
    'RULE-SET,reject_non_ip_no_drop,REJECT'
  ]

  const customRules = [
    // 在此添加自定义规则,优先级次于ad。例子:
    // "DOMAIN,baidu.com,DIRECT",
  ]

  const nonipRules = [
    'RULE-SET,cdn_domainset,🎯 节点选择',
    // ... 此处省略更多非 IP 规则项
  ]

  const allNonipRules = [
    ...adNonipRules,
    ...customRules,
    ...nonipRules
  ]

  const ipRules = [
    'RULE-SET,reject_ip,REJECT',
    // ... 此处省略更多 IP 规则项
  ]

  const rules = [
    // 非ip类规则
    ...allNonipRules,
    // ip类规则
    ...ipRules
  ]

  const ruleProviders = {
    // 去广告
    reject_non_ip_no_drop: {
      type: 'http',
      behavior: 'classical',
      url: 'https://ruleset.skk.moe/Clash/non_ip/reject-no-drop.txt',
      path: './rule_set/sukkaw_ruleset/reject_non_ip_no_drop.txt',
      interval: 43200,
      format: 'text',
      proxy: '🎯 节点选择'
    }
  }
}

2.2 覆写代理组

这次相比于我之前写的Mihomo自用配置多了个url-test自动选择,因为上篇文章有一部分同学问我怎么没有自动选择,因此这边加入。

思路简单说下:

  1. 写好包含正则以及排除正则两者合并构造总的国家正则

  2. 写个找正则的函数

    function getProxiesByRegex(params, regex) {
      const matchedProxies = params.proxies.filter (e => regex.test (e.name)).map (e => e.name)
      return matchedProxies.length > 0 ? matchedProxies : ['COMPATIBLE']
    }
  3. 生成自动选择代理组

    const autoProxyGroups = autoProxyGroupRegexs
      .map (item => ({
        name: item.name,
        type: 'url-test',
        url: 'https://cp.cloudflare.com',
        interval: 300,
        tolerance: 50,
        proxies: getProxiesByRegex (params, item.regex),
        hidden: true,
      }))
      .filter (item => item.proxies.length > 0)
  4. 手动选择代理组类似,不过这边加入了图标icon,以显示的更佳美观~具体请看仓库,代码其实差不多

  5. 划分不同的代理组

    贴个最后出来的效果图: mihomo party:

    party

    clash verge rev: verge rev

2.3 覆写DNS

DNS老生长谈了,这边就带过吧,如果还有疑问,可以看上篇文章 Mihomo自用配置

再简单说下我的观点,还是依旧,如果网络环境文明,那么直接使用运营商提供的DNS,如果网络环境不文明再用公共DNS。这边每个人都有每个人的见解,按照你自己的习惯想法来吧,我只不过是赞同我所理解的观点。

配置如下:

// 覆写DNS
function overwriteDns(params) {
  const dnsList = [
    'https://223.5.5.5/dns-query',
    'https://doh.pub/dns-query',
  ]

  const proxyDnsList = [
    'https://223.5.5.5/dns-query',
    'https://doh.pub/dns-query',
  ]

  const dnsOptions = {
    'enable': true,
    'ipv6': false,
    'prefer-h3': true, // 如果 DNS 服务器支持 DoH3 会优先使用 h3
    'respect-rules': true, // 仅对符合规则的请求使用 DNS
    'enhanced-mode': 'fake-ip', // 伪装 IP
    'fake-ip-range': '28.0.0.1/8',
    'nameserver': dnsList, // 其他网络请求都归他管
    'proxy-server-nameserver': proxyDnsList, // 代理服务器的 DNS
  }
  params.dns = { ...dnsOptions }
}

还需要补充一下其中的 fake-ip-filter

这个我留个坑,后面有空写个action自动同步上游fake-ip-filter 然后更新整份覆写脚本

目前就先硬编码写死 具体看仓库

2.4 覆写基本配置项

这边就没啥好讲的了直接贴上来吧

// 覆写Basic Options
function overwriteBasicOptions(params) {
  const otherOptions = {
    'mixed-port': 7890,
    'allow-lan': true,
    'unified-delay': true,
    'tcp-concurrent': true,
    'find-process-mode': 'strict',
    'global-client-fingerprint': 'chrome',
    'profile': {
      'store-selected': true,
      'store-fake-ip': true,
    },
    'ipv6': false,
    'mode': 'rule',
    'log-level': 'warning',
    'udp': true,
    'sniffer': {
      'enable': true,
      'sniff': {
        HTTP: {
          'ports': [80, '8080-8880'],
          'override-destination': true,
        },
        TLS: {
          ports: [443, 8443],
        },
        QUIC: {
          ports: [443, 8443],
        },
      },
      'skip-domain': ['Mijia Cloud', '+.push.apple.com']
    },
  }
  Object.keys (otherOptions).forEach ((key) => {
    params[key] = otherOptions[key]
  })
}

这部份就是覆写的内容咯,具体脚本还是建议去我仓库看看,接下来就是如何在mihomo party上使用了。

2.5 覆写Tunnel

我个人还是比较推崇Tunnel模式的,也建议大伙使用Tunnel模式,比系统代理香不少~

还是老生长谈,stack的选择请看这边文章tunnel stack如何选择 不想看也没事 结论就是 一个个测试过去 测试顺序 system>mixed>gvisor 哪个最先能用 用哪个。

// 覆写Tunnel
function overwriteTunnel (params) {
    const tunnelOptions = {
        enable: true,
        stack: "system",
        device: "tun0",
        "dns-hijack": ["any:53", "tcp://any:53"],
        "auto-route": true,
        "auto-detect-interface": true,
        "strict-route": true,
    };
    params.tun = { ...tunnelOptions };
}

PS:Tunnel目前在mihomo party中没法覆写,只能通过GUI面板配置,留个占位坑,后续如果可以覆写了,直接用就行

但是在clash verge rev中是可以使用的

2.6 覆写FakeIpFilter

这部分就是对这些地址,不使用fakeip的解析方式,而直接使用realip进行解析。

该部分已经实现了github action的自动更新上游的方式。具体是搭配仓库内的python脚本。有兴趣的同学可以去仓库里看看。

// 覆写DNS.Fake IP Filter
function overwriteFakeIpFilter(params) {
  const fakeIpFilter = [
    // 具体有哪些地址,请看上游,或者去仓库直接copy脚本使用即可
  ]
  params.dns['fake-ip-filter'] = fakeIpFilter
}

2.7 覆写NameserverPolicy

实际上就是DNS分流,通俗易懂一些,你是阿里的域名,我就用阿里的DNS服务器解析自家的域名,这样更友好。

// 覆写DNS.Nameserver Policy
function overwriteNameserverPolicy(params) {
  const nameserverPolicy = {
    // 很多,具体映射看仓库脚本
  }
  params.dns['nameserver-policy'] = nameserverPolicy
}

2.8 覆写hosts

搭配上面的覆写NameserverPolicy。

// 覆写hosts
function overwriteHosts(params) {
  const hosts = {
    'dns.alidns.com': ['223.5.5.5', '223.6.6.6', '2400:3200:baba::1', '2400:3200::1'],
    'doh.pub': ['120.53.53.53', '1.12.12.12'],
    'localhost': ['127.0.0.1']
  }
  params.hosts = hosts
}

3. Mihomo Party 覆写

3.0 基本设置

请先参考我的设置页进行一次基础设置,否则可能覆写脚本不一定完全生效!

party 基本设置

party subsotre

party 图标

party 接管 dns

3.1 Sub-Store订阅节点

mihomo party很好的其中一个点就是在集成了 sub-store 这是非常好用的工具,我在surge上也是必装的, 怎么添加节点具体看接下来的图

substore 添加节点

substore 添加节点 2

substore 添加节点 3

如果有多个节点一个个添加单条订阅进来就行。

因为我有多节点,所以我会用到组合订阅,组合订阅请继续看

substore 组合订阅

3.2 导入覆写

  1. 如果能与github连通,那么可以使用远程导入

party 链接导入覆写

  1. 如果不能连通,就直接本地导入

party 覆写本地导入

party 覆写本地导入 2

把仓库里的脚本全部复制进来就行

3.3 订阅管理

party 导入订阅

party 配置覆写

party 配置覆写 2

选择刚刚导入或者新建的覆写文件,然后保存即可。

3.4 补充Tunnel面板设置

party tunnel 配置 可以参照我的设置打开开关以及填写内容即可

4. Clash Verge Rev 扩展脚本

4.1 订阅

把订阅链接放进来就行,点击下导入 verge rev 导入订阅

如果有自己的本地yaml配置文件,新建个本地配置即可

verge rev 导入本地配置文件

4.2 编辑全局扩展脚本

verge rev 配置全局扩展脚本 1

verge rev 配置全局扩展脚本 2

仓库中复制脚本进来就行。

4.3 开启Tunnel即可

我自己是常用Tunnel,可根据自己需求而来

rev tunnel 开启

5. 交流

TG: Channel

Comments
CC BY-NC-SA 4.0 2020-PRESENT © yyhhyyyyyy