用一个 Web 管理台配置、运行和监控 FRP:不再手写多份 TOML,也不必逐个守护 frpc/frps 进程。
RustFRP 是一个兼容原生 FRP 的管理与运维工具,面向个人、家庭实验室和小型团队。它把服务器、代理、绑定和 Visitor 配置保存在 SQLite 中,按需生成标准 FRP TOML,并负责原生 frpc/frps 的安装、启动、热重载、故障恢复和观测。
RustFRP 不修改 FRP 协议,也不接管流量转发。已有的现代格式 frpc.toml 可以直接导入;底层隧道仍由原生 frpc/frps 完成。
快速开始 · 核心能力 · 系统架构 · 部署说明 · 开发文档 · 参与贡献
界面基于 React、shadcn/ui 和 Recharts,支持中文 / English、浅色 / 深色主题。
以下截图来自真实前端页面,使用隔离的演示数据:3 台服务器、6 条代理规则、8 条分配关系。流量曲线、运行状态和日志均为模拟内容,不代表性能测试结果。
截图可通过演示截图脚本重新生成,不向真实管理服务写入数据。
- 集中管理配置:在中英文 WebUI 中维护服务器、代理、绑定关系和 Visitor,SQLite 是唯一配置来源。
- 同时运行多个 frpc:每个服务器配置对应独立进程;单个连接故障不会影响其他实例。
- 兼容原生 FRP:生成标准 TOML,支持导入现有配置,不引入私有隧道协议。
- 按需安装与选择版本:管理台无需 frpc 即可启动;安装时校验官方 SHA256,每台服务器可固定版本或跟随系统默认。
- 查看流量去向:每秒采样,按上游服务器、本地代理或系统网卡查看速率与缓存区间汇总。
- 面向长期运行:支持热重载、优雅退出、崩溃恢复、指数退避和结构化故障诊断。
- 可选集中运维:可通过 Control/Agent 管理远端 frps,并接入 Prometheus、Grafana 和 Alertmanager。
- 安全地扩展:提供 REST API、租户与权限策略,以及受权限、时间、计算量和内存限制的无 WASI 插件沙箱。
| 领域 | 能力 |
|---|---|
| 配置管理 | Profile、Proxy、Binding、Visitor 与多环境管理;批量创建 TCP/UDP 映射;端口冲突检查 |
| FRP 协议 | TCP、UDP、HTTP、HTTPS、STCP、XTCP、SUDP、TCPMUX;Token、OIDC、user、serverUser |
| 进程守护 | 启动、停止、重启、热重载、优雅退出、崩溃恢复、重复故障归并 |
| 版本管理 | Linux、Windows、macOS 的 x86_64/arm64;后台安装;官方源、GHFast、GH-Proxy 或自定义 HTTPS 镜像;按服务器选择版本;官方校验和验证 |
| 迁移备份 | 事务化导入现代 frpc.toml;一致性 SQLite 备份导出 |
| 服务端管理 | Agent 主动拉取配置,ETag 缓存,frps verify 校验,原子切换与失败回滚 |
| 可观测性 | 资源趋势与运行进程侧栏;三种口径的流量统计;日志筛选;可选 Prometheus / Grafana |
| API 与扩展 | REST API、Token/策略鉴权、租户隔离、WASM 插件及参考插件 |
RustFRP 的核心链路是:SQLite 保存期望状态 → 生成并校验 TOML → 原生 frpc/frps 执行转发。WebUI 和 REST API 负责管理,Daemon 负责本地进程生命周期;Control/Agent 与监控组件均为可选能力,故障时不应阻断既有 FRP 数据面。
更完整的设计约束和架构决策见 系统架构设计。
使用 v0.4.0 镜像(Linux amd64 / arm64):
export RUSTFRP_API_TOKEN="$(openssl rand -hex 32)"
# 保存这个 Token,稍后用于登录管理台
printf '%s\n' "$RUSTFRP_API_TOKEN"
docker run -d --name rustfrp --restart unless-stopped \
-p 127.0.0.1:7900:7900 \
-v rustfrp-data:/data \
-e RUSTFRP_API_TOKEN \
ghcr.io/tatencn/rustfrp:0.4.0打开 http://127.0.0.1:7900/,输入上面的 Token。容器默认不下载 frpc,即使尚未安装 frpc,也能打开前端、编辑配置和使用管理 API。数据保存在 rustfrp-data 卷中。
- 在「系统状态 → FRP 版本」选择版本和下载渠道,安装后设为系统默认。
- 在「服务器配置」添加 frps 连接;需要时为该服务器固定 frpc 版本。
- 在「代理规则」创建本地服务映射,再到「代理分配」将代理分配给服务器。
- 启动实例,查看日志和流量,验证映射地址。
上面的端口仅绑定本机;远程部署可通过 SSH 转发或 TLS 反向代理访问。容器内的 127.0.0.1 指向容器自身,代理宿主机服务时应填写容器可达的宿主机地址。
需要 frps、Control、Prometheus、Grafana 和 Alertmanager 的完整部署时,在仓库根目录执行:
mkdir -p deploy/compose/secrets
openssl rand -hex 32 > deploy/compose/secrets/rustfrp_api_token.txt
export GRAFANA_ADMIN_PASSWORD='replace-with-a-long-password'
docker compose up -d --build启动后可访问:
| 服务 | 默认地址 | 用途 |
|---|---|---|
| RustFRP | http://127.0.0.1:7900/ | 配置和管理 FRP |
| Grafana | http://127.0.0.1:3001/ | 查看集中监控仪表盘 |
| Prometheus | http://127.0.0.1:9090/ | 查询监控指标 |
| Alertmanager | http://127.0.0.1:9093/ | 查看和管理告警 |
Compose 会启动 daemon、frps、control 及监控组件。数据库、运行时配置、FRP 二进制和日志保存在数据卷中。增加节点、调整端口和生产部署方式见 Compose 部署说明。
构建需要 Rust 1.95+、Bun 和 Just。管理服务启动不依赖 frpc 或下载源;实际建立隧道时才需要安装 frpc,并准备可用的 frps。
# 终端一:运行内嵌 WebUI 和 HTTP API 的 daemon
just dev-daemon
# 终端二:按需启动前端热更新
just dev-webui也可以直接指定运行参数:
cargo run -p rustfrp-daemon -- \
--config-dir ~/.rustfrp/runtime \
--db-path ~/.rustfrp/config.db \
--api-listen 127.0.0.1:7900 \
--api-token <token>启动后打开 http://127.0.0.1:7900/,按上述安装版本、配置服务器和分配代理的顺序操作。
系统状态页可一次导入现代格式 frpc.toml,包括 Profile、Proxy、Binding 和 Visitor。导入在单个数据库事务中完成;失败不会留下不完整配置。同名 Profile 会安全重命名,Proxy 和 Visitor 的对外名称保持不变。
同一页面可以下载一致性的 SQLite 备份。备份包含认证 Token 等敏感配置,应按密钥文件保管,不要提交到 Git 或通过公开渠道传输。
POST /api/v1/config/import
GET /api/v1/config/export
在「系统状态 → FRP 版本」按需安装。下载在后台运行,页面显示进度和错误;安装本身不会切换默认版本或重启实例。版本按 versions/<version>/<platform>/ 隔离存放。
- 下载渠道:GitHub 官方、GHFast(
ghfast.top)、GH-Proxy 或自定义 HTTPS 地址。第三方仅提供发布归档,SHA256 校验信息仍来自官方;获取失败或校验不符时停止安装。 - 服务器版本:每个服务器配置对应一个 frpc 进程,该服务器下的代理共用版本。在服务器列表点击版本按钮,选择固定版本或跟随系统默认;保存后点击「重启并应用版本」生效。
- 系统默认:切换默认版本仅重启跟随默认的运行实例,固定版本实例不受影响。切换失败会恢复原默认并尝试恢复相关进程。
- 删除保护:被配置引用、当前默认或仍有进程运行的版本不能删除。
默认离线启动管理服务。旧参数 --no-auto-download / RUSTFRP_NO_AUTO_DOWNLOAD=true 继续兼容;只有显式设置 --auto-download / RUSTFRP_AUTO_DOWNLOAD=true 才在启动时下载,此时可通过 RUSTFRP_FRP_VERSION 指定下载版本,启动可能等待网络。
详见 frpc 版本与安装渠道。
仪表盘展示 CPU / 内存趋势,右侧集中展示运行实例与最近异常。网络流量后台每 1 秒采样,页面每 5 秒刷新,可切换三种统计口径:
| 口径 | 查看内容 |
|---|---|
| 上游服务器 | 当前环境全部或单个服务器的 TCP 收发速率、区间汇总,包含心跳与加密开销 |
| 本地代理 | 按服务器及代理分别统计,可汇总同一代理在不同服务器上的流量 |
| 系统网卡 | 守护进程所在网络命名空间的收发量,可筛选出口网卡;容器内不一定等同于物理宿主机 |
三种口径不能相加。历史仅保存在内存中,最多保留最近一小时,每类上限 36,000 条样本,多对象共享容量;服务重启后清空。区间汇总只包含有效采样,不是日/月账单。
上游流量采集当前支持 Linux 上直连的 TCP / WebSocket / WSS;短连接可能漏采,UDP、QUIC 等不适用。完整支持范围、统计方向和排查方法见 网络流量监控。
Control 以只读方式从模板目录提供 <node-id>.toml,Agent 使用 Bearer Token 主动拉取。候选配置通过 TOML 检查及 frps verify 后才会原子替换;Control 不可用时继续使用最后一份有效缓存。Agent 退出不会终止 frps,重启后可以通过 PID 文件接管进程。
export RUSTFRP_AGENT_TOKEN='replace-with-a-long-random-token'
# Control
cargo run -p rustfrp-control -- \
--templates-dir ./deploy/agent/templates \
--targets ./targets.json
# frps 节点;不传 --frps-path 时自动下载并校验官方 frps
cargo run -p rustfrp-agent -- \
--node-id edge-1 \
--control-url http://control.example.com:3000模板 Pull API 支持 ETag/If-None-Match。生产环境应在 Control 前启用 TLS 反向代理。
crates/
├── client/ # SQLite CRUD、TOML 生成、进程守护
├── rustfrp-bin/ # FRP 二进制下载、校验、解压与版本管理
├── rustfrp-daemon/ # HTTP API、内嵌 WebUI 和本地管理入口
├── rustfrp-sdk/ # 插件 SDK
├── common/ # 日志、信号、错误和插件运行时
└── server/
├── control/ # 指标拉取和 Agent 配置模板 API
└── agent/ # frps 配置拉取、校验、缓存与进程守护
plugins/
├── webui/ # React + shadcn/ui + Vite 管理界面
└── official/ # 官方参考 WASM 插件
Linux 下可使用统一的 Bun 开发管理入口,自动构建 WebUI / daemon 并提供本机及局域网 HTTPS 预览:
bun run mode:start # 构建并后台启动
bun run mode:status # 查看真实地址与健康状态
bun run mode:reload # 重新构建并重启
bun run mode:stop # 停止,保留数据
bun run mode:help # 中文分组帮助首次访问需要信任本地自签证书,并在界面填写 .local/mode/api-token 中的 Token。管理器使用独立开发数据库;完整命令、隔离边界及证书信任说明见 Bun 开发管理指南。
just test-fast # 快速单元测试
just test-all # 全量测试(含集成测试)
just lint # rustfmt --check + clippy
just dev-webui # 前端开发模式
just build-release # 发布构建
bash scripts/e2e-local.sh # 双 frps + 双 frpc 本地闭环测试项目使用 dev 作为默认开发分支。请从 dev 创建短期分支,并向 dev 提交 Pull Request;只有发布 PR 可以从 dev 合入 main。完整流程见 贡献指南。
AGPL-3.0-only © RustFRP contributors





