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 connect(coreos/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 check(tcp/http,失败剔除) |
❌ |
未建模 HealthCheckConfig |
2.5 域名与路由(http/https)
| 能力 |
状态 |
说明 |
| customDomains 多域名 |
🟡 |
可输出,但画布 local 无域名字段(写死 name.local) |
| subdomain |
🟡 |
render 支持生成,但依赖服务器 subdomain_host(演示环境未启用) |
| locations(路径路由) |
❌ |
未建模 |
| httpHeader 改写 / hostHeaderRewrite |
❌ |
未建模 |
| basicAuth(站点访问认证) |
❌ |
未建模 |
2.6 插件(plugin)与虚拟 IP
| 能力 |
状态 |
说明 |
| client plugin(http2https/static/server 等) |
❌ |
未建模 |
| vmnet(虚拟 IP) |
❌ |
未建模 |
2.7 其它
| 能力 |
状态 |
说明 |
| 元数据 metadatas / annotations |
❌ |
Remote 有 URL 但无 metadatas |
| start (enabled 控制) |
✅ |
Remote 有 Enabled |
| 全局配置(byteLimit 等) |
❌ |
未建模 |
三、具体缺口细节
- Local/Remote 模型过简:Local 只有 name/ip/port/protocol;缺 encryption/compression/bandwidth/plugin/metadatas/域名/路径/健康检查等。Remote 缺 protocol(kcp/quic/ws)、tls、oidc、pool 等。
- 渲染器只输出 6 个字段:
brpcProxy 仅 name/type/localIP/localPort/remotePort/customDomains/subdomain。transport 段只有空 protocol,frpc 其它传输参数全部缺失。
- 画布节点编辑只暴露 ip/port/协议:连已有的 token/url 也只在部分入口可编辑,更别说高级字段。
- 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 采用「折叠高级区」或「按类型动态显示字段」,保持画布简洁。