Frp部署文档
- 开源项目地址:https://github.com/fatedier/frp
- 项目中文文档地址:https://github.com/fatedier/frp/blob/dev/README_zh.md
- 官网文档地址: https://gofrp.org/zh-cn/docs/
- 发布包地址:https://github.com/fatedier/frp/releases 要注意对应的系统,指令集的版本
- toml格式配置文件规范:https://toml.io/cn/
概念
了解以下概念有助于更好地理解和使用 frp。
工作原理
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 端口的多路复用,允许通过同一端口访问不同的内网服务。
每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。
安装
我这里针对的版本是 0.53.2。其他的版本类似
下载地址
macos (intel cpu等 amd 64)的版本
- https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_darwin_amd64.tar.gz
mac (m1,m2,m3 cpu等 arm 64)的版本
- https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_darwin_arm64.tar.gz
linux (intel cpu等 amd 64)版本
- https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
也有windows的版本,就不列了,可以到https://github.com/fatedier/frp/releases 选择你想要的版本
服务器端安装
ubuntu 22.04 amd64 下安装
第一步 连接服务器, 并下载解压文件
cd ~
mkdir frp
cd frp
wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
# 如果下载不了,请用自己的系统下载好,复制到这个目录来
tar -xzvf frp_0.53.2_linux_amd64.tar.gz
cd frp_0.53.2_linux_amd64
ls -l
- 这个时候,可以看到5个文件
- frpc 是客户端,在服务器端不需要
- frpc.toml 客户端的默认配置文件
- frps 是服务器端
- frps.toml 服务器端的配置地址
- LICENSE 该文件,忽略
第二步 手动安装服务器端
sudo cp frps /usr/bin
sudo mkdir /etc/frps
sudo cp frps.toml /etc/frps
- 这个时候,输入frps -c /etc/frps/frps.toml 就可以运行,但是功能还不够
- 用vi命令编辑配置文件: sudo vi /etc/frps/frps.toml
- 默认的配置内容如下:
bindPort = 7000
- 按照我们时间要求,我们调整配置如下
bindPort = 7000 # 默认绑定地址
vhostHTTPPort = 18080 # 绑定的http的端口
auth.token="123456看可以吗?" # frpc 连接这个穿透服务器的认证token
# 下面是一组管理后台的配置, 完成后就可以用 http://xxx.xxx.xxx.xxx:7500/访问管理后端
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "super_admin" #访问管理后端的用户名
webServer.password = "密码" #访问管理后端的密码
# 日志输出配置
log.to="/var/log/frps.log"
-
更多要求配置,看官网的示例配置
-
在命令行输入: frps -c /etc/frps/frps.toml, 查看/var/log/frps.log日志,显示下面内容,表示成功启动
第三步 部署到systemd的服务模式
- 使用的前提是,给系统安装了systemd, 一般情况下,是默认安装的
cd /etc/systemd/system
sudo vi frps.service
- frps.service配置如下
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/bin/frps -c /etc/frps/frps.toml
[Install]
WantedBy = multi-user.target
- 使用systemd管理frps服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
- 设置 frps 开机自启动
sudo systemctl enable frps
客户端安装
-
客户端的环境是intel cpu的macos 迷你主机, 所以我这里用的是 https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_darwin_amd64.tar.gz 这个macos版本 frpc
-
在mac os的桌面,新建一个目录 frp
-
将下载好的frp_0.53.2_darwin_amd64.tar.gz,复制到这个目录,然后进入终端
cd ~/Desktop/frp
vi frpc.toml
-
我们针对现在测试环境 http://192.168.3.10 做一个透传,用我们现在的测试服务器可以访问,如: http://测试服务器地址:18080
-
为了增加安全性,这里还会专门的访问密码
-
具体配置如下:
# frps的服务器地址
serverAddr = "测试服务器公网ip"
# frps的侦听端口
serverPort = 7000
# 输出的日志文件
log.to = "./frpc.log"
# 连接服务器的认证方式 我们这里使用的token的方式,也是默认方式
auth.method = "token"
# 认证的token,需要和frps服务器配置的token一直
auth.token = "123456看可以吗?"
# 下面是代理客户端配置, 多个代理,就可以多个[[proxies]],每个可以有不同的名字
[[proxies]]
# 代理名称
name = "testweb"
# 代理类型
type = "http"
# 本地http服务的ip和端口
localIP = "127.0.0.1"
localPort = 80
# 远程穿透的ip或域名, 如果有多个web代理,最好使用域名的方式 , customDomains是一个字符串数组,可以配置公网ip或多个域名, 使用域名的方式,可以配置很多歌
customDomains = ["测试服务器公网ip"]
# 对外穿透给其他人访问的ip地址
remotePort = 18080
# 是否使用压缩
transport.useCompression = true
# 通过穿透访问,需要输入的用户名和密码
httpUser = "阿里巴巴"
httpPassword = "albbpass^^^"
- 最后在命令行输入下面命令
./frpc -c ./frpc.toml
最后
- 在浏览器输入 http://公网地址ip:7500
- 提示输入用户名和密码,看服务器frps.toml的配置,可知道用户名: super_admin,密码:*****
- 管理后台的界面如下
新增示例
使用stcp提供ssh服务
- 这里使用的stcp,没有使用tcp,因为使用tcp必须在公网服务器暴露端口,所以这里使用stcp,不需要暴露端口。使用xtcp 点对点的方式容易失败。
ssh服务提供方frpc配置
- 提供ssh的frpc配置,这里是minisvr的ssh服务,端口是22
- 在frpc目录下,新建一个frpc_stcp_svr.toml文件,内容如下:
# frps的服务器地址
serverAddr = "测试服务器公网ip"
# frps的侦听端口
serverPort = 7000
# 连接服务器的认证方式 我们这里使用的token的方式,也是默认方式
auth.method = "token"
# 认证的token,需要和frps服务器配置的token一直
auth.token = "123456看可以吗?"
# 一下是ssh的 stcp代理配置, 公网服务器frps不需要额外配置
[[proxies]]
# 提供服务的名称
name = "ssh"
# 穿透类型
type = "stcp"
# 代理的ip和端口
localIP = "127.0.0.1"
localPort = 22
# 传输加密和压缩配置
transport.useEncryption = true
transport.useCompression = true
# 访问是需要提供的秘钥
secretKey = "hello123"
# 允许访问的用户
allowUsers = ["*"]
- 配置完成后,启动frpc
./frpc -c ./frpc_stcp_svr.toml
- 如果看到有显示success的字样,基本表示连接成功
ssh 访客方 frpc 配置
- 在frpc目录下,新建一个frpc_stcp_cli.toml文件,内容如下:
# frps的服务器地址
serverAddr = "测试服务器公网ip"
# frps的侦听端口
serverPort = 7000
# 连接服务器的认证方式 我们这里使用的token的方式,也是默认方式
auth.method = "token"
# 认证的token,需要和frps服务器配置的token一直
auth.token = "123456看可以吗?"
[[visitors]]
# 访客的名称 这个名字可以自己改
name = "stcp_cli"
# 访客的连接类型
type = "stcp"
# 访问是需要提供的秘钥 注意和提供方的秘钥保持一致
secretKey = "hello123"
# ssh提供方的名称,和提供方的name保持一致
serverName = "ssh"
# 本地代理绑定的端口和地址
bindAddr = "127.0.0.1"
bindPort = 6000
# 传输加密和压缩配置
transport.useEncryption=true
transport.useCompression=true
- 配置完成后,启动frpc
./frpc -c ./frpc_stcp_cli.toml
- 如果看到有显示success的字样,基本表示连接成功
使用ssh连接
- 打开终端,输入 ssh -p 6000 ivon@127.0.0.1
- 然后输入密码,就可以了
使用secretCRT链接
-
如下图所示 注意端口是本地frpc的6000端口,而不是ssh的22端口
-
同样活用这个配置,也可以用secretFX来传输文件