介绍
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
如下优点:
- 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
- TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用:多个服务可以通过同一个服务端端口暴露。
- P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
- 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
- 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
- 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
案例
背景
在线上部署了saas服务,但是saas服务管理平面无法使用隧道请求内网服务地址(如:AD等服务),saas与内网通信在公网传输时需要加密传输,自己拥有代理端口管理权,不变动现网架构,为应对如上场景使用到了frp反向代理,代理服务器建议使用独立服务器,不建议在服务器本身直接部署。
设计逻辑
使用frp代理内网LDAP服务给线上Saas服务器提供服务,需要使用两台服务器,一台为服务器一台为客户端,由客户端控制代理那些端口服务器。
线上申请一台服务器用做代理服务器,有条件可限制线上入网IP,安全组只放通7100端口,拒绝其他端口,避免公网暴露。
内网部署一台服务器用做代理客户端,服务器需要与LDAP服务通信。
将线上代理服务器192.168.0.2 的 7010 端口通过TCP隧道映射为内网的 192.168.2.100 的LDAP服务。
软件下载
下载页面 https://github.com/fatedier/frp/releases
获取最新版文件下载连接
进入系统并移动至指定目录,笔者使用opt目录。
cd /opt
下载hrp文件,将 wget 后面的连接换下最新版本。
sudo wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz
下载完成后解压文件,请为你的更换版本名称。
sudo tar -zxvf frp_0.60.0_linux_amd64.tar.gz
重命名文件夹
sudo mv frp_0.60.0_linux_amd64 frp
进入frp文件
cd frp
文件介绍,后面需要按需改动配置。
服务端frps启动文件, frps.toml为配置文件吗,默认配置文件监听的端口为7000,不使用认证。
客户端frpc启动文件, frpc.toml为配置文件,默认配置文件转发端口为22,远程端口是6000。
服务端配置
服务端只需要留下 frps 和 frps.toml 文件。
编辑 frps.toml ,完整的配置文件选项可访问 https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml 查看。
# 默认监听所以地址,如果你想使用特定的IP地址,请更改为你使用的IP地址并取消注释。
# bindAddr = x.x.x.x
# 默认使用7000作为服务端口,建议改成其他端口。
bindPort = 7100
# 用于客户端和服务器通信的身份验证令牌
auth.method = "token"
# 秘钥格式建议配置 用户+@+密码 的格式,方便区分用户,如下所示:
auth.token = "user1@12345678"
# 允许的端口范围,不设置允许所以端口,笔者允许使用7101-7199端口和6001端口。
allowPorts = [
{ start = 7101, end = 7199 },
{ single = 6001 }
]
# 面板相关配置(可选),配置面板后可以查看代理使用的流量统计。
# webServer.addr = "x.x.x.x"
webServer.port = 7200
webServer.user = "admin"
webServer.password = "your_pwd"
# 最大连接池数量
transport.maxPoolCount = 5
# 指定日志文件存储级别和位置,最大存储日志为7天。
log.to = "/opt/frp/frps.log"
log.level = "info"
log.maxDays = 7
服务端 systemd 管理 frp
创建管理文件
sudo vim /etc/systemd/system/frps.service
写入内容
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
[Install]
WantedBy = multi-user.target
开机自器和启动服务。
sudo systemctl enable frps && sudo systemctl start frps
服务端状态检查
检查服务是否正常,使用如下命令查看,如果服务异不是active请检查日志。
sudo systemctl status frps
客户端配置
客户端只需要留下 frpc 和 frpc.toml 文件。
编辑 frpc.toml ,完整的配置文件选项可访问 https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml 查看。
# 指定服务器地址与端口号。
serverAddr = "x.x.x.x"
serverPort = 7100
# 代理名称将会改为 {user}.{proxy},建议配置,取服务器上的token中@前部分。
user = "user1"
auth.method = "token"
auth.token = "user1@12345678"
# 面板相关配置(可选),配置面板后可以查看代理使用的流量统计。
# webServer.addr = "x.x.x.x"
webServer.port = 7200
webServer.user = "admin"
webServer.password = "your_pwd"
# 指定日志文件存储级别和位置,最大存储日志为7天。
log.to = "/opt/frp/frpc.log"
log.level = "info"
log.maxDays = 7
[[proxies]]
# name为应用名称,type为协议类型,localIP为内网服务的地址,localPort为内网服务的端口,remotePort为服务器上监听的端口,transport.bandwidthLimit为限速,服务端不限制使用端口,不建议使用1-1024端口。
name = "ssh"
type = "tcp"
localIP = "x.x.x.x"
localPort = 389
remotePort = 7101
transport.bandwidthLimit = "1MB"
客户端 systemd 管理 frp
创建管理文件
sudo vim /etc/systemd/system/frpc.service
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
[Install]
WantedBy = multi-user.target
开机自器和启动服务。
sudo systemctl enable frpc && sudo systemctl start frpc
客户端状态检查
检查服务是否正常,使用如下命令查看,如果服务异不是active请检查日志。
sudo systemctl status frpc
访问管理web
默认看板只监听本地 127.0.0.1 地址,如果你通过内网地址请修改 webServer.addr = “x.x.x.x” 配置字段。
客户端看板
服务端看板
使用如下命令查看日志文件,可用于排错和查看frp运行状态。
# 服务端
sudo cat /opt/frp/frps.log
# 客户端
sudo cat /opt/frp/frpc.log