本文档介绍了 FRP 中可用的扩展功能和插件系统,这些系统增强了其超出基本代理功能的能力。功能扩展使 FRP 能够转换流量、提供静态内容、实现高级身份验证机制以及在客户端之间建立虚拟网络连接。有关基本代理配置的信息,请参阅 代理类型。
FRP 提供了两种主要的扩展功能机制:
插件系统允许 FRP 客户端在转发连接之前通过各种处理程序来处理连接。这使得转换、身份验证和其他高级行为成为可能。
FRP 的插件系统由插件创建者注册表、插件接口以及各种插件的具体实现组成。每个插件都实现了 pkg/plugin/client/plugin.go66-71 接口,该接口要求
Name() 的方法,该方法返回插件类型标识符Handle() 的方法,该方法处理传入的连接Close() 的方法,用于在插件停止时进行清理插件通过 Register() 函数 pkg/plugin/client/plugin.go41-46 进行注册,并通过 Create() 函数 pkg/plugin/client/plugin.go48-55 创建。
来源:pkg/plugin/client/plugin.go
FRP 包含以下内置插件:
| 插件类型 | 描述 | 配置键 | 源文件 |
|---|---|---|---|
| HTTP 代理 | 提供具有可选身份验证的 HTTP 代理功能 | http_proxy | pkg/plugin/client/http_proxy.go |
| SOCKS5 | 实现 SOCKS5 代理协议 | socks5 | pkg/plugin/client/socks5.go |
| 静态文件 | 通过 HTTP 提供静态文件 | static_file | pkg/plugin/client/static_file.go |
| Unix 域套接字 | 将流量转发到 Unix 套接字 | unix_domain_socket | pkg/plugin/client/unix_domain_socket.go |
| HTTP 转 HTTPS | 将 HTTP 请求转换为 HTTPS | http_to_https | pkg/plugin/client/http2https.go |
| HTTPS 转 HTTP | 将 HTTPS 请求转换为 HTTP | https_to_http | pkg/plugin/client/https2http.go |
| HTTPS 转 HTTPS | 带有证书处理的 HTTPS 代理 | https_to_https | pkg/plugin/client/https2https.go |
来源:pkg/plugin/client/http_proxy.go, pkg/plugin/client/socks5.go, pkg/plugin/client/static_file.go, pkg/plugin/client/unix_domain_socket.go, pkg/plugin/client/http2https.go, pkg/plugin/client/https2http.go, pkg/plugin/client/https2https.go
插件在客户端配置文件中进行配置。每个代理都可以指定一个插件及其选项。这是插件配置的一般结构:
[plugin_section_name]
type = "plugin_type"
# Plugin-specific options
例如,配置一个静态文件插件:
[web]
type = "tcp"
local_port = 80
remote_port = 8080
plugin = "static_file"
plugin_local_path = "/var/www/html"
plugin_strip_prefix = "static"
plugin_http_user = "admin"
plugin_http_passwd = "admin"
每个插件都有自己的特定配置选项,可以使用带 plugin_ 前缀的参数进行设置。
功能开关提供了一种机制,可以在实验性功能普遍可用之前启用或禁用它们。这允许用户在将新功能与稳定功能集分开的同时对其进行测试。
功能开关在配置文件中定义为功能名称到布尔值(启用/禁用)的映射。系统会检查此映射以确定运行时是否应提供特定的实验性功能。
来源:Release.md
功能开关在 FRP 配置文件中的 featureGates 映射下进行配置。
[common]
# Other configuration options...
featureGates = {
"VirtualNet" = true
}
将功能开关设置为 true 会启用实验性功能,而将其设置为 false(或省略它)则会禁用该功能。
VirtualNet 是一项实验性功能(目前处于 Alpha 阶段),通过创建虚拟网络,实现不同 FRP 客户端之间的第 3 层连接。
VirtualNet 功能在每个客户端系统上创建一个 TUN 设备,该设备充当虚拟网络接口。这些虚拟接口通过 FRP 服务器连接,允许客户端之间进行直接的第 3 层(IP 级别)通信,即使它们位于 NAT 或防火墙之后。
来源:Release.md
要使用 VirtualNet 功能,您需要:
启用 VirtualNet 功能开关
[common]
featureGates = {
"VirtualNet" = true
}
配置虚拟网络部分
[virtual_net]
# Virtual network configuration
为需要第 3 层连接的代理设置 virtual_net 插件。
SSH 隧道网关是一项功能,它允许在目标机器上不直接运行 FRP 客户端软件的情况下建立代理。而是使用 SSH 连接来建立隧道以代理流量。
有关 SSH 隧道网关的更多信息,请参阅 SSH 隧道网关。
FRP 的插件系统是可扩展的,允许开发人员创建自定义插件来扩展功能。要创建自定义插件:
Plugin 接口Register() 函数注册插件有关开发 FRP 扩展的更多信息,请参阅 开发和测试。
刷新此 Wiki
最后索引时间2025年4月17日(a23455)