Skip to content

MiChongs/Proxy-RS

Repository files navigation

Proxy RS

面向 sing-box 与 mihomo 的跨平台原生管理器
用一个 Ratatui 控制台、系统托盘和脚本友好的 CLI,统一管理核心、配置、订阅、系统代理与 TUN。

Rust 2024 支持 Windows、macOS 和 Linux CI 状态 最新发布版本 MIT License GitHub Stars GitHub Forks GitHub Last Commit

功能 · 架构 · 平台与模式 · 下载 · 快速开始 · 命令参考 · 交互 · 安全 · 故障排查


项目定位

Proxy RS 是 Proxy.ps1 的 Rust 实现,适合希望在桌面或服务器上自行管理 sing-boxmihomo 的用户。它不提供代理节点,也不内置核心或用户配置;项目负责的是核心生命周期、配置与订阅操作、系统集成以及运行状态展示。

默认的 service 后端把高权限核心进程交给原生系统服务托管,日常使用的 TUI、托盘和 CLI 则保持在普通用户权限。需要兼容旧工作流或使用任意自定义核心路径时,也可以切换到 direct 后端。

功能亮点

  • 双核心管理:选择、启动、停止、重启、校验并显示 sing-box / mihomo 版本;从对应上游 GitHub Releases 查询和安装核心。
  • 透明的发布来源:sing-box 来自 reF1nd/sing-box-releases,mihomo 来自 MetaCubeX/mihomo;可配置 GitHub 下载镜像,镜像失败时回退到原始下载地址。
  • 可靠更新:TUI 展示查询、下载、解压、校验、替换与恢复进度;替换失败时恢复原核心。sing-box 可选择稳定版、预发布版或历史版本。
  • 四种代理模式:提供 systemtunmixedmanual,按模式控制配置修补、系统代理与 TUN。
  • 结构化配置处理:使用 JSON/YAML 结构化编辑修补入站;sing-box 优先调用 jq,不可用时回退到内置实现。修改前创建备份,校验失败则恢复。
  • 配置与订阅工作流:导入、选择、编辑、校验、修补和删除本地配置;添加订阅并批量更新。
  • 原生桌面体验:Ratatui TUI、系统托盘、大小写一致的快捷键、真实布局命中区域、列表滚轮和可点击操作。
  • 可观测性:读取 stdout/stderr 日志,执行连通性测试;配置提供 Clash API 时展示实时流量、活动连接、进程与目标排行,否则明确降级为设备级系统统计。
  • 脚本友好:通过 headless 子命令执行启停、状态查询、配置修补、配置校验和托盘自启动设置。
  • 受控的高权限边界:Windows Service、macOS LaunchDaemon 或 Linux systemd 服务持有核心生命周期;本机 IPC 具备协议版本、帧大小限制、安装用户访问控制和 256 位令牌认证。

架构

默认 service 后端的数据流如下:

flowchart LR
    subgraph User["普通用户会话"]
        TUI["Ratatui TUI"]
        Tray["系统托盘"]
        CLI["Headless CLI"]
        Manager["Manager 控制层"]
        TUI --> Manager
        Tray --> Manager
        CLI --> Manager
    end

    Manager -->|"本机 IPC<br/>协议 v2 · 最大 1 MiB · 令牌认证"| Service["原生系统服务"]
    Service --> Core["sing-box / mihomo"]
    Service <--> Config["配置 · 订阅 · 日志 · 备份"]
    Core --> API["Clash API / 系统统计"]
    API --> TUI
    Manager --> Proxy["系统代理 / 登录自启动"]
Loading
  • Windows 使用受 ACL 保护的本机命名管道;Unix 使用权限受限的本地 Socket。
  • 服务安装时生成 32 字节随机令牌,并将客户端令牌限制给安装用户。
  • direct 后端不经过服务,核心和运行状态位于所选 --root 下,TUN 模式按次请求管理员权限。

平台与运行模式

平台矩阵

平台 TUI 系统托盘 原生服务后端 登录时启动托盘
Windows 支持 支持 Windows Service 当前用户 HKCU\...\Run
macOS 支持 支持 LaunchDaemon LaunchAgent
Linux 支持 支持 systemd XDG Autostart

托盘需要图形桌面会话;纯终端或服务器环境可以只使用 TUI 与 headless 命令。具体桌面集成能力仍取决于操作系统和桌面环境。

模式矩阵

模式 自动修补配置 系统代理 TUN 适用场景
system 开启 关闭 常规桌面应用代理
tun 关闭 开启 需要虚拟网卡接管的流量
mixed 开启 开启 同时使用系统代理与 TUN
manual 不修改 不修改 完全由现有配置控制

tunmixed 需要管理员权限。使用已安装的 service 后端时,高权限由系统服务持有;使用 direct 后端时,启动 TUN 会按次提权。

使用前准备

  1. Rust 工具链:项目使用 Rust 2024 edition;请安装 Rust 1.85 或更高版本的稳定工具链。推荐通过 rustup 安装。
  2. 受支持的操作系统:Windows、macOS 或 Linux。
  3. 网络连接:下载 Rust 依赖、核心和订阅时需要访问对应上游地址。
  4. 系统权限:首次安装或修复系统服务,以及 direct 后端启动 TUN 时,需要接受 Windows UAC 或 Unix sudo 提示。
  5. 图形会话:只有使用系统托盘时需要。
  6. 可选的 jq:安装后会优先用于 sing-box JSON 配置修补;未安装时程序使用内置结构化实现。

Important

仓库不包含代理核心、代理节点、订阅或示例用户配置。首次运行后,请在“核心”页安装核心,并导入你有权使用的配置。

下载发布版

可从 GitHub Releases 下载预编译的 v0.1.0。各平台资产如下:

操作系统 架构 发布资产
Windows x86-64 proxy-rs-v0.1.0-x86_64-pc-windows-msvc.zip
Linux x86-64 proxy-rs-v0.1.0-x86_64-unknown-linux-gnu.tar.gz
macOS Intel x86-64 proxy-rs-v0.1.0-x86_64-apple-darwin.tar.gz
macOS Apple silicon ARM64 proxy-rs-v0.1.0-aarch64-apple-darwin.tar.gz

同时下载 SHA256SUMS.txt,并将它与待验证的归档放在同一目录。将下面的 $asset / asset 改为实际下载的文件名。

Linux:

set -euo pipefail
asset=proxy-rs-v0.1.0-x86_64-unknown-linux-gnu.tar.gz
grep -F "  $asset" SHA256SUMS.txt | sha256sum -c -

macOS:

set -euo pipefail
asset=proxy-rs-v0.1.0-aarch64-apple-darwin.tar.gz
grep -F "  $asset" SHA256SUMS.txt | shasum -a 256 -c -

Windows PowerShell:

$asset = 'proxy-rs-v0.1.0-x86_64-pc-windows-msvc.zip'
$line = @(Get-Content .\SHA256SUMS.txt | Where-Object { $_.EndsWith("  $asset") })
if ($line.Count -ne 1) { throw "SHA256SUMS.txt 中未找到唯一的 $asset" }
$expectedHash, $fileName = $line[0] -split '  ', 2
$actualHash = (Get-FileHash -LiteralPath $fileName -Algorithm SHA256).Hash
if ($actualHash -ne $expectedHash) { throw "$fileName 的 SHA-256 校验失败" }
"$fileName 的 SHA-256 校验通过"

每个归档都只有一个同名的版本化顶层目录(去掉 .zip.tar.gz 后缀),其中包含 proxy-rs.exe(Windows)或 proxy-rs(Linux/macOS)、README.mdLICENSE。归档不包含 sing-box、mihomo、代理配置、订阅或任何运行时数据。

Linux 二进制动态依赖 GTK 3、xdo 和 Ayatana AppIndicator 等桌面原生库。在 Ubuntu 上构建或补齐相关依赖时可运行:

sudo apt update
sudo apt install libgtk-3-dev libxdo-dev libayatana-appindicator3-dev

Warning

当前发布资产没有任何代码签名:Windows 二进制未经过 Authenticode 签名,macOS 二进制未使用 Apple Developer ID 签名且未公证,Linux 二进制也未签名。操作系统可能显示安全警告;请先核对 SHA-256,并仅在信任此项目及对应发布标签时运行。

快速开始

git clone https://github.com/MiChongs/Proxy-RS.git
cd Proxy-RS
cargo run --release -- --root . tui

首次进入 TUI 后:

  1. 默认 service 后端会检测系统服务;未安装时自动请求一次管理员权限进行安装或修复。
  2. 切换到“核心”页,按 U 选择并安装 sing-box 或 mihomo 版本。
  3. 切换到“配置”页,按 I 导入本地配置,或按 N 添加订阅。
  4. Enter 选中配置,在“总览”页按 S 启动核心。
  5. M 在四种代理模式之间切换;不希望程序修改配置或系统设置时请选择 manual

Windows 用户也可以双击 Proxy-Rust.bat。脚本会切换到项目目录;若 release 二进制不存在,则先执行 cargo build --release,随后以该目录作为 --root 打开 TUI。

构建与运行

Windows PowerShell

cargo build --release
.\target\release\proxy-rs.exe --root . tui

省略 tui 子命令同样会打开 TUI:

.\target\release\proxy-rs.exe --root .

macOS / Linux

cargo build --release
./target/release/proxy-rs --root . tui

也可以由 Cargo 直接启动:

cargo run --release -- --root . tui

--root 是全局参数,指定其下用于保存本地运行数据的 data/ 目录。未传入时,程序依次尝试 PROXY_RS_ROOT、可执行文件附近的项目目录和当前工作目录。

下文使用 proxy-rs 代表已加入 PATH 的二进制;如果没有安装到 PATH,请替换为 .\target\release\proxy-rs.exe./target/release/proxy-rs

命令参考

TUI 与托盘

proxy-rs --root . tui
proxy-rs --root . tray
  • tui:打开 Ratatui 控制台;没有子命令时也是此行为。
  • tray:启动系统托盘。托盘进程通过运行锁保持唯一;退出托盘不会停止正在运行的核心。
  • 托盘中的“打开控制台”会创建新的可见终端窗口;“打开日志目录”可直接定位运行日志。

原生系统服务

proxy-rs --root . service install
proxy-rs --root . service status
proxy-rs --root . service start
proxy-rs --root . service stop
proxy-rs --root . service uninstall
命令 作用
service install 首次安装或修复系统服务,并部署受保护的服务文件与令牌
service status 查询服务状态
service start 启动原生系统服务
service stop 停止原生系统服务
service uninstall 移除服务注册,保留用户配置与日志

service run 是系统服务的内部入口,不应手动调用。服务默认在开机启动时恢复当前核心;可在 TUI“设置”页按 G 切换该行为。按 B 可在 servicedirect 后端之间切换,按 I 可安装或修复服务。

为避免高权限服务执行任意外部文件,service 后端不接受自定义核心路径。需要使用自定义可执行文件时,请先切换到 direct 后端。

无界面操作

proxy-rs --root . headless status
proxy-rs --root . headless start
proxy-rs --root . headless stop
proxy-rs --root . headless restart
proxy-rs --root . headless patch
proxy-rs --root . headless validate
proxy-rs --root . headless autostart true
proxy-rs --root . headless autostart false
命令 作用
headless status 输出核心、模式、后端、PID、配置、端口、系统代理和托盘自启动状态
headless start / stop / restart 控制当前核心
headless patch 按当前模式修补当前配置
headless validate 使用当前核心校验当前配置
headless autostart true|false 启用或禁用登录时启动托盘

登录自启动实际运行 proxy-rs --root <项目目录> tray,只启动普通用户托盘,不直接启动高权限核心。托盘启动失败时可查看 data/logs/tray-launch.log

快捷键与鼠标

所有字母快捷键均不区分大小写。

页面 按键 行为
全局 Tab / Shift+Tab / 切换页面
全局 / 移动当前列表选择
全局 ? 打开帮助页
全局 Q / Ctrl+C 退出 TUI,核心继续运行
总览 S / R 启动或停止 / 重启核心
总览 M / K 切换代理模式 / 当前核心
总览 A 切换登录时启动托盘
总览 C 为当前配置启用 Clash API
总览 X 关闭选中的活动连接
总览 P / V / T 修补配置 / 校验配置 / 连通性测试
配置 Enter 选中当前配置
配置 I / N / U 导入配置 / 添加订阅 / 批量更新订阅
配置 E / V / P / D 编辑 / 校验 / 修补 / 删除
核心 1 / 2 / C 选择 sing-box / 选择 mihomo / 切换核心
核心 U 打开稳定版、预发布版与历史版本更新向导
核心 X 设置自定义核心路径(仅 direct 后端)
设置 B / I / G 切换后端 / 安装或修复服务 / 切换服务启动时恢复核心
设置 M / A / J 切换模式 / 托盘自启动 / 启动前自动修补
设置 O / X 设置 mixed 端口 / GitHub 下载镜像
日志 L / C 切换 stdout/stderr / 清空当前日志

鼠标左键可以切换页签、点击页面操作、选择配置与活动连接,以及操作更新弹窗;滚轮移动当前列表或弹窗中的版本选择。命中区域按每帧实际布局计算,终端缩放后无需重新启动。

项目结构

Proxy-RS/
├── src/
│   ├── main.rs              # Clap CLI 与程序入口
│   ├── manager.rs           # 核心、配置、订阅与后端协调
│   ├── ui.rs                # Ratatui TUI 与输入处理
│   ├── tray.rs              # 跨平台系统托盘
│   ├── service.rs           # 原生系统服务管理
│   ├── service_runtime.rs   # 服务端核心生命周期
│   ├── service_protocol.rs  # IPC 协议与命令模型
│   ├── service_ipc.rs       # 命名管道 / Unix Socket
│   ├── config.rs            # JSON / YAML 配置处理
│   ├── core.rs              # 核心发现、下载与替换
│   └── telemetry.rs         # Clash API 与系统统计
├── tests/                   # PowerShell 兼容实现测试
├── docs/                    # 项目文档
├── Cargo.toml               # Rust 包清单
├── Cargo.lock               # 锁定依赖
├── Proxy-Rust.bat           # Windows Rust 启动脚本
├── Proxy.ps1                # 兼容保留的 PowerShell 实现
├── Proxy.bat                # PowerShell 实现启动脚本
├── README.md
└── LICENSE

data/ 由应用在运行时创建,不属于源代码发布内容。

运行时数据

--root . 时,普通用户侧数据位于:

data/
├── settings.json
├── cores/
│   ├── sing-box/
│   └── mihomo/
├── configs/
│   ├── sing-box/
│   └── mihomo/
├── logs/
└── runtime/

默认 service 后端还会把服务程序、核心、配置、日志、备份、状态与令牌部署到受保护的系统位置:

平台 服务程序 服务数据
Windows %ProgramFiles%\ProxyRS %ProgramData%\ProxyRS
macOS /Library/PrivilegedHelperTools/ProxyRS /Library/Application Support/ProxyRS
Linux /usr/local/lib/proxy-rs /var/lib/proxy-rs

这些目录可能包含订阅 URL、代理节点、认证信息、访问日志、数据库、缓存和服务令牌。项目的 .gitignore 会排除整个 data/,但在复制、打包、报告问题或公开终端输出前,仍应主动检查并脱敏。

安全与权限

  • 不要提交运行数据:不要将 data/、核心二进制、配置、订阅、日志、缓存、数据库、PID、令牌或备份上传到公开仓库。
  • 最小化高权限范围:推荐使用默认 service 后端。安装时请求一次 UAC / sudo,之后普通操作通过经过认证的本机 IPC 完成。
  • IPC 不等于远程 API:控制端点只用于本机进程,但仍通过访问控制、64 个十六进制字符组成的令牌(32 字节)、恒定时间比较、协议版本和 1 MiB 消息上限进行约束。
  • 谨慎使用 direct:该后端允许自定义核心路径;只运行来源可信且由你验证过的可执行文件。TUN 模式会按次提权。
  • 审查订阅与配置:第三方配置会影响网络路由、DNS 和系统代理。请确认来源和内容,避免把未知配置直接用于高权限 TUN。
  • 理解系统代理影响systemmixed 会修改系统代理;正常停止核心会关闭由应用管理的系统代理,异常退出后应检查操作系统代理设置。
  • 卸载语义service uninstall 仅移除服务注册,不删除用户配置与日志;需要清理数据时请在确认备份后手动处理。

故障排查

提示系统服务未安装或不可用

proxy-rs --root . service status
proxy-rs --root . service install

也可以在 TUI“设置”页按 I 安装或修复。确认已接受 UAC / sudo,并检查服务日志。若当前环境不能安装系统服务,可按 B 切换到 direct,但请留意 TUN 的提权行为。

提示核心未安装

进入“核心”页按 U 安装当前核心。若 GitHub 访问受限,可在“设置”页按 X 修改下载镜像或留空以直连 GitHub。自定义核心路径只允许在 direct 后端设置。

没有当前配置或配置校验失败

  1. 在“配置”页按 I 导入配置,或按 N 添加订阅。
  2. Enter 选中配置。
  3. V 校验;需要按当前模式补全入站时按 P 修补。
  4. 检查 data/logs/。配置修改前会生成备份,校验失败时会尝试恢复。

总览没有活动连接或流量数据

总览只有在当前配置暴露可访问的 Clash API 时才能显示连接级数据。按 C 可为当前配置启用 Clash API;不可用时界面会降级为设备级系统统计,这不代表核心一定停止运行。

托盘未出现或登录自启动失败

  • 确认当前环境存在图形桌面会话。
  • 手动运行 proxy-rs --root . tray 观察错误。
  • 使用 headless autostart true 重新注册。
  • 检查 data/logs/tray-launch.log;托盘进程有唯一运行锁,重复启动不会创建第二个实例。

构建失败

  • 运行 rustc --versioncargo --version,确认工具链支持 Rust 2024 edition。
  • 更新稳定工具链:rustup update stable
  • Linux 上若图形/托盘依赖编译失败,请按编译器提示安装当前发行版所需的原生开发包。
  • 使用锁文件复现依赖:cargo build --locked --release

参与贡献

欢迎通过 Issues 报告可复现的问题,或通过 Pull Request 改进代码和文档。

  1. Fork 仓库并从 main 创建主题分支。
  2. 保持改动聚焦,不要提交 data/、代理配置、订阅、日志、核心二进制或其他本机状态。
  3. 新行为应补充可观察、可重复且与平台隔离的测试。
  4. 提交前建议执行与改动相关的检查:
cargo fmt --check
cargo check --locked
cargo test --locked
cargo run --locked -- --help

修改 PowerShell 兼容实现时,请同时查看 tests/ 中对应的 Pester 测试。提交问题日志前,请删除订阅 URL、代理节点、令牌、文件路径和其他个人信息。

致谢

  • sing-boxmihomo:提供代理核心能力。
  • RatatuiCrossterm:提供跨平台终端界面基础。
  • Claptray-iconservice-manager:支撑 CLI、托盘和原生服务集成。
  • Proxy.ps1 实现及所有测试、反馈与上游开源项目,为本项目的行为和兼容性提供了基础。

许可证

本项目基于 MIT License 开源。代理核心及其依赖保留各自的许可证与使用条款;使用者需自行确认配置、订阅和网络服务符合所在地法律及相关服务条款。

About

Cross-platform sing-box and mihomo manager with native services, Ratatui TUI, tray, telemetry, and CLI.

Topics

Resources

License

Stars

5 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors