一、使用场景
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。在生产过程中,可以结合nginx代理到frp,再统一穿透到本地测试环境,在内网可以再次借助nginx,实现复杂的外网访问。
二、下载
1. 官方地址
https://github.com/fatedier/frp/releases
使用命令,查看Architecture信息,其中x86_64
,选择amd64
的
lscpu
三、安装
1. 安装 systemd
如果没有安装systemd
yum install systemd
2. 创建服务
1. 处理文件
- 解压下载的压缩包。
- 将
frpc
复制到内网服务所在的机器
上。我选择的目录是/opt/frp
- 将
frps
复制到拥有公网 IP 地址的机器上
,并将它们放在任意目录。同样的,这里使用/opt/frp
这个目录
2. 公网服务器部署
创建文件
vi /etc/systemd/system/frps.service
编辑内容
[Unit]
# 服务名称,可自定义
Description = frps
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
[Install]
WantedBy = multi-user.target
加入开机自启
systemctl enable frps
启动
systemctl start frps
2. 内网服务器部署
创建文件
vi /etc/systemd/system/frpc.service
编辑内容
[Unit]
# 服务名称,可自定义
Description = frpc
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
[Install]
WantedBy = multi-user.target
加入开机自启
systemctl enable frpc
启动
systemctl start frpc
四、配置
1.公网服务器
编辑文件frps.toml
# 服务端监听端口,内网的机器连接本服务器的端口
bindPort = 18080
# http类型的代理监听端口,即nginx转发的目标端口,或外网直接以域名+本端口的方式访问,tcp不用此项
vhostHTTPPort = 6081
# https类型的代理监听端口,即nginx转发的目标端口,或外网直接以域名+本端口的方式访问
# vhostHTTPSPort = 6082
# http类型的代理超时时间
vhostHTTPTimeout = 60
# 采用token的方式鉴权
auth.token = ycmXaFJkWNxxmujzdiFoIluwRGANulPK
# 定义日志文件位置
log.to = /var/log/frps.log
# 定义日志文件级别
log.level = info
# 定义日志文件保留天数
log.maxDays = 3
2. 内网服务器
编辑文件frpc.toml
[common]
server_addr = 47.108.206.147
server_port = 18080
log_file = /var/log/frp.log
log_level = debug
token = SzvM#3LsV1U5ZY!DTZFMlstJyY%AtqSeKytIp7@N#6HlxD@5vpeZxDX%gruoJIbH
# 监听的公网服务器IP
serverAddr = "x.x.x.x"
# 监听的公网服务器端口
serverPort = 18080
# 采用token的方式鉴权
auth.token = ycmXaFJkWNxxmujzdiFoIluwRGANulPK
# 定义日志文件位置
log.to = /var/log/frpc.log
# 定义日志文件级别
log.level = info
# 定义日志文件保留天数
log.maxDays = 3
# 模块,模块可以同时有多个
[[proxies]]
# tcp代理,这里的意思是将x.x.x.x的6000端口代理到127.0.0.1的22端口上
name = "ssh"
# 代理类型,可选值为 tcp, udp, http, https, tcpmux, stcp, sudp, xtcp。
type = "tcp"
# 被代理的本地服务 IP,默认为 127.0.0.1
localIP = "127.0.0.1"
# 被代理的内网服务端口。
localPort = 22
# 公网服务端口
remotePort = 6000
# web代理,将下列域名的6081端口代理到127.0.0.1的80端口
[[proxies]]
name = "web"
type = "http"
localPort = 80
# 被代理的本地服务 IP,默认为 127.0.0.1
localIP = "127.0.0.1"
customDomains = ["www.yourdomain.com","*.yourdomain.com"]