Files
proxy-station/README.md
YANG JIANKUAN a5d980a5e9 feat: 添加 WireGuard 设备管理并完善客户端分流
实现独立加密设备身份、网关 agent、持久生命周期任务和 Surge/FlClash 专属订阅凭证。

完善 Shadowrocket 规则转换与 Clash AI DNS,增加 Surge FFSB 适配、规则快照、运维工具及验收文档。
2026-11-02 22:44:23 +08:00

130 lines
10 KiB
Markdown
Raw 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.

# Proxy Station
统一维护边缘 VPS 节点部署管理与自托管的代理节点、分流规则管理平台。在 Web 界面里管理多协议节点与策略组、规则,向 macOS、iOS、Android 三端下发托管订阅——客户端填一次 URL,之后配置自动更新。
```
节点 ──┐
策略组 ──┼──→ ProfileIR ──┬──→ Surge .conf
规则 ──┘ ├──→ ShadowRocket 节点订阅 + 规则配置
└──→ ClashMeta .yaml
```
## 能做什么
**边缘节点部署管理**——节点部署脚本、版本兼容参考、交付模板与离线汇总页生成器已合入本仓库,使用项目技能 `edge-node-multi-protocol` 维护 nginx、3x-ui/Xray、WARP 与可选 sing-box 线路。真实配置与交付记录位于 Git 忽略的 `edge-nodes/private/`;入口见 [边缘节点工作区](edge-nodes/README.md)。
**多协议节点管理**——VMess、Trojan、Shadowsocks、Hysteria2,支持粘贴分享链接批量导入(`vmess://`、`trojan://`、`ss://` 的 SIP002 与 Xray 两种写法、`hysteria2://`),也支持手动填写与导出。节点按站点分段展示。
**分流规则与策略组**——空库首次启动从内置 Surge 模板初始化广告拦截、AI 服务、流媒体、国内直连等配置。模板参考 [ClashConnectRules/Surge](https://github.com/ClashConnectRules/Surge),已有数据库以管理 API 的实际数据为准,修改模板不会同步更新。规则可排序、改策略、启停、增删;唯一启用的 FINAL 保持末尾,不可停用或删除。策略组可启停、调整成员与显示顺序;显示顺序不决定规则优先级。外部规则集可在界面上预览内容。
**按客户端自动适配**——同一份数据生成三端配置,客户端不支持的协议在下发时自动屏蔽(例如 Surge 的 ss 类型没有 WebSocket 传输,SS over WS 节点会被排除),字段差异自动映射(cipher 命名、VMess AEAD、Hysteria2 混淆参数等)。
**按订阅分配节点**——每个订阅可以只开放部分节点,用于把不同线路分给不同设备或他人。
**WireGuard 设备组网**——设备专用订阅携带独立私网身份,提供 Surge 配置和标准 `.conf` 下载,通过固定 VPS 中转访问 Apple 屏幕共享。用户已在 macOS/iPadOS/iOS 实测 Surge + WireGuard 可工作,Shadowrocket 只保留普通代理下发;WG 清理当前已本地完成、未部署。原共享订阅保持原有范围。部署、版本要求和验收边界见 [WireGuard 组网](docs/WIREGUARD-LAN.md)。
**WireGuard 设备管理(2026-11-02,已部署)**——保留设备状态、固定 IP、流量和独立配置导出,去掉客户端选择;Surge 订阅可选附加一台设备,未选为原默认纯代理链接,选中生成带设备凭证的链接。开发从 [实现交接](docs/design/wireguard-devices/HANDOFF.md) 开始,配套 [完整设计](docs/design/wireguard-devices/DESIGN.md) 和 [可点击原型](docs/design/wireguard-devices/wg-device-management.html)。设备页、加密身份迁移、网关 agent 和设备绑定 API 已上线,原 Mac/iPad 只读纳管完成;运维和待验收项见 [实现记录](docs/WIREGUARD-DEVICES.md)。
## 客户端支持
| 客户端 | 节点 | 策略组 | 规则 | 导入方式 |
|---|:--:|:--:|:--:|---|
| **Surge** (macOS) | ✅ | ✅ | ✅ | 一个 URL,托管配置自动更新(`#!MANAGED-CONFIG`) |
| **ClashMeta** (Android) | ✅ | ✅ | ✅ | 一个 URL,`RULE-SET` 自动映射为 rule-providers |
| **ShadowRocket** (iOS) | ✅ | ✅ | ✅ | **两个 URL**:节点订阅 + 规则配置,见下 |
ShadowRocket 的原生订阅格式只承载节点,因此拆成两步:先在「订阅」里添加节点链接(名称随意),再在「配置」里添加规则链接。策略组通过 `policy-regex-filter` 从 App 内全部节点里筛选。订阅页的 ⓘ 图标里有同样的说明。
> ClashMeta 侧无 Clash 版本的规则集,由本服务实时拉取 Surge 版并转换后提供,无需外部转换服务。
三端的规则与 DNS 表达范围有所不同。Shadowrocket 部分规则仍保守跳过;Surge 的 AI Host DNS 映射不自动等同于手机端 DNS 设置。能力、已验证范围与待验项见 [移动端体检](docs/MOBILE-CLIENT-AUDIT-2026-10-04.md)。
## 当前配置入口
最新节点启用范围、完整组成员、规则服务归属与验证范围集中在 [当前生产状态](docs/CURRENT-STATE.md)。目前普通代理由 **🚀 Proxy** 控制,只有它引用 **⚡️ Automatic**;**🤖 AI** 可选美国、新加坡、日本或 **🧠 AI Nodes**。
**📋 All Nodes** 与 **🧠 AI Nodes** 收纳相同的可用节点,按完整名称升序排列,分别保存手动选择。AI Nodes 紧接 AI 显示;在 AI 中选 AI Nodes,再在 AI Nodes 中选择具体节点,即可为 AI 保存独立出口。详见 [独立节点选择](docs/AI-NODES-2026-10-04.md)。
AI 规则位于广告与普通分流之前,保留更早的协议防护与 Unbreak 直连例外。Net.Coffee 的随机 DNS 探测子域已纳入 AI;本机 Chrome+Surge 复测显示美国 Cloudflare「未检测到泄露」,验证边界见 [DNS 复测](docs/NET-COFFEE-DNS-2026-10-04.md)。
## 快速开始
使用 Node 22 与 pnpm,按已提交的锁文件安装:
```bash
CI=true pnpm install --frozen-lockfile
pnpm dev # server :3000 + web :5173
```
开发时打开 http://localhost:5173,然后:
1. **节点** → 批量导入,粘贴分享链接。命名建议带地区词(如 `🇺🇸 US LA VMess Direct`),地区策略组靠节点名正则匹配
2. **订阅** → 新建订阅,勾选要开放的节点
3. 复制对应客户端的 URL 填进客户端
两端都监听 `0.0.0.0`,手机在同一局域网下用 `http://<你的内网IP>:5173` 即可访问管理界面,页面上显示的订阅 URL 会自动带上该地址。
## 部署
当前 LA 生产服务使用 Node 22+systemd,由 nginx 提供 HTTPS;日常应用发布使用 [deploy 技能](.claude/skills/deploy/SKILL.md),线上节点/组/规则数据通过 [update-db 技能](.claude/skills/update-db/SKILL.md)管理。部署代码不自动覆盖已有数据。详细步骤见 [生产部署](docs/DEPLOY.md)。
另提供 Docker Compose 部署方式:
```bash
ADMIN_TOKEN=<随机长字符串> docker compose up -d
```
SQLite 落在 `./data` 卷。订阅 URL 由请求来源自动推断,无需配置基址。
**公网部署的两条硬要求**:设置 `ADMIN_TOKEN`(未设置时管理接口只放行 localhost 与局域网);用反向代理提供 **HTTPS**——订阅 token 就在 URL 里,明文传输会泄露。反代的 access log 建议对 `/sub/` 路径脱敏。
## 校验
```bash
pnpm -r typecheck
pnpm test
# 下载成功后再校验真实产物;生产验收使用实际 HTTPS 订阅
umask 077
check_dir="$(mktemp -d /private/tmp/proxy-station-check.XXXXXX)"
curl -fsSL --max-time 45 "http://localhost:3000/sub/<token>/clash" -o "$check_dir/clash.yaml" && \
test -s "$check_dir/clash.yaml" && mihomo -t -d "$check_dir" -f "$check_dir/clash.yaml"
# 在安装 Surge 的 macOS 上检查实际配置与远程规则快照
python3 scripts/check-surge.py /private/tmp/<profile>.conf --fetch-rulesets
```
真实配置、URL 与凭据仅保存在私有文件。原生解析成功不等于节点连接或隐私验收;本机 Surge 的组与网站 DNS 复测已有记录,iOS/Android 业务、UDP 与完整 DNS/WebRTC 测试仍需真机完成。完整流程见 [订阅变更与验证](docs/SURGE-CHANGES.md)。
## 文档
| 文件 | 内容 |
|---|---|
| [docs/CURRENT-STATE.md](docs/CURRENT-STATE.md) | 最新生产节点、策略组、规则、客户端下发数量与 Session 接续入口 |
| `edge-nodes/README.md` | 节点部署工作区、当前舰队、私有资料与工程迁移记录 |
| `.claude/skills/edge-node-multi-protocol/SKILL.md` | 节点部署、重建、维护与交付的共用技能 |
| `docs/SEEDING.md` | 从本仓库私有交付文档导入真实节点、命名建议 |
| `docs/ADDING-REGIONS.md` | 新增地区(香港、日本等)时的节点命名与策略组配套步骤 |
| `AGENTS.md` | Codex/Claude Code 共用的架构要点与开发约定 |
| `CLAUDE.md` | 导入 `AGENTS.md` 的 Claude Code 兼容入口 |
| `docs/AI-COLLABORATION.md` | 双工具加载方式、共用技能与协作维护方法 |
| `docs/DEPLOY.md` | LA 生产环境部署与验证 |
| `docs/SURGE-PRIVACY.md` | Surge AI 域名 DNS 分流与验证边界 |
| `docs/SURGE-AUDIT-2026-10-03.md` | macOS Surge 生产订阅体检、复现结果与修复建议 |
| `docs/SURGE-FIX-2026-10-03.md` | 体检问题修复、生产备份与实际订阅验证结果 |
| `docs/SURGE-CHANGES.md` | 节点、组、规则与 DNS 变更的 Surge 官方 CLI 验证流程 |
| [docs/AI-NODES-2026-10-04.md](docs/AI-NODES-2026-10-04.md) | 独立 AI Nodes、emoji、名称排序与客户端选择保留 |
| [docs/PROXY-AUTOMATIC-2026-10-04.md](docs/PROXY-AUTOMATIC-2026-10-04.md) | 普通代理入口与 Automatic 的选择链 |
| [docs/AI-RULE-REVIEW-2026-10-04.md](docs/AI-RULE-REVIEW-2026-10-04.md) | AI 精确补充及 Apple/Global/Bing 专用分流调整 |
| [docs/AI-PRIORITY-2026-10-04.md](docs/AI-PRIORITY-2026-10-04.md) | AI、协议防护、直连例外与广告规则优先级 |
| [docs/NET-COFFEE-DNS-2026-10-04.md](docs/NET-COFFEE-DNS-2026-10-04.md) | 检测域名实现、AI 后缀规则及本机 DNS 复测 |
| [docs/MOBILE-CLIENT-AUDIT-2026-10-04.md](docs/MOBILE-CLIENT-AUDIT-2026-10-04.md) | Shadowrocket/ClashMeta 生成器差异、已部署修复与手机待验项 |
## 安全
数据库和节点私有工作区存有真实凭据。`data/`、`*.db`、`.env`、`edge-nodes/private/`、`config.env` 及其备份、`node-links/` 已在 `.gitignore` 中,**绝不入 git**;可入库的示例、测试、模板一律使用占位凭据。节点私有资料通过受控备份恢复,Docker 构建上下文排除节点工具与私有资料。订阅 token 可随时在「订阅」页禁用或删除。
## 技术栈
应用为 pnpm monorepo:`server/`(Hono + better-sqlite3 + Drizzle)+ `web/`(Vue 3 + Vite + Naive UI + Pinia)+ `shared/`(zod schema 与 DTO,前后端共用)。生产模式由 server 静态托管前端产物,单端口运行。节点部署管理使用独立 Bash/Python 工具,不加入应用运行包。