本文档描述了 frp (Fast Reverse Proxy) 中提供的各种代理类型、它们的特定配置和用例。理解这些代理类型对于有效地设置 frp 以将私有网络中的不同服务暴露到公共互联网至关重要。
有关所有代理类型通用的代理配置选项的信息,请参阅 配置。
frp 支持多种代理类型,每种都针对特定的用例和协议进行了设计。
| 代理类型 | 描述 | 用例 |
|---|---|---|
| TCP | 标准 TCP 代理 | SSH、通用 TCP 服务 |
| UDP | UDP 协议代理 | DNS、游戏、流媒体 |
| HTTP | HTTP 协议代理 | 具有域名路由的 Web 服务 |
| HTTPS | HTTPS 协议代理 | 安全 Web 服务 |
| TCPMUX | TCP 端口多路复用 | 单个端口上的多个服务 |
| STCP | 安全 TCP | 带身份验证的私有服务 |
| XTCP | P2P TCP | 直接点对点连接 |
| SUDP | 安全 UDP | 私有 UDP 服务 |
这些代理类型在代码库中被定义为常量。
来源:pkg/config/v1/proxy.go219-228
下图说明了不同代理类型在代码库中的组织方式。
来源:pkg/config/v1/proxy.go30-462
下图显示了不同代理类型如何处理连接。
TCP 和 UDP 是最简单的代理类型,将流量从服务器上指定的端口转发到客户端上的端口。
TCP 示例
UDP 示例
TCP 和 UDP 代理都需要 remotePort,它指定了将要暴露给互联网的 frps 服务器上的端口。
来源:README.md142-177 pkg/config/v1/proxy.go251-289
HTTP 和 HTTPS 代理允许您使用自定义域名和基于路径的路由来暴露 Web 服务。
HTTP 示例
HTTPS 示例
HTTP 代理支持其他功能:
locations:根据 URL 路径路由请求httpUser 和 httpPassword:HTTP 基本身份验证hostHeaderRewrite:修改 Host 头部来源:README.md229-268 pkg/config/v1/proxy.go290-353
TCPMUX 允许多个 TCP 服务共享 frps 服务器上的单个端口。目前,唯一支持的多路复用器是 httpconnect (HTTP CONNECT 隧道)。
示例
这允许根据 HTTP CONNECT 请求中的域名连接到不同的服务。
来源:README.md180-227 pkg/config/v1/proxy.go354-393
STCP 和 XTCP 提供未公开暴露的安全和私有连接。
STCP 示例
XTCP 示例 (P2P)
两者都需要另一个 frpc 实例上的相应访问者配置来建立连接。
STCP 访问者
XTCP 访问者
关键区别
来源:README.md387-473 pkg/config/v1/proxy.go394-439 pkg/config/v1/visitor.go140-176
SUDP 类似于 STCP,但用于 UDP 协议。
示例
SUDP 访问者
来源:pkg/config/v1/proxy.go440-462 pkg/config/v1/visitor.go146-150
frp 包含一个插件系统,可以扩展代理的功能。插件可以修改连接的处理方式。
示例插件包括:
unix_domain_socket:连接到 Unix 域套接字http_proxy:HTTP 代理服务器socks5:SOCKS5 代理服务器static_file:服务静态文件http2https、https2http、https2https:协议转换来源:README.md307-332 test/e2e/v1/plugin/client.go20-451 pkg/plugin/client/http2http.go15-92
下表提供了根据您的需求选择哪种代理类型的指导。
| 要求 | 推荐代理类型 |
|---|---|
| 具有固定端口的标准服务 | TCP 或 UDP |
| 具有域名的 Web 服务 | HTTP 或 HTTPS |
| 单个端口上的多个服务 | TCPMUX |
| 私有服务(未公开暴露) | STCP 或 SUDP |
| 直接点对点连接 | XTCP |
| 高级连接处理 | 带插件的代理 |
所有代理类型都共享 frp 仓库中 ProxyBaseConfig 结构中定义的通用基础配置选项。
| 字段 | 描述 |
|---|---|
| 姓名 | 代理的唯一标识符 |
| 类型 | 代理类型(tcp、udp、http 等) |
| 传输 | 加密和压缩设置 |
| LoadBalancer | 用于负载均衡的组和密钥 |
| HealthCheck | 健康检查配置 |
| LocalIP | 本地服务的 IP |
| LocalPort | 本地服务的端口 |
| 插件 | 插件配置(如果存在) |
每种代理类型都通过特定于类型的选项扩展了此功能。有关配置选项的完整列表,请参阅 frp 仓库中的完整配置文件示例。
来源:pkg/config/v1/proxy.go110-134 conf/frpc_full_example.toml148-462