Avatar

Clash Party/Clash Verge Rev/Sparkle 覆写与扩展脚本指南

PublishedUpdatedcomments

再开始阅读本篇文章之前,强烈建议各位同学优先看这篇文章:Mihomo 配置:自用配置文件与思路分享 再观看以下内容,理解起来可能更为顺畅!

1. 缘起

大部分同学接触 Clash 都是从客户端开始的,比如 Clash for Windows。发展至今,几乎所有主流客户端都支持了 覆写脚本/扩展脚本 功能,例如 Clash Party、Sparkle、FLClash、Clash Verge Rev 等,这也给了我们更多自定义的空间。

本文分享一下我的覆写思路与脚本,跟上篇一样,不想看碎碎念的可以直接去仓库取用:

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

⚠️ 我主要使用的是布丁狗还在担任 core dev 时期的 Mihomo Party,Sparkle 只短暂体验过,因此文中统一以 Mihomo Party 为例进行说明,同样适用于上述其他客户端。

2.覆写内容

2.1 覆写规则

规则是 Mihomo 中最核心的部分,所以放在最前面讲。

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

  • nonip

    customRules>nonipRules

    最早,我支持在 rules 里补充去广告规则的,但随着使用加深,总会带来一些体验上的不便,因此不再主张在 rules 中补充去广告规则

    整体顺序是:先放自定义规则集(customRules,用于保证特定规则的优先级,nonip 和 ip 类都可以放),再放非 ip 类规则集即可。

  • ip

    直接放入 ipRules 即可

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

// 覆写规则
function overwriteRules(params) {
  const customRules = [
    // 在此添加自定义规则,比如对于百度这个域名使用直连:
    // "DOMAIN,baidu.com,DIRECT",
  ]

  const nonipRules = [
    'RULE-SET,cdn_domainset,🎯 节点选择',
    // ... 此处省略更多非 IP 规则项,具体请到仓库查看覆写脚本
  ]

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

  const ipRules = [
    // 依据 ip 类规则顺序添加即可,具体请到仓库查看覆写脚本
  ]

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

2.2 覆写代理组

思路如下:

  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