官网地址:
Frp 开源地址: https://github.com/fatedier/frp
Frp 中文文档: https://gofrp.org/zh-cn/
Frp 作者博客: https://blog.fatedier.com/
1、frp是什么?
1、frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。 由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。
2、frp和nginx的区别
FRP 和 Nginx 存在多方面的区别,以下是详细介绍:
功能特性
- Nginx:支持 HTTP/2、IPv6、WebSockets、gRPC 以及 HTTP/3(通过 Nginx QUIC 传输模块)等多种协议和技术,能很好地服务静态文件,支持 SSL,还包含用于转换响应的模块,可通过第三方模块进行扩展5.
- FRP:支持 TCP、UDP、HTTP、HTTPS、WebSocket 等协议,拥有丰富的插件系统,支持全锥型 NAT、P2P 连接、会话保持、健康检查以及热重载而不中断连接等功能.
使用场景
- Nginx:适用于复杂的负载均衡场景、高性能环境以及服务网格架构等,在需要诸如速率限制、缓存或高级路由等高级功能时表现出色,常被用于容器化环境如 Kubernetes 中的入口控制,以管理对集群中服务的外部访问.
- FRP:擅长将位于 NAT 或防火墙后的内部服务快速、简便地暴露到互联网上,例如位于 NAT 后的 Web 服务器或用于远程管理的 SSH 服务器,适用于较为简单的场景,无需 Nginx 的高级功能.
易用性
- Nginx:配置语法相对简单,有庞大的社区提供丰富的文档和示例,但要处理复杂任务可能需要深厚的技术专业知识.
- FRP:设置和管理相对容易,即使没有丰富的网络知识,也能轻松地将内部服务器暴露到互联网上.
反向代理与负载均衡能力
- Nginx:作为高性能的负载均衡器,支持 HTTP、TCP 和 UDP 的负载均衡,具备 SSL 终止、会话保持、健康检查和服务器名称指示(SNI)等功能,能提供容错和实时活动监控,不过其高级负载均衡功能仅在付费的 Nginx Plus 版本中可用,复杂场景下的配置可能会变得复杂.
- FRP:可将任何位于 NAT 或防火墙后的 HTTP 和 HTTPS 服务暴露到互联网,支持会话保持和健康检查,能在同一端口上复用流量以代理多个服务,但负载均衡功能相较于 Nginx 不够成熟.
对不同协议的支持
- HTTP 和 HTTPS:Nginx 在 HTTP 和 HTTPS 方面表现卓越,提供了丰富的路由、重写、重定向和负载均衡选项,还有缓存和速率限制等高级功能;FRP 虽也能处理 HTTP/HTTPS 流量,但缺少 Nginx 的高级选项.
- SSH:Nginx 不适合处理 SSH 流量,而 FRP 能够将来自公网的 SSH 流量转发到私网,方便管理位于 NAT 或防火墙后的服务器.
- WebSockets:Nginx 对 WebSockets 有强大的支持,可提供代理和负载均衡;FRP 支持 WebSockets,但缺乏 Nginx 的高级负载均衡和路由功能.
配置说明下载
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
解压后为
服务端配置,修改 frps.toml配置
[common]
bind_port = 9911
dashboard_port = 9912
dashboard_user = admin
dashboard_pwd = admin
[tcp_8888]
type = tcp
local_port = 8888
listen_port = 8888
[tcp_9000]
type = tcp
local_port = 9000
listen_port = 9000
[tcp_nacos]
type = tcp
local_port = 8848
listen_port = 8848
详解
bind_port frp服务端口,frpc的配置会调用
dashboard_port frp的web控制台端口
dashboard_user frp的web控制台端口账号
dashboard_pwd frp的web控制台端口密码
[tcp_9000] 链接的名称
type = tcp 代理的连接类型
local_port = 9000 本地映射的端口
listen_port = 9000 监听的端口
配置完成后启动
./frps -c frps.toml
#后台启动 nohup ./frps -c ./frps.toml &> /dev/null &
配置服务 通过命令服务启动
vim /etc/systemd/system/frps.service
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /data/frp/frp_0.59.0_linux_amd64/frps -c /data/frp/frp_0.59.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
Description
:描述了服务的作用或功能,这里被设置为 "frp server",表示 frp 服务器。After
:定义了服务的启动顺序,表明在启动该服务之前需要等待network.target
和syslog.target
服务已经启动。Wants
:表明该服务想要依赖network.target
服务。 [Service] 在这个部分,你可以设置服务运行的相关参数:Type
:定义服务的类型,这里设置为simple
,表示该服务不会派生出其他子进程。ExecStart
:定义了启动 frp 服务器的命令,你需要根据你的实际情况修改命令路径和配置文件路径。在这个例子中,使用的启动命令是/home/frp/frps -c /home/frp/frps.toml
,表示使用/app/frp
目录下的frps
可执行文件,并加载/app/frp/frps.toml
配置文件。 [Install] 在这个部分,你可以定义服务的安装和启动方式:WantedBy
:表明服务希望被启用的目标单元,这里设置为multi-user.target
,表示服务希望在多用户模式下启动。
配置好了文件之后可以用以下命令运行frp服务
启动 frps 服务
systemctl start frps
停止 frps 服务
systemctl stop frps
检查 frps 服务的状态
systemctl status frps
重新加载 Systemd 守护进程(当你修改了服务单元文件后需要执行此命令)
systemctl daemon-reload
客户端配置,修改frpc.toml配置
[common]
server_addr = 公网IP
server_port = 9911
[tcp_8888]
type = tcp
local_ip = 127.0.0.1
local_port = 9000
remote_port = 8888
[tcp_9000]
type = tcp
local_ip = 127.0.0.1
local_port = 9000
remote_port = 9000
[tcp_nacos]
type = tcp
local_ip = 192.168.13.244
local_port = 8848
remote_port = 8848
[Web]
# http服务
## 数据类型
type = http
## 本地IP localhost、127.0.0.1或你用ipconfig得到的内网IP都可
local_ip = localhost
## 本地需要暴露在外网的端口,一般为你本地的项目端口
local_port = 8200
## 是该条规则在服务端开放的端口号,自己填写并记录即可,服务端对https设置的端口为8200,所以此处也为8200
## remote_port = 8200
## subdomain = test
custom_domains= **.**.**.**
详解
server_addr 服务器公网ip
server_port frp服务端口
[tcp_9000] 链接的名称
type = tcp 代理的连接类型
local_ip 代理IP
local_port = 代理端口remote_port = 代理映射端口
./frpc -c frpc.toml
启动客户端
启动完成后浏览器访问
设计思想:
1、服务端需要监听端口,部署在公网服务器上
2、客户端能够ping通公网IP,注册本地的ip和端口到服务端,同时配置好通过公网访问端口进来后的方向代理地址
访问端-->公网服务器<---反向代理服务器