feat: 多订阅 / 地区分组 / 回国模式 / 多入站 / GEO 管理
多订阅: - 向导的订阅那步改成可以连续填多个 (最多 8 个, 回车结束),每个一条独立的 proxy-providers,节点合并进同一组 - 订阅行标记升级成 "# mihomo-up:sub:<provider名>",配置菜单里可按序号改任意一条 - 改完顺手删掉对应的节点缓存,否则内核会继续用旧节点 地区分组: - 支持 HK TW JP SG US KR UK DE FR,每个地区一个 url-test 组,靠节点名关键词 匹配 (中英文 + 旗帜 emoji) - 提醒: 某地区匹配不到任何节点会让内核拒绝启动,紧接着的校验会指出来 分流规则从两种变三种: - 3 = 指定地区走代理、其余直连,也就是回国 / 分区代理 - 回国模式生成 .mrs 规则集而不是 GEOIP: 域名维度打头,IP 维度兜底。 国内站挂境外 CDN 时解析出的 IP 不在本国段,只靠 GEOIP 会整片漏掉 - 只有 CN 有成体系的域名列表,其它国家代码只能按 IP 匹配,脚本会当场说明后果 多入站 (listeners): - 新增「入站端口」菜单: 加/删额外的本地端口,每个可绑一个策略组、DIRECT, 或按 rules 分流 - 每条写成一行 YAML 流式映射并带标记,加删就是加一行删一行,不动别处 - 拦截端口冲突和非法类型;选了具体出站会提醒它完全跳过 rules - 删到最后一条时连空的 listeners: 标题一起去掉 GEO / 规则集: - 新增菜单: 列出 geoip.dat / geosite.dat / *.mmdb / rules/*.mrs 的大小和 更新时间。下载失败是静默的 —— 规则全不匹配、流量落到 MATCH,看起来像 "配置没生效",所以状态必须可见 - 立即更新优先走管理接口 POST /configs/geo,不重启内核;接口不可用时回退到 删文件 + 重启 - 自动更新开关写 geo-auto-update / geo-update-interval 验证: 三种规则模式生成的配置都用 PyYAML 解析通过,分组、rule-providers、 listeners 结构和字段类型均符合预期;两个 .mrs 地址实测 200。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XpjLPV4JvAsuq9ACb3u6B4
This commit is contained in:
@@ -58,7 +58,7 @@ sudo ./mihomo-up.sh shortcut # 只安装 / 刷新 mihomo-up 快捷命令
|
||||
1. 一键安装 内核 + systemd + 配置,缺哪步补哪步
|
||||
2. 检查更新 3. 升级内核 4. 安装指定版本内核
|
||||
5. 回滚内核 6. 查看内核备份
|
||||
7. 配置管理 更换订阅 / 修改端口 / 局域网共享 / 面板密钥 / 导入配置 / 校验 / 编辑 / 备份还原
|
||||
7. 配置管理 订阅 / 端口 / 局域网 / 面板密钥 / 入站端口 / GEO / 导入 / 校验 / 编辑 / 备份
|
||||
8. 服务控制 启动 / 停止 / 重启 / 状态 / 最近日志 / 开机自启 / 重写服务文件
|
||||
9. 卸载
|
||||
```
|
||||
@@ -102,21 +102,92 @@ fork 之后想让快捷命令指向你自己那份,安装的时候加 `--scrip
|
||||
|
||||
| 问题 | 说明 |
|
||||
|---|---|
|
||||
| 订阅链接 | 机场给的 http(s) 地址,写成 `proxy-providers`,每 24 小时自动更新一次 |
|
||||
| 订阅链接 | 机场给的 http(s) 地址。**可以填多个**,一次一个,回车结束(最多 8 个) |
|
||||
| 本地代理端口 | `mixed-port`,HTTP 和 SOCKS5 共用,默认 7890 |
|
||||
| 局域网共享 | `allow-lan`,开了同网段其它设备也能连(还要放行防火墙) |
|
||||
| 管理接口 | 只允许本机 / 局域网公网可访问 / 不开启。面板和 API 都连这里 |
|
||||
| 访问密钥 | 回车即自动生成随机串;管理接口开在 `0.0.0.0` 时务必设 |
|
||||
| Web 面板 | 选是就写 `external-ui-url`,内核首次启动自己去下载 metacubexd |
|
||||
| 分流规则 | 全部走代理(默认),或者指定某个国家/地区直连、其余走代理 |
|
||||
| 地区分组 | 留空=不拆。填 `HK JP US` 之类就按地区各建一个自动测速组 |
|
||||
| 分流规则 | 三选一,见下面的表 |
|
||||
|
||||
生成的分组是 `PROXY`(手动选,默认跟着 AUTO)和 `AUTO`(自动挑延迟最低的)。规则里内网地址一律直连。
|
||||
多个订阅的节点会合并进同一组。每个订阅是一条独立的 `proxy-providers`,各自按 24 小时周期更新。
|
||||
|
||||
选了「指定国家/地区直连」会额外写一条 `GEOIP,<两位国家代码>,DIRECT`,代码填 `CN`、`US`、`JP`、`DE` 都行,小写会自动转大写。
|
||||
**地区分组**支持 `HK TW JP SG US KR UK DE FR`。每个地区一个 `url-test` 组,靠节点名里的关键词匹配,中英文和旗帜 emoji 都认。
|
||||
|
||||
**修改配置不用手写 YAML**:菜单「配置管理」能直接更换订阅、修改端口、开关局域网共享、改面板密钥。
|
||||
注意:某个地区一个节点都没匹配上的话内核会拒绝启动,紧接着的校验会当场告诉你。
|
||||
|
||||
每次改动之前自动备份成 `config.yaml.bak-<时间戳>`,改完立刻用内核 `-t` 校验。**校验不过会问你要不要还原**,服务正在运行的话再问一句要不要重启生效。
|
||||
**分流规则**三选一,内网地址在哪种模式下都直连:
|
||||
|
||||
| 模式 | 生成的规则 | 用途 |
|
||||
|---|---|---|
|
||||
| 1 全部走代理 | `MATCH,PROXY` | 默认 |
|
||||
| 2 指定地区直连、其余走代理 | `GEOIP,<CC>,DIRECT` + `MATCH,PROXY` | 常见的翻墙用法 |
|
||||
| 3 指定地区走代理、其余直连 | `RULE-SET,...` + `MATCH,DIRECT` | 回国 / 分区代理 |
|
||||
|
||||
地区填两位 ISO 代码(`CN`、`US`、`JP`、`DE`…),小写自动转大写。
|
||||
|
||||
生成的分组是 `PROXY`(总开关,手动选,默认跟着 AUTO)、`AUTO`(全部节点里自动测速),加上你要的那几个地区组。
|
||||
|
||||
## 回国 / 分区代理
|
||||
|
||||
上面的模式 3 是反过来的:命中的地区走代理,其余直连。适合人在境外、只想让国内站点走国内节点。
|
||||
|
||||
它不用 `GEOIP`,而是生成两条 `.mrs` 规则集:
|
||||
|
||||
```yaml
|
||||
rules:
|
||||
- RULE-SET,cn-domain,PROXY # 域名维度
|
||||
- RULE-SET,cn-ip,PROXY,no-resolve # IP 维度兜底
|
||||
- MATCH,DIRECT
|
||||
```
|
||||
|
||||
**为什么必须有域名那份**:很多国内站挂着境外 CDN,域名解析出来的 IP 不在国内段,只靠 `GEOIP` 会整片漏掉。域名列表才是主力,IP 那条只兜住「直接连 IP、没有域名」的连接。
|
||||
|
||||
`.mrs` 是二进制规则集,只下载你要用的那一两个列表,不用拖整包 `geosite.dat`。下载走 `proxy: DIRECT`,因为你人在境外,直连最快。
|
||||
|
||||
有个限制脚本会当场告诉你:**只有 CN 有成体系的域名列表**。换成别的国家代码就只能按 IP 匹配,该地区挂境外 CDN 的站点会漏掉。
|
||||
|
||||
## 多开入站端口
|
||||
|
||||
一个端口对应一个出站——从 7801 进来的全走香港节点,从 7802 进来的全走日本。菜单「配置管理 → 入站端口」增删,写成 mihomo 的 `listeners`:
|
||||
|
||||
```yaml
|
||||
listeners:
|
||||
- { name: in-7801, type: mixed, listen: 0.0.0.0, port: 7801, proxy: HK }
|
||||
- { name: in-7802, type: mixed, listen: 0.0.0.0, port: 7802 }
|
||||
```
|
||||
|
||||
用法就是把代理地址指到不同端口:
|
||||
|
||||
```bash
|
||||
curl -x http://127.0.0.1:7801 https://example.com # 走 HK 组
|
||||
curl -x http://127.0.0.1:7802 https://example.com # 按 rules 分流
|
||||
```
|
||||
|
||||
出站可以选任意一个已有策略组、`DIRECT`,或者「按 rules 分流」。
|
||||
|
||||
**选了具体出站就完全跳过 rules**:这个端口的流量一律走它,包括本该直连的内网以外流量。脚本在你选完之后会提醒一次。想保留分流就选「按 rules」。
|
||||
|
||||
类型支持 `mixed`(HTTP + SOCKS5 同口)、`http`、`socks`。端口和主代理端口或其它入站冲突会被当场拒绝。
|
||||
|
||||
## GEO 数据和规则集
|
||||
|
||||
`GEOIP`、`GEOSITE`、`RULE-SET` 规则都要靠数据文件才能匹配。内核缺文件时会自己去下载,但**下载失败是静默的**。
|
||||
|
||||
失败的表现是:规则一条都匹配不上,流量全落到最后的 `MATCH`,看起来就像"配置没生效"——你会先去怀疑节点,而不是怀疑一个几天前静默失败的下载。
|
||||
|
||||
菜单「配置管理 → GEO / 规则集」把这件事变可见:列出配置目录里的 `geoip.dat`、`geosite.dat`、`*.mmdb` 和 `rules/*.mrs`,带大小和上次更新时间。几天没变就是没更新成功。
|
||||
|
||||
「立即更新」优先走管理接口的 `POST /configs/geo`,**不用重启内核**。管理接口没开、或服务没在运行时,回退到删掉数据文件再重启服务重新下载(动手前会问你)。
|
||||
|
||||
「自动更新 开/关」写的是 `geo-auto-update` 和 `geo-update-interval: 24`。
|
||||
|
||||
## 改配置的安全网
|
||||
|
||||
上面这些改动——换订阅、改端口、加入站、开关自动更新——都不用手写 YAML,也都走同一套保护。
|
||||
|
||||
每次动手之前自动备份成 `config.yaml.bak-<时间戳>`,改完立刻用内核 `-t` 校验。**校验不过会问你要不要还原**,服务正在运行的话再问一句要不要重启生效。
|
||||
|
||||
需要手写的复杂配置(DNS、TUN、自定义规则)请用菜单里的「手动编辑配置」,或者用「从 URL 导入完整配置」整份换掉——这两条路同样有备份、校验、还原兜底。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user