FRP的基本原理及frp_0.59.0安装

FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,它主要用于内网穿透和远程访问。通过FRP,用户可以将内网服务暴露到外网,便于远程访问。以下是FRP的基本原理和工作流程:

原理架构图

FRP的基本原理

  1. 服务器和客户端角色
    • FRP服务器(frps):部署在具有公网IP的服务器上,负责接收外部请求并将其转发到内网服务。
    • FRP客户端(frpc):部署在内网机器上,与FRP服务器保持长连接,将本地服务注册到FRP服务器上。
  2. 内网穿透
    • 内网机器通过FRP客户端与公网的FRP服务器建立长连接。FRP客户端会将内网服务的信息(如本地IP和端口)发送给FRP服务器。
    • FRP服务器会监听一个指定的公网端口。当接收到外部请求时,FRP服务器将请求通过长连接转发给对应的FRP客户端,后者再将请求转发给内网服务。

FRP的工作流程

  1. 建立连接
    • 内网的FRP客户端启动后,会向FRP服务器发起连接,并进行身份验证(如token认证)。
    • FRP服务器验证通过后,保持与客户端的长连接。
  2. 服务注册
    • FRP客户端会根据配置文件,向FRP服务器注册本地服务,包括协议类型(如HTTP、TCP)、本地IP和端口等信息。
  3. 请求转发
    • 外部用户通过访问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:内网注册公网端口

40 个赞

感谢分享

5 个赞

感谢分享

4 个赞

感谢大佬

3 个赞

学习了

4 个赞

感谢分享

1 个赞

感谢分享

2 个赞

有可以使用的免费服务器吗?

frp这个免费不安全吧

1 个赞

感谢分享,留着备用

1 个赞

有没有简单如nps的工具?

nps和frp一样简单吧,感觉nps操作更复杂

有更简单的,使用docker-compose 通过配置环境变量俩控制frp配置参数

1 个赞

感谢大佬,很有帮助

1 个赞

感谢分享 感谢分享

2 个赞

这个节名称是否需要修改

需要修改,每个服务的名字要不一样

原文少了个[ 吧

有可能,能截图我看看吗

请问可以通过frp建立p2p连接吗?
中转很吃服务器网络质量啊。