-
Frp 开源地址:github.com/fatedier/fr…
-
Frp 中文文档:gofrp.org
-
Frp 作者博客:blog.fatedier.com
介绍
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。 由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
代理
在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。
代理类型
frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:
- TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
- UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
- HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
- HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
- STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
- SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
- XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
- TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。
安装
准备工作
- 一台可以访问互联网的服务器,作为服务端
- 一台本地部署服务的局域网服务器,什么系统的都行,作为客户端,我这里用的windows
- 下载frp,服务端和客户端都得下载,建议同一个版本
下载ftp
## 先下载wget
apt install wget
## 下载
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
## 解压
tar -vxf frp_0.51.3_linux_amd64.tar.gz
## 重命名
mv frp_0.58.1_linux_amd64 frp
编辑服务端frps.toml文件
[common]
# 连接端口
bind_port = 7000
# 校验Token,为了你的服务端的安全,请设置得复杂些
token = qwer1234
# Dashboard Web监控配置
## Web访问端口
dashboard_port = 7500
## Web访问的账号和密码
dashboard_user = admin
dashboard_pwd = admin123
## 是否提供 Prometheus 监控接口
enable_prometheus = true
## 最大连接池数量
max_pool_count = 4
# Http 服务端配置
## HTTP 类型代理监听的端口
vhost_http_port = 7001
## 为 HTTPS 类型代理监听的端口
vhost_https_port = 7123
## 解析到你服务端的域名,通过ping frp.yourdomain.com查看是否成功解析
## 这里我们是要实现自定义四级域名访问内网资源,因此这里使用三级域名作为后缀,服务端那块会再设置一个字符串,共同组成 xxx.frp.yourdomain.com
# subdomain_host = frp.yourdomain.com
# 服务端日志配置
## 日志文件存放位置
log_file = /var/log/frps.log
## 日志等级
log_level = info
进入frp 目录启动frp
./frps -c ./frps.toml
#后台启动 nohup ./frps -c ./frps.toml &> /dev/null &
![[Pasted image 20240626224710.png]] ![[Pasted image 20240627111644.png]] 这样就是启动成功了
访问web界面
http://116.198.233.54:7500/ ![[Pasted image 20240626230418.png]] 注意把云服务器的端口打开,把服务器的防火墙配置一下
配置服务 通过命令服务启动
在/etc/systemd/system 新建 frps.service 文件
vim /etc/systemd/system/frps.service
文件内容
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /home/frp/frps -c /home/frp/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]
# 服务端信息
## 服务端的IPv4地址
server_addr =116.198.233.54
## 服务端建立连接的端口
serverPort = 7000
## 服务端连接时的校验Token,必须与服务端保持一致,否则无法连接
token = qwer1234
[Web]
# http服务
## 数据类型
type = http
## 本地IP localhost、127.0.0.1或你用ipconfig得到的内网IP都可
local_ip = localhost
## 本地需要暴露在外网的端口,一般为你本地的项目端口
local_port = 1314
## 是该条规则在服务端开放的端口号,自己填写并记录即可,服务端对https设置的端口为7123,所以此处也为7123
## remote_port = 7123
## subdomain = test
custom_domains= **.**.**.**
客户端启动
frpc.exe -c ./frpc.toml