webui4frpc: 独立可用的可视化 frpc 控制器 (M0)

- 零 frp 源码依赖,单二进制 (Go + Vue3 + VueFlow + Element Plus)
- 画布多对多连线,渲染 tcp/udp/http/https frpc 配置
- worker 进程管理:自愈、日志轮转、崩溃退避重启
- frpc 一键安装 (GitHub Releases) + 手动指定路径
- 三页 UI:状态(默认)/连接配置/设置
- 状态页实时节点/转发状态,节点可增删改启停
- 画布冲突检查:端口/域名冲突标红 + 弹窗拦截保存
- backend 单测覆盖 store/render/process/httpapi/install
- plan.md + FRPC_FEATURES_AUDIT.md 文档
This commit is contained in:
2026-08-17 11:00:26 +08:00
commit c1936887a2
40 changed files with 7868 additions and 0 deletions

109
FRPC_FEATURES_AUDIT.md Normal file
View File

@ -0,0 +1,109 @@
# webui4frpc 对 frpc 高级功能支持审查报告
> 审查基准frp v0.71 的 frpc 配置能力(官方文档支持的 proxy 类型、认证、传输、插件等)。
> 审查范围:当前 webui4frpc 的画布数据模型Local/Remote/Link、渲染器internal/render能表达和输出什么。
## 一、总体结论
当前实现聚焦「最小可用」:**TCP/HTTP 单端口转发 + token 认证** 已打通并验证(多个远程节点、多对多连线、真实连通)。但 frpc 的**大部分高级能力尚未建模**,且**已有能力因模型缺字段而不可配置**。适合作为 1.0 基线,但要覆盖更广使用场景需系统性扩展。
## 二、能力支持矩阵
### 2.1 代理类型proxy type
| 类型 | 状态 | 说明 |
|---|---|---|
| tcp | ✅ | 完整支持LocalIP/LocalPort/RemotePort |
| udp | 🟡 部分 | 渲染支持但协处理器KCP/加密等)未建模 |
| http | 🟡 部分 | 支持 customDomains 默认域名,但无法配置 locations/headers/负载均衡 |
| https | 🟡 部分 | 同 http未建模证书/SNI |
| stcp | ❌ | 加密点对点穿透完全不支持 |
| sudp | ❌ | 同 stcp |
| xtcp | ❌ | P2P TCP 模拟(依赖 kcp-go不支持 |
| tcpmux | ❌ | HTTP/2 多路复用multiplexer/http2不支持 |
### 2.2 认证auth
| 能力 | 状态 | 说明 |
|---|---|---|
| 服务端 token | ✅ | Remote 有 Token 字段 |
| OIDC | ❌ | frpc 支持 openid connectcoreos/go-oidc未建模 |
| TLS 客户端证书 | ❌ | 未建模 |
### 2.3 传输transport
| 能力 | 状态 | 说明 |
|---|---|---|
| tcp / kcp / websocket / quic | 🟡 | Remote 无 protocol 字段,无法选择 |
| 加密 / 压缩useEncryption/useCompression | ❌ | 未建模 |
| 带宽限制bandwidthLimit | ❌ | 未建模 |
| 连接池poolCount | ❌ | 未建模 |
| TLS 传输transport.tls.enable | ❌ | 未建模 |
| Connect Server 超时/重连 | ❌ | 未建模(有默认值) |
### 2.4 负载均衡与健康检查
| 能力 | 状态 | 说明 |
|---|---|---|
| 多个 local 提供同一组group/loadBalancer | ❌ | 未建模 group/groupKey |
| health checktcp/http失败剔除 | ❌ | 未建模 HealthCheckConfig |
### 2.5 域名与路由http/https
| 能力 | 状态 | 说明 |
|---|---|---|
| customDomains 多域名 | 🟡 | 可输出,但画布 local 无域名字段(写死 name.local |
| subdomain | 🟡 | render 支持生成,但依赖服务器 subdomain_host演示环境未启用 |
| locations路径路由 | ❌ | 未建模 |
| httpHeader 改写 / hostHeaderRewrite | ❌ | 未建模 |
| basicAuth站点访问认证 | ❌ | 未建模 |
### 2.6 插件plugin与虚拟 IP
| 能力 | 状态 | 说明 |
|---|---|---|
| client pluginhttp2https/static/server 等) | ❌ | 未建模
| vmnet虚拟 IP | ❌ | 未建模 |
### 2.7 其它
| 能力 | 状态 | 说明 |
|---|---|---|
| 元数据 metadatas / annotations | ❌ | Remote 有 URL 但无 metadatas |
| start (enabled 控制) | ✅ | Remote 有 Enabled |
| 全局配置byteLimit 等) | ❌ | 未建模 |
## 三、具体缺口细节
1. **Local/Remote 模型过简**Local 只有 name/ip/port/protocol缺 encryption/compression/bandwidth/plugin/metadatas/域名/路径/健康检查等。Remote 缺 protocol(kcp/quic/ws)、tls、oidc、pool 等。
2. **渲染器只输出 6 个字段**`brpcProxy` 仅 name/type/localIP/localPort/remotePort/customDomains/subdomain。**transport 段只有空 protocol**frpc 其它传输参数全部缺失。
3. **画布节点编辑只暴露 ip/port/协议**:连已有的 token/url 也只在部分入口可编辑,更别说高级字段。
4. **udp 渲染无 UDPPacketSize 等**、**https 无证书流程**。
## 四、用户实际会遇到的典型场景覆盖
| 场景 | 现状 |
|---|---|
| 内网 Web 服务对外http+tcp | ✅ 覆盖 |
| 普通 TCP 服务(数据库/SSH/自建协议) | ✅ 覆盖 |
| 加密内网通信stcp/sudp | ❌ 若用户需要点对点加密穿透则无法完成 |
| 多域名多路径挂多个站点到一台 frps | 🟡 部分(域名选择没做) |
| 限速 / 压缩 / 加密传输 | ❌ |
| 负载均衡 / 健康检查 | ❌ |
| kcp/quic 弱网优化 | ❌ |
## 五、优先级建议
| 优先级 | 项 | 理由 |
|---|---|---|
| P0 | 画布冲突检查(本次已实现) | 防止重复 remotePort / 域名重复导致配置直接失败 |
| P0 | Local 增加「连接参数」高级区encryption / compression / bandwidthLimit / poolCount / metadatas | 高频项,改动小(渲染器 + 表单) |
| P1 | Remote 增加 transport 选择protocol(tcp/quic/kcp/websocket) 、tls.enable、poolCount | 让 kcp/quic/web 场景可用 |
| P1 | local http/https 增加域名字段customDomains/subdomain 可编辑)+ locations | 覆盖多站点部署 |
| P2 | 健康检查 / 负载均衡group | 中频 |
| P2 | 插件 stub / 虚拟 IP | 低频,且 UI 复杂 |
| P3 | OIDC / TLS 证书 / 高级插件 | 低频,可延后 |
## 六、结论
webui4frpc 已具备**生产可用的核心**tcp/http 多节点多对多转发 + 状态页 + worker 管理),且面向「避免运维手写配置」的目标价值明确。但要覆盖 frpc 完整能力需分阶段补齐:**先做 P0冲突检查已做+ P0 高级传输参数建模**,再逐级推进,避免一上来堆字段导致画布复杂化。建议 UI 采用「折叠高级区」或「按类型动态显示字段」,保持画布简洁。