菜单

概述

相关源文件

frp (Fast Reverse Proxy) 是一款开源的内网穿透应用。它允许用户通过一台拥有公网 IP 地址的服务器,将 NAT 或防火墙后面的内网服务暴露到互联网。

本页面提供了 frp 系统的概述、架构和主要功能。关于特定组件的详细信息,请参阅其对应的 wiki 页面。

什么是 frp?

frp 包含两个主要组件:

  • frps (Server): 运行在拥有公网 IP 地址的机器上,作为所有入站连接的入口点。
  • frpc (Client): 运行在私有网络中的机器上,连接到 frps 以建立隧道,用于暴露本地服务。

这些组件协同工作,在私有网络和公共互联网之间创建安全的隧道,使得外部能够访问原本无法访问的服务。

来源

系统架构

下图展示了 frp 的高层架构:

frp 采用客户端-服务器模型运行。

  1. 服务器组件 (frps) 运行在拥有公网 IP 地址的机器上。
  2. 客户端组件 (frpc) 运行在私有网络中的机器上。
  3. frpc 与 frps 建立控制连接。
  4. 远程客户端连接到 frps,frps 将流量转发给 frpc,frpc 再将流量转发给本地服务。
  5. 服务器和客户端都提供 Web 界面用于管理。

来源

核心组件

frp 的功能建立在几个协同工作的核心组件之上。

控制系统

控制系统负责 frps 和 frpc 之间的通信管理,包括连接建立、心跳和代理注册。

代理系统

代理系统负责处理不同类型的代理,并在客户端和本地服务之间转发流量。frp 支持多种代理类型,包括 TCP、UDP、HTTP、HTTPS、STCP、XTCP 等。

传输层

frp 支持多种用于控制连接的传输协议:

  • TCP (默认)
  • KCP (基于 UDP 的快速可靠协议)
  • QUIC (基于 UDP 的多路复用传输)
  • WebSocket

管理界面

服务器和客户端都提供 Web 界面用于配置、监控和管理。

来源

代理类型

frp 支持多种代理类型以满足不同的网络需求。

代理类型描述用例
TCP基本 TCP 转发通用,SSH 访问
UDPUDP 转发DNS、游戏、流媒体
HTTPHTTP 转发(支持域名匹配)带自定义域名的 Web 服务
HTTPSHTTPS 转发(支持域名匹配)安全 Web 服务
STCPSecret TCP,需要认证私有服务访问
XTCPP2P 直接连接高带宽数据传输
TCPMux单端口 TCP 多路复用多个服务共享一个端口
SUDPSecret UDP,需要认证私有 UDP 服务访问

来源

主要功能

frp 提供了一系列丰富的功能,以应对各种内网穿透场景。

认证和安全

  • TLS 加密控制连接
  • Token 和 OIDC 认证方式
  • 可选的代理数据加密和压缩

高级网络功能

  • TCP 流多路复用,优化连接使用
  • 多个代理服务之间的负载均衡
  • 带宽限制和连接池
  • NAT 穿透以实现 P2P 连接

管理与监控

  • 服务器和客户端的 Web 仪表盘
  • Prometheus 集成以获取指标
  • 服务健康检查
  • 配置热重载

可扩展性

  • 插件系统,支持自定义行为
  • 虚拟网络 (VirtualNet),用于三层连接
  • SSH 隧道网关,无需 frpc 即可建立代理

来源

常见用例

frp 常用于以下场景:

  1. 通过 SSH 访问局域网计算机

    • 将本地 SSH 服务暴露到互联网
    • 多个 SSH 服务共享同一端口
  2. 发布带自定义域名的 Web 服务

    • 使内部 Web 服务可以通过域名访问
    • 为本地 HTTP 服务添加 HTTPS
  3. 安全地暴露服务

    • 使用 STCP 模式进行私有服务访问
    • 满足高带宽需求的点对点连接
  4. UDP 服务转发

    • DNS、游戏服务器、流媒体服务
  5. 文件共享和简单的 HTTP 服务

    • 无需专用 Web 服务器即可提供静态文件

来源

配置系统

frp 使用配置文件来定义其行为。自 v0.52.0 起,它支持 TOML、YAML 和 JSON 格式(INI 已弃用)。配置可以拆分为多个文件,并且可以包含环境变量。

示例客户端配置文件结构

示例服务器配置文件结构

如需完整的配置选项,请参考本 wiki 的 配置 部分。

来源

项目状态

frp 正在积极开发中,并且在测试和生产环境中得到了广泛应用。master 分支包含稳定版本,dev 分支用于持续开发。

我们计划在未来重写 major version 2,这将重构和升级系统的各个方面,但将与 version 1 不兼容。当前版本预计将从 v0 过渡到 v1,同时保持兼容性。

来源

frp 拥有不断增长的生态系统,包含许多相关项目:

  • gofrp/plugin: 包含用于扩展 frp 功能的插件的仓库。
  • gofrp/tiny-frpc: 使用 SSH 协议实现的一个轻量级 frp 客户端版本。

来源