frp (Fast Reverse Proxy) 是一款开源的内网穿透应用。它允许用户通过一台拥有公网 IP 地址的服务器,将 NAT 或防火墙后面的内网服务暴露到互联网。
本页面提供了 frp 系统的概述、架构和主要功能。关于特定组件的详细信息,请参阅其对应的 wiki 页面。
frp 包含两个主要组件:
这些组件协同工作,在私有网络和公共互联网之间创建安全的隧道,使得外部能够访问原本无法访问的服务。
来源
下图展示了 frp 的高层架构:
frp 采用客户端-服务器模型运行。
来源
frp 的功能建立在几个协同工作的核心组件之上。
控制系统负责 frps 和 frpc 之间的通信管理,包括连接建立、心跳和代理注册。
代理系统负责处理不同类型的代理,并在客户端和本地服务之间转发流量。frp 支持多种代理类型,包括 TCP、UDP、HTTP、HTTPS、STCP、XTCP 等。
frp 支持多种用于控制连接的传输协议:
服务器和客户端都提供 Web 界面用于配置、监控和管理。
来源
frp 支持多种代理类型以满足不同的网络需求。
| 代理类型 | 描述 | 用例 |
|---|---|---|
| TCP | 基本 TCP 转发 | 通用,SSH 访问 |
| UDP | UDP 转发 | DNS、游戏、流媒体 |
| HTTP | HTTP 转发(支持域名匹配) | 带自定义域名的 Web 服务 |
| HTTPS | HTTPS 转发(支持域名匹配) | 安全 Web 服务 |
| STCP | Secret TCP,需要认证 | 私有服务访问 |
| XTCP | P2P 直接连接 | 高带宽数据传输 |
| TCPMux | 单端口 TCP 多路复用 | 多个服务共享一个端口 |
| SUDP | Secret UDP,需要认证 | 私有 UDP 服务访问 |
来源
frp 提供了一系列丰富的功能,以应对各种内网穿透场景。
来源
frp 常用于以下场景:
通过 SSH 访问局域网计算机
发布带自定义域名的 Web 服务
安全地暴露服务
UDP 服务转发
文件共享和简单的 HTTP 服务
来源
frp 使用配置文件来定义其行为。自 v0.52.0 起,它支持 TOML、YAML 和 JSON 格式(INI 已弃用)。配置可以拆分为多个文件,并且可以包含环境变量。
示例客户端配置文件结构
示例服务器配置文件结构
如需完整的配置选项,请参考本 wiki 的 配置 部分。
来源
frp 正在积极开发中,并且在测试和生产环境中得到了广泛应用。master 分支包含稳定版本,dev 分支用于持续开发。
我们计划在未来重写 major version 2,这将重构和升级系统的各个方面,但将与 version 1 不兼容。当前版本预计将从 v0 过渡到 v1,同时保持兼容性。
来源
frp 拥有不断增长的生态系统,包含许多相关项目:
来源