Add bundled WireGuard diagnostics and application proxy
This commit is contained in:
1 parent
6dd3c7dd45
commit
eabb3e4472
20 files changed
+1129
-76
No files matched your search
+20
-4
@@ -1,19 +1,35 @@
|
||||
# OpsX VPN 桌面客户端(第一阶段)
|
||||
# OpsX VPN 桌面客户端
|
||||
|
||||
仓库根目录的 `client/` 是独立的 Rust + Tauri v2 + React/TypeScript 桌面项目。形态参考同级 `opsxshell`、`opsxapi`:界面运行在 Tauri WebView,服务请求经 Rust 命令完成。与仓库的 `frontend/` 管理后台独立构建。
|
||||
|
||||
目前仅实现对现有 `GET /api/health` 的真实检测。在“设置”中输入服务端 HTTP 或 HTTPS 根地址,检测成功自动保存并显示已保存地址,也可直接保存:HTTP 可用于健康检测,但明文传输今后不应承载登录口令或设备令牌,推荐使用可信 HTTPS 域名。地址仅保存在本机前端存储中,不含账号。概览在打开时和每隔 30 秒检查一次已保存的管理服务地址;耗时是控制面请求往返时间,不能当作 VPN 节点延时。线路页不展示虚构节点或延时,等待独立的终端用户线路接口。圆形按钮会说明当前连接前提,不伪装成已连接。没有普通用户设备 API 和系统隧道适配前,不提供登录或一键拨号。
|
||||
客户端通过独立的 `/api/client/*` 接口登录拨号用户、获取授权线路、自动登记设备公钥并领取配置;私钥保存在本机 Rust 数据目录,前端不接触令牌和私钥。登录页允许 HTTP 和 HTTPS 地址,HTTP 明确提示明文风险。概览每隔 30 秒检查控制面可达性;该往返耗时不是 VPN 节点延时,连接状态以网关握手为准。
|
||||
|
||||
桌面版托盘显示“尚未连接”,提供打开窗口与退出。设置页通过 Rust 只读检查 `wg`、`wg-quick` 是否出现在本机 PATH;工具存在不代表驱动、权限、路由及实际隧道可用。浏览器界面预览不会调用本机检查。
|
||||
当前 macOS/Linux 系统级拨号仍使用本机 `wg` 和 `wg-quick`,Windows 内置隧道尚未实现。设置页报告“系统工具模式”或“当前不可用”,与 Rust 连接路径一致;工具存在不等于路由、DNS 和实际握手正常。浏览器界面预览不会调用本机检查。安装包附带官方 `wireguard-go` 的 Go 网络栈组件,支持无特权出口探测和设置页手动启动的本机 SOCKS5 代理 `socks5h://127.0.0.1:18743`。仅主动配置该代理的应用流量会经过 VPN,域名由隧道内 DNS 解析;不会创建系统 TUN 或修改系统路由,**尚不能代替系统级 VPN 拨号**。系统隧道设计、平台验收与发布门槛见 [SDD-003](../docs/specs/SDD-003-bundled-wireguard-client.md)。
|
||||
|
||||
## 使用与验收
|
||||
|
||||
1. 在桌面客户端使用**拨号用户**登录(管理后台的 `admin` 不是拨号用户),选择已运行、已授权的 WireGuard 专线。首次接入时客户端自动生成设备私钥并向服务端登记公钥,无需下载 `.conf`。
|
||||
2. 需要整机 VPN 时,macOS/Linux 须先安装系统 `wg` 和 `wg-quick`,在概览页连接并确认服务端握手;当前版本尚不提供免安装的系统级 VPN。
|
||||
3. 不安装系统工具时,可在设置页启动本机应用代理,再在需要访问的应用中设置 `socks5h://127.0.0.1:18743`。例如在终端验证 `curl --proxy socks5h://127.0.0.1:18743 http://www.baidu.com`。设置页“测试 VPN 出口”会连接 `223.5.5.5:443`;握手或测试成功不代表整机路由已切换。
|
||||
|
||||
公网代理需要管理员为该专线下发覆盖目的地和 DNS 服务器的 `AllowedIPs`,并在 VPN 网关开启 IPv4 转发与仅匹配 WireGuard 网段的出口 NAT;现有 `opsx-client-pilot` 测试专线仍只授权 `10.88.0.0/24`,**不能直接用于公网代理**。本机 SOCKS5 监听仅绑定 `127.0.0.1`、无额外口令,其他本机进程也能使用;切换账号、撤销本机设备、退出登录或退出应用时会停止代理。客户端意外退出后代理最多约两秒内检测到父进程消失并退出。
|
||||
|
||||
浏览器打开 `http://127.0.0.1:5176/` 只能预览 UI;原生登录、Go 代理及系统隧道必须在 Tauri 桌面窗口测试。HTTP 服务端地址允许使用,但账号口令和令牌会明文传输,生产请使用可信 HTTPS。
|
||||
|
||||
## 开发与构建
|
||||
|
||||
```bash
|
||||
cd client
|
||||
npm install
|
||||
npm run build:tunnel # 为本机目标架构构建 Go WireGuard 组件;需要 Go 工具链
|
||||
npm run dev # Tauri 桌面窗口
|
||||
npm run dev:ui # 仅预览界面;浏览器里不能执行 Tauri 的真实健康检查
|
||||
npm run build:ui # 界面类型检查与构建
|
||||
npm run build # Tauri 安装包(需目标 OS 的构建依赖)
|
||||
cd src-tauri && cargo test
|
||||
cd ../tunnel-go && go test ./...
|
||||
```
|
||||
|
||||
平台首期应使用**标准 WireGuard UDP**。现有 `/api/login` 是管理账户,Peer 创建/下载要求 operator 以上权限且下载的托管 Peer 私钥由服务端保存;不能直接把这些接口和管理令牌给桌面用户。需要先设计独立的客户端认证、设备公钥注册、分配 IP、撤销和增量更新 Peer。技术依据、验收条件及后续顺序见 [SDD-002](../docs/specs/SDD-002-desktop-wireguard-client.md)。`corplink-rs` 对接的是另一套飞连私有协议,不是 opsx-vpn 的协议实现。
|
||||
平台使用**标准 WireGuard UDP**,没有复用管理员登录令牌或飞连私有协议。认证和设备 Peer 接口设计见 [SDD-002](../docs/specs/SDD-002-desktop-wireguard-client.md);当前客户端已实现这部分接口,真实目标 OS 隧道与 DNS/路由恢复仍需实机验收。
|
||||
|
||||
Go 模块固定 `golang.zx2c4.com/wireguard` 版本并提交 `go.sum`。构建工具链只用于开发和发行打包,员工机器不需要 Go 或 Homebrew。探测结果只报告目标 TCP 是否可达:要验证公网,专线必须给该客户端下发覆盖公网目标的 `AllowedIPs`,网关必须开启 IP 转发及对应网段的出口 NAT。当前测试专线仍只下发私网路由,管理员授权公网后才可在设置页使用公网代理。
|
||||
Reference in new issue
Block a user