frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
--简单使用方法--
暴露内网服务
内网穿透的玩法有很多,这里列举一个比较常见的例子。
比如:我要暴露一个只有自己能访问到服务器。那么可以这样配置:
配置 frps.ini,并启动服务端 frps
ini复制代码[common]
bind_port = 7000
在需要暴露到外网的机器上部署 frpc,配置如下:
ini复制代码[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
在想要访问内网服务的机器上也部署 frpc,配置如下:
ini复制代码[common]
server_addr = x.x.x.x
server_port = 7000
[secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 6000
把frpc也都启动起来之后,通过 SSH 就可以访问内网机器了
ini复制代码ssh -oPort=6000
[email protected]
其他支持
除了上面的玩法之外,frp还有很多玩法,比如:
自定义域名访问内网的 Web 服务
转发 DNS 查询请求
转发 Unix 域套接字
对外提供简单的文件访问服务
为本地 HTTP 服务启用 HTTPS
点对点内网穿透