yyhhyy's blog

yyhhyy

Mihomo Party 覆写/Clash Verge Rev 扩展脚本

3841
2024-10-29

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

1. 起因

Windows我自己一直都是用的clash,从最早的clash for Windowsclash verge再到clash verge rev然后回到裸核,最后又发现了一个不错的软件Mihomo Party,从他不到几十个star用到现在,个人感觉体验下来还是十分不错的~ 也推荐使用,裸核用久了还是十分焕然一新的~

有一部分同学许愿Clash Verge Rev的扩展脚本,现在也更新咯~

Mihomo Party项目地址:https://github.com/mihomo-party-org/mihomo-party

Clash Verge Rev 项目地址:https://github.com/clash-verge-rev/clash-verge-rev

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

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

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

希望大伙看到能点个小小的star,这样写文章比较有动力哈哈

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

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,🎯 节点选择",
        xxxxx
    ];
​
    const allNonipRules = [
        ...adNonipRules,
        ...customRules,
        ...nonipRules
    ];
​
    const ipRules = [
        "RULE-SET,reject_ip,REJECT",
        xxxxx
    ];
​
    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: "🎯 节点选择"
        },
        xxxxx
    };
    ...  // 具体代码看github 这边只是示例

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:



    clash 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 基本设置

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

3.1 Sub-Store订阅节点

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

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

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

3.2 导入覆写

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

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

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

3.3 订阅管理

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

3.4 补充Tunnel面板设置


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

4. Clash Verge Rev 扩展脚本

4.1 订阅

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

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

4.2 编辑全局扩展脚本

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

4.3 开启Tunnel即可

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