摘要

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 为主语言,聚焦该技术栈的工程实践。

使用方式概览

  1. 阅读仓库 README 与官方文档,确认适配场景与依赖条件。
  2. 按项目推荐方式完成安装与初始化,再从示例或最小流程开始验证。
  3. 在生产使用前补齐权限控制、日志监控和版本固定策略。

限制与注意事项

  • 使用前应先核对许可证、项目维护状态与安全边界。

链接

关联主题