FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,它主要用于内网穿透和远程访问。通过FRP,用户可以将内网服务暴露到外网,便于远程访问。以下是FRP的基本原理和工作流程:
原理架构图
FRP的基本原理
- 服务器和客户端角色:
- FRP服务器(frps):部署在具有公网IP的服务器上,负责接收外部请求并将其转发到内网服务。
- FRP客户端(frpc):部署在内网机器上,与FRP服务器保持长连接,将本地服务注册到FRP服务器上。
- 内网穿透:
- 内网机器通过FRP客户端与公网的FRP服务器建立长连接。FRP客户端会将内网服务的信息(如本地IP和端口)发送给FRP服务器。
- FRP服务器会监听一个指定的公网端口。当接收到外部请求时,FRP服务器将请求通过长连接转发给对应的FRP客户端,后者再将请求转发给内网服务。
FRP的工作流程
- 建立连接:
- 内网的FRP客户端启动后,会向FRP服务器发起连接,并进行身份验证(如token认证)。
- FRP服务器验证通过后,保持与客户端的长连接。
- 服务注册:
- FRP客户端会根据配置文件,向FRP服务器注册本地服务,包括协议类型(如HTTP、TCP)、本地IP和端口等信息。
- 请求转发:
- 外部用户通过访问FRP服务器的公网IP和端口,发送请求到FRP服务器。
- FRP服务器接收到请求后,根据配置将请求转发到对应的FRP客户端。
- FRP客户端接收到请求后,将请求转发给本地内网服务,内网服务处理请求后,将响应结果通过FRP客户端返回给FRP服务器,最后由FRP服务器将响应返回给外部用户。
典型应用场景
- 内网穿透:将内网的Web服务、数据库等暴露到外网,便于远程访问和管理。
- 远程办公:通过FRP访问公司内部资源,如文件服务器、内部网站等。
- IoT设备管理:通过FRP访问和管理部署在内网的IoT设备。
安装部署使用
Linux服务器端安装
1、安装软件
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
tar -xvf frp_0.59.0_linux_amd64.tar.gz
2、修改frps.toml文件
#bindPort是服务端与客户端之间通信使用的端口号
bindPort = 7077
# 配置验证方式
auth.method = "token" # 选择token方式验证
auth.token = "1qaz2wsx$" # 必须与客户端的token一致,token用于验证连接,只有服务端和客户端token相同的时候才能正常访问。如果不使用token,那么所有人都可以直接连接上。
#服务端开启仪表板
webServer.addr = "0.0.0.0"
webServer.port = 7078
webServer.user = "admin"
webServer.password = "qwer123"
# https证书配置
# webServer.tls.certFile = "server.crt"
# webServer.tls.keyFile = "server.key"
# 多路复用
transport.tcpMux = true
# 最大连接池数量
transport.maxPoolCount = 10
3启动服务
nohup ./frps -c frps.toml &
windows客户端
安装
下载软件包
https://github.com/fatedier/frp/releases
修改配置frpc.toml
serverAddr = "公网ip"
serverPort = 7077
auth.method = "token"
auth.token = "1qaz123"
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 7080
启动服务
start /b frpc.exe -c C:\Users\liudu\Desktop\bj_1000\frp\frpc.toml
Linux客户端
1、安装软件
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
tar -xvf frp_0.59.0_linux_amd64.tar.gz
2、修改frpc.toml文件
serverAddr = "公网ip"
serverPort = 7077
auth.method = "token"
auth.token = "1qaz123"
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 7081
启动服务
安装服务
cat /etc/systemd/system/frpc.service
t]
Description=My Frp Client Service - %i
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/bin/bash -c '/root/frp/frpc -c /root/frp/frpc.toml'
[Install]
WantedBy=multi-user.target
systemctl enable frpc.service
systemctl start frpc.service
任意pc电脑穿透内网
远程内网Linux服务:ssh 用户名@公网ip:内网注册公网端口
远程内网Windows服务:mstsc 用户名@公网ip:内网注册公网端口