摘要
1) 一句话总结
frp 是一个基于 Go 语言开发的高性能反向代理工具,支持 TCP、UDP、HTTP(S) 等协议,能够将 NAT 或防火墙后的本地服务暴露到公网,并支持 P2P 直连模式。
2) 核心要点
- 项目基础:采用 Go 语言编写,遵循 Apache License 2.0 开源协议,在 GitHub 上拥有超 10.4 万 Stars。
- 架构模式:采用 C/S 架构,分为部署在公网的服务器端(
frps)和部署在内网的客户端(frpc)。 - 多协议支持:支持 TCP、UDP、HTTP 和 HTTPS 协议,允许通过自定义域名访问内网 Web 服务,并支持 DNS 查询请求转发。
- 端口与连接复用:支持 TCP 多路复用(tcpmux),允许多个服务(如多个 SSH 服务)共享同一个公网端口。
- 私密暴露服务(STCP):提供 Secret TCP 模式,访客需使用预共享密钥(SecretKey)才能访问内网服务,避免服务直接暴露在公网。
- P2P 直连模式(XTCP):支持客户端之间建立 P2P 连接进行海量数据直传,仅依赖 frps 进行信令交互,不消耗服务器流量。
- 丰富的插件功能:支持通过插件实现 Unix Domain Socket 转发、搭建简单的 HTTP 静态文件服务器、以及将本地 HTTP 服务转换为 HTTPS 等功能。
- V2 版本规划:官方正在开发基于现代化 4/7 层代理(类似 Envoy)的 V2 版本,旨在提供更高的可扩展性,但目前仍以 V1 版本的优化和迭代为主。
3) 风险与不足
- 杀毒软件误报风险:由于 frpc 具备绕过防火墙端口限制的网络代理能力,部分杀毒软件会将其误判为恶意软件并自动删除(需手动添加白名单/排除项)。
- 版本不兼容风险:正在开发中的 V2 版本将与当前的 V1 版本完全不兼容。
- V1 架构局限性:官方明确指出,当前 V1 版本在配置管理、权限验证、证书管理和 API 管理等模块的设计不够现代化,且现有的服务端插件模式不够灵活。
- P2P 穿透失败风险:XTCP(P2P 模式)可能无法在所有类型的 NAT 设备上成功穿透,官方建议在失效时回退使用 STCP 模式。
功能与定位
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
典型使用场景
- 作为通用开发工具用于工程协作与效率提升。
- 适用于个人与团队的日常研发流程。
核心功能
- 提供稳定的通用工程能力。
- 支持跨平台或多环境使用。
- 依赖开源社区持续迭代。
特色与差异点
- 仓库长期活跃,最近更新时间为 2026-02-22T12:31:06Z。
- 项目创建于 2015-12-21T15:24:59Z,具备持续迭代与社区沉淀。
- 以
Go为主语言,聚焦该技术栈的工程实践。
使用方式概览
- 阅读仓库 README 与官方文档,确认适配场景与依赖条件。
- 按项目推荐方式完成安装与初始化,再从示例或最小流程开始验证。
- 在生产使用前补齐权限控制、日志监控和版本固定策略。
限制与注意事项
- 使用前应先核对许可证、项目维护状态与安全边界。
链接
- 仓库:https://github.com/fatedier/frp
- README:https://raw.githubusercontent.com/fatedier/frp/dev/README.md
- Releases:https://github.com/fatedier/frp/releases