Mihomo Party 覆写
编辑请大家先看看我的上一篇文章:Mihomo自用配置 再观看以下内容,理解起来可能更为顺畅!
1. 起因
Windows我自己一直都是用的clash,从最早的clash for Windows
到clash verge
再到clash verge rev
然后回到裸核
,最后又发现了一个不错的软件Mihomo Party
,从他不到几十个star用到现在,个人感觉体验下来还是十分不错的~ 也推荐使用,裸核用久了还是十分焕然一新的~
项目地址:https://github.com/mihomo-party-org/mihomo-party
我其实写了一份自用的mihomo.yaml
配置,不过在mihomo pary上还是想把覆写玩起来,于是多方借鉴下,自己也折腾了一份覆写。
仓库:https://github.com/yyhhyyyyyy/selfproxy
覆写脚本:https://github.com/yyhhyyyyyy/selfproxy/blob/main/Mihomo/Mihomo_Party/party.js
希望大伙看到能点个小小的star,这样写文章比较有动力哈哈
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
自动选择,因为上篇文章有一部分同学问我怎么没有自动选择,因此这边加入。
思路简单说下:
写好
包含正则
以及排除正则
两者合并构造总的国家正则
写个找正则的函数
function getProxiesByRegex (params, regex) { const matchedProxies = params.proxies.filter ((e) => regex.test (e.name)).map ((e) => e.name); return matchedProxies.length > 0 ? matchedProxies : ["COMPATIBLE"]; }
生成自动选择代理组
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);
手动选择代理组类似,不过这边加入了图标icon,以显示的更佳美观~具体请看仓库,代码其实差不多
划分不同的代理组
贴个最后出来的效果图:
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面板配置,留个占位坑,后续如果可以覆写了,直接用就行
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. 使用教程
3.0 基本设置
请先参考我的设置页进行一次基础设置,否则可能覆写脚本不一定完全生效!
3.1 Sub-Store订阅节点
mihomo party很好的其中一个点就是在集成了 sub-store 这是非常好用的工具,我在surge上也是必装的~ 怎么添加节点具体看接下来的图
如果有多个节点一个个添加单条订阅进来就行。
因为我有多节点,所以我会用到组合订阅,组合订阅请继续看
3.2 导入覆写
如果能与github连通,那么可以使用远程导入
如果不能连通,就直接本地导入
把仓库里的脚本全部复制进来就行
3.3 订阅管理
选择刚刚导入或者新建的覆写文件,然后保存即可。
3.4 补充Tunnel面板设置
可以参照我的设置打开开关以及填写内容即可
- 1
- 2
-
分享