joy-cli/docs/ops/manhuang-net-path.md
feibisi 97c71b79e9 feat(manhuang): chain_v2 breaks + 接码单点/号池 burn/path_id
从六环色块加深到结构化 chain_break(reason/owner/sla);显式 sms 单点、
号池额度历史烧速、出口 path_id;串线 crit 自动 ensure-direct;总览 Top break。
2026-07-13 03:08:19 +08:00

177 lines
8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 蛮荒 · 网络供应链VPN / 机场 / 出站路径)
> 状态:**已落地(可运维)** · 更新 2026-07-13
> 仓库:`joy-cli` · 相关 commit 见 `git log --oneline --grep=net-path`
## 0. 一句话
**机场 / Clash / 系统代理 / 出口身份** 当作供应链一环,而不是用「公开代理 46 万 alive」冒充出口能力。
神州生产域必须 **DIRECT**;蛮荒 clearnet 探价可用 mixed-port鬼市 onion 走 **Tor 分轨**
## 1. 定位
| 是 | 不是 |
|----|------|
| 出站路径健康 + 串线检测 + Board 闭环 | 暗网成交 / 代付 / 洗钱 |
| 订阅 hash、节点数 Δ、延迟、geo/ASN | 订阅 URL / 节点 server 明文进面板 |
| scutil 系统代理是否指向 789x | 把 free proxy dump 当 KPI |
## 2. 五层模型N0N5
| 层 | 内容 | 实现 |
|----|------|------|
| **N0** | 配置/订阅元数据 hash、profile 文件数、节点数 Δ | `probe-proxy-path.py``n0_subscription_meta` |
| **N1** | Clash Meta controller `:9090` / Verge `:9097` | `n1_controllers` + `primary` |
| **N2** | 选中节点 `/delay` 抽样 | `n2_delays` |
| **N3** | 双出口 IP + geo/ASN | `n2_n3_egress`ipify + ip-api |
| **N4** | scutil 系统代理 ON/OFF → 789x**期望 ON** | `system_proxy` |
| **N5** | global 模式 / 生产域未 DIRECT串线 | `n4_n5_isolation` |
## 3. 文件地图
| 路径 | 职责 |
|------|------|
| `scripts/manhuang/clashctl` | **控制面入口**status/mode/ensure-direct/probe/regression |
| `scripts/manhuang/clash-api.py` | vendored 通用 API CLIHsiifu3/clash-verge-skill |
| `scripts/manhuang/probe-proxy-path.py` | 主探针(默认 / `--deep` |
| `scripts/manhuang/check-net-path-regression.sh` | 回归crit 串线 → exit 2 |
| `scripts/manhuang/actions-to-board.sh` | findings → Board observe |
| `scripts/manhuang/run-quote-probe.sh` | 管线内嵌 net-path |
| `configs/launchd/com.feibisi.manhuang-net-path.plist` | 每 15min `--deep` |
| `configs/manhuang/proxy-path.example.yml` | controller / never_via_proxy |
| `configs/manhuang/clash-rules-shenzhou-direct.snippet.yaml` | **生产 DIRECT 规则草案** |
| `~/.cache/manhuang/net-path/status.json` | 最新状态 |
| `~/.cache/manhuang/net-path/history/YYYYMMDD.jsonl` | 历史曲线 |
| `docs/ops/manhuang-net-path.md` | 本文 |
## 4. 日常命令
```bash
cd ~/Projects/joy-cli
# —— 控制面 CLI现成 API 客户端 + 本仓缺口)——
# 通用 status/mode/切节点vendored clash-api.py
# upstream https://github.com/Hsiifu3/clash-verge-skill MIT零依赖
# 本仓封装:
bash scripts/manhuang/clashctl status
bash scripts/manhuang/clashctl mode rule
bash scripts/manhuang/clashctl ensure-direct # rule + 生产 DIRECT 检查/热加载
bash scripts/manhuang/clashctl sys-proxy # 期望 ON
bash scripts/manhuang/clashctl groups
# 亦可用python3 scripts/manhuang/clash-api.py --api http://127.0.0.1:9090 status
# 深探(延迟 + 串线 + scutil + geo
bash scripts/manhuang/clashctl probe --deep
# 或: python3 scripts/manhuang/probe-proxy-path.py --deep
# 回归(期望改完 Clash 后 PASS
bash scripts/manhuang/clashctl regression
# 更严:系统代理+global 也失败
bash scripts/manhuang/clashctl regression --strict
# findings → Board12h 节流;--force 重发)
bash scripts/manhuang/actions-to-board.sh
bash scripts/manhuang/actions-to-board.sh --dry-run
# 装/重载定时(若未 load
cp configs/launchd/com.feibisi.manhuang-net-path.plist ~/Library/LaunchAgents/
launchctl bootout gui/$(id -u)/com.feibisi.manhuang-net-path 2>/dev/null || true
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.feibisi.manhuang-net-path.plist
```
### 4.1 现成 CLI 调研结论2026-07-13
| 工具 | 结论 |
|------|------|
| **clash-verge-skill** | 已 vendoring 为 `clash-api.py`,本机 ClashX Meta `:9090` 实测可用 |
| **mihomosh** | 更全的独立 Mihomo 工具箱;需配 mihomo-path与 ClashX Meta GUI 目录不完全一致,未默认采用 |
| **clashtui / mihoro** | 自管内核,易与 ClashX Meta 双开冲突,**不装** |
| 官方 | 无业务 CLI只有 external-controller REST |
## 5. 2026-07-13 实测与处置记录Mac 麟悦)
### 5.1 处置前
| 项 | 值 |
|----|-----|
| Clash | Meta · **global** · mixed `:7893` |
| 系统代理 | **ON** → 127.0.0.1:7893 |
| 串线 | **crit**global + 系统代理 + 生产域未 DIRECT |
| 回归 | FAIL |
### 5.2 已执行处置(脚本/API非 GUI
1. `PATCH /configs`**mode=rule**live controller `:9090`
2. 从当前订阅缓存生成增强配置,**rules 顶部 prepend 生产 DIRECT**`PUT /configs?force=true` 热加载
- 落地文件:`~/.config/clash.meta/config-shenzhou-direct.yaml`(含订阅节点,**勿提交 git**
3. Clash Verge enhance`profiles/rnT7uCOncus6.yaml` prepend 同步
4. `~/.config/clash.meta/config.yaml` 基线 mode=rule + DIRECT 列表
5. 串线探针改为:**以 live DIRECT 规则覆盖为主**mixed-port 200 ≠ 走机场)
### 5.3 处置后
| 项 | 值 |
|----|-----|
| mode | **rule** |
| 生产 DIRECT | weixiaoduo / feicode / support / mall 等 **已在 rules 前 16 条** |
| 系统代理 | **必须保持 ON** → 127.0.0.1:7893本机否则上不了外网 |
| 串线 risk | **ok / info**(系统代理 ON 是常态,不是缺陷) |
| 回归 | **`check-net-path-regression.sh` → PASS** |
| 出口 geo 例 | HK · 节点延迟 ~145ms |
### 5.4 运维约定2026-07-13 菲比斯确认)
**系统代理必须开着。** 本机外网依赖 Clash「设置为系统代理」关掉之后浏览器和多数 App **上不了外网**
| 要做 | 不要做 |
|------|--------|
| Clash **mode=rule** | 用 **global** 把所有流量(含生产域)塞进节点 |
| 生产域 **DOMAIN-SUFFIX … DIRECT** 置顶 | 靠 **关闭系统代理** 来「隔离」神州 |
| 蛮荒 clearnet 探价走 **mixed-port** | 把 scutil 系统代理 ON 当成故障去关 |
| 订阅更新后重跑 `--deep` / 回归,确认 DIRECT 仍在最前 | 为了回归绿而去关系统代理 |
隔离手段 = **rule + 生产 DIRECT**,不是关代理。
## 6. 与 collect / 面板
- `manhuang.net_path``collect_manhuang()` 读 status.json
- **出口环**不再用 `proxies_alive` 大数刷绿
- 通道 tabN0N5 卡、延迟表、串线 findings、系统代理 ON/OFF、geo
- 公开代理池默认折叠
## 7. Board 闭环
| 项 | 值 |
|----|-----|
| 项目 | `P-manhuang-net`owner linuxjoy |
| family | `observe` |
| capability | `observability_ops`(威胁类用 `security_ops` |
| 节流 | 同 title hash **12h**`MANHUANG_BOARD_THROTTLE_S` |
| 任务正文 | 含 next + 规则草案路径 |
## 8. 铁律
- 订阅 URL / 节点私钥 **永不**进 git / dashboard JSON
- 不成交、不代付、不对第三方写 exploit
- 神州生产变更仍走 devops / 人工Board 只 observe
- **系统代理必须保持 ON**(本机否则上不了外网;菲比斯 2026-07-13 确认)
- **隔离靠 rule + 生产 DIRECT绝不靠关系统代理**
## 9. 相关文档
- [manhuang-supply-chain.md](./manhuang-supply-chain.md) — 六环总览
- [manhuang-handbook.md](./manhuang-handbook.md) — 管线总手册
- [manhuang-README.md](./manhuang-README.md) — 文档索引
- linuxjoy`docs/setup/flclash-proxy.md` · `docs/infrastructure/nas-unified-proxy.md`
## 10. 与供应链 chain_v2
- `status.json`**`path_id`**controller+mode+selected+egress 哈希)
- 串线 `risk=crit` 时探针默认跑 `clashctl ensure-direct``MANHUANG_AUTO_ENSURE=0` 可关)
- collect 将 path_id / system_proxy 并入 `chain.breaks`(如 `path_serial` / `path_sys_proxy_off`
## 11. 下一步(未做)
- 本地 mmdb 解析 ASN现用 ip-apimaxminddb 因 PEP668 未装)
- scutil 异常列表与生产域是否在 ExceptionsList
- 神州健康检查强制 direct 的自动化(与 joy web / 监控联动)
- 出口 IP 信誉列表对撞(可选)
- Board 按 `chain.breaks[].reason` 自动发 observe 任务