
frp v0.71.0
NATやファイアウォールの背後にあるローカルサーバーをインターネットに公開するための高速リバースプロキシ。
frp
赞助商
frp 是一个开源项目,其持续开发完全由我们出色的赞助商的支持所推动。如果您想加入他们,请考虑赞助 frp 的开发。
金牌赞助商
让您掌控一切的自主云
一个开源、自托管的公有云替代方案,专为数据所有权和隐私而构建
Recall.ai - 会议录制 API
如果您正在寻找会议录制 API,请考虑查看 Recall.ai,
这是一个可录制 Zoom、Google Meet、Microsoft Teams、线下会议等的 API。
frp 是什么?
frp 是一个快速反向代理,允许您将位于 NAT 或防火墙后面的本地服务器暴露到互联网。它目前支持 TCP 和 UDP,以及 HTTP 和 HTTPS 协议,使请求能够通过域名转发到内部服务。
frp 还提供 P2P 连接模式。
目录
- 开发状态
- 架构
- 使用示例
- 功能
- 功能开关
- 相关项目
- 贡献
- 捐赠
开发状态
frp 目前正在开发中。您可以在 master 分支中尝试最新的发布版本,或使用 dev 分支访问当前正在开发的版本。
我们目前正在开发版本 2,并尝试进行一些代码重构和改进。但请注意,它将与版本 1 不兼容。
我们将在适当的时候从版本 0 过渡到版本 1,并且只会接受错误修复和改进,而不是大型功能请求。
关于 V2
v2 版本的复杂性和难度远超预期。我只能利用零散的时间进行开发,而不断的干扰严重影响了工作效率。鉴于这种情况,我们将继续对当前版本进行优化和迭代,直到我们有更多空闲时间来进行大版本重构。
v2 的概念基于我在云原生领域(尤其是 K8s 和 ServiceMesh)多年的经验和思考。其核心是一个现代化的四层和七层代理,类似于 envoy。这个代理本身具有高度可扩展性,不仅能够实现内网穿透的功能,还可以应用于其他各种领域。在这个高度可扩展的核心之上,我们旨在实现 frp v1 的所有功能,同时解决以前无法实现或难以优雅实现的功能。此外,我们将保持高效的开发和迭代能力。
此外,我设想 frp 本身成为一个高度可扩展的系统和平台,类似于我们可以基于 K8s 提供一系列扩展能力。在 K8s 中,我们可以根据企业需求进行定制开发,利用 CRD、控制器模式、webhook、CSI 和 CNI 等功能。在 frp v1 中,我们引入了服务器插件的概念,实现了一些基本的可扩展性。然而,它依赖于简单的 HTTP 协议,并且需要用户自行启动独立进程并自行管理。这种方法远不够灵活和方便,而现实世界的需求差异很大。期望一个由少数人维护的非营利开源项目能满足所有人的需求是不现实的。
最后,我们承认配置管理、权限验证、证书管理和 API 管理等模块的当前设计不够现代化。虽然我们可能会在 v1 版本中进行一些优化,但确保兼容性仍然是一个具有挑战性的问题,需要投入大量精力来解决。
我们衷心感谢您对 frp 的支持。
架构
使用示例
首先,从 Release 页面下载适用于您操作系统和架构的最新程序。
接下来,将 frps 二进制文件和服务器配置文件放在具有公网 IP 的服务器 A 上。
最后,将 frpc 二进制文件和客户端配置文件放在位于无法从公网直接访问的局域网中的服务器 B 上。
某些杀毒软件会错误地将 frpc 标记为恶意软件并将其删除。这是因为 frp 是一种能够创建反向代理的网络工具。杀毒软件有时会标记反向代理,因为它们能够绕过防火墙的端口限制。如果您使用杀毒软件,则可能需要在杀毒软件设置中将 frpc 加入白名单/排除项,以避免被误隔离/删除。有关更多详细信息,请参阅 issue 3637。
通过 SSH 访问局域网中的计算机
- 在服务器 A 上修改
frps.toml,设置 frp 客户端连接的bindPort: ```toml
frps.toml
bindPort = 7000
2. サーバーAで`frps`を起動します:
`./frps -c ./frps.toml`
3. サーバーBの`frpc.toml`を変更し、`serverAddr`フィールドをfrpsサーバーのパブリックIPアドレスに設定します: ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
localPort(客户端监听的端口)和 remotePort(服务器上暴露的端口)用于 frp 系统内外的流量,而 serverPort 用于 frps 与 frpc 之间的通信。
- 在服务器 B 上启动
frpc:
./frpc -c ./frpc.toml
- 要从另一台机器通过服务器 A 使用 SSH 访问服务器 B(假设用户名为
test),请使用以下命令:
ssh -oPort=6000 [email protected]
多个 SSH 服务共享同一端口
此示例通过类型为 tcpmux 的代理,在同一个端口上暴露多个 SSH 服务。同样,只要客户端支持 HTTP Connect 代理连接方式,就可以通过这种方式实现端口复用。
- 在具有公网 IP 的机器上部署 frps,并修改 frps.toml 文件。以下是一个简化的配置: ```toml bindPort = 7000 tcpmuxHTTPConnectPort = 5002
2. 内部マシンAに以下の設定でfrpcをデプロイします: ```toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "ssh1"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["machine-a.example.com"]
localIP = "127.0.0.1"
localPort = 22
- 内部マシンBに以下の設定で別のfrpcをデプロイします: ```toml serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "ssh2" type = "tcpmux" multiplexer = "httpconnect" customDomains = ["machine-b.example.com"] localIP = "127.0.0.1" localPort = 22
4. SSH ProxyCommandを使用して内部マシンAにアクセスする場合、ユーザー名が「test」であると仮定します:
`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`
5. 内部マシンBにアクセスする場合、違いはドメイン名のみで、ユーザー名が「test」であると仮定します:
`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`
### LAN内のカスタムドメインを使用した内部Webサービスへのアクセス
NATネットワークの背後にあるローカルWebサービスを、独自のドメイン名を使用してテスト目的で他の人に公開する必要がある場合があります。
残念ながら、ドメイン名をローカルIPに解決することはできません。ただし、frpを使用してHTTP(S)サービスを公開することができます。
1. `frps.toml`を変更し、vhostのHTTPポートを8080に設定します: ```toml
# frps.toml
bindPort = 7000
vhostHTTPPort = 8080
vhostHTTPSPortを設定する必要があります。
frpsを起動します:
./frps -c ./frps.toml