介绍

frp是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCPUDPHTTPHTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网IP的节点进行中转

工作原理

FRP的基本工作流程如下:

  • 客户端(frpc): 部署在内网中,负责将内网服务通过FRP协议发送到公共服务器。
  • 服务器(frps): 部署在外网中,接收来自客户端的数据,并将请求转发到相应的内网服务。

当外网用户访问公共服务器上的特定端口时,FRP服务器会将请求转发给相应的FRP客户端,从而实现对内网服务的访问。

FRP工作原理图

FRP的优点

  • 高性能:FRP对流量进行了优化,支持高并发连接。
  • 配置灵活:支持多种协议,且可以对不同服务进行不同的配置。
  • 开源免费:FRP 是一款开源软件,用户可以根据需要自由修改和使用。

FRP的安装与配置

接下来我们将介绍如何在你的服务器和内网设备上安装和配置FRP。所以,要使用 FRP 实现内网穿透,首先需要拥有一台 VPS。关于如何选择和购买 VPS,请参考这篇文章

环境准备

在开始之前,你需要准备以下环境:

  • 一台公网服务器(用于部署FRP服务器),本案例是采用ubuntu的系统。具体的版本如下所示

  • 一台内网设备(用于部署FRP客户端),内网的机器我采用的是pve系统,具体版本如下所示:

服务器端(frps)安装与配置

FRP 服务端(frps)的安装方式多种多样,您可以选择使用二进制文件或 Docker 进行部署。

二进制部署

通过github获取最新版文件下载,如下图所示:

登录系统后,切换到指定目录。在本例中,我选择了opt目录。

cd /opt

下载frp文件,将wget后面的连接换下最新版本。

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

执行下面的命令对frp应用重命名:

mv frp_0.60.0_linux_amd64 frp_0.60.0

文件介绍:

  • frps:服务端启动文件。

  • frps.toml:服务端的配置文件。

所以,服务端只需要留下 frpsfrps.toml 即可。编辑 frps.toml ,完成的配置文件选项可访问官方模板

bindAddr = "0.0.0.0"
bindPort = 7000

auth.method = "token"  # 用于客户端和服务器通信的身份验证令牌
auth.token = "user1@1234"   #秘钥格式建议配置 用户+@+密码 的格式,方便区分用户

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "user"      #管理面板的用户
webServer.password = "密码"  #管理面板的密码

# tls
#transport.tls.force = true
#transport.tls.certFile = "/etc/frp/ssl/server.crt"
#transport.tls.keyFile = "/etc/frp/ssl/server.key"
#transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"

配置服务端systemd管理frp,执行下面的命令创建frps.service文件。

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_0.60.0/frps -c /opt/frp_0.60.0/frps.toml

[Install]
WantedBy = multi-user.target

执行下面的命令启用开机自器和启动服务。

systemctl enable frps && sudo systemctl start frps

检查服务是否正常,使用如下命令查看,如果服务异不是active请检查日志。

systemctl status frps

1Panel部署

如果觉得上面的二进制部署方式复杂,可以尝试使用 1Panel部署。由于我的VPS已经安装了 1Panel,可以直接通过 1Panel 轻松安装 frps

  • 打开1panel应用商店,直接找到frp服务端,安装

  • 部署完成如下图所示:

  • 认证方式,默认是tokentoken的设置和获取,在应用市场、已安装,点进入安装目录按钮。

frps状态

frps配置文件

客户端安装配置

客户端只需要留下frpcfrpc.toml文件。编辑frpc.toml,并在该文件添加如下内容:

serverAddr = "x.x.x.x"  #VPS服务器的IP地址(公网IP)
serverPort = 7000       #frps服务端口,对于的上面的frps配置文件bindPort的值
auth.method = "token"
auth.token = "token"   #frps服务认证token,对于的上面的frps配置文件auth.token的值

[[proxies]]
name = "pve-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 1022

上述[[proxies]]代码块的意思是把本地的22端口,通过公网IP的1022端口进行转发。说明白一点就是通过公网的1022端口即可访问内网的本机的22端口。

注意:

  • 这个1022端口需要在VPS的防火墙上进行放通。

配置客户端systemd管理frpc,执行下面的命令创建frpc.service文件。

vim /etc/systemd/system/frpc.service

并在该文件添加如下内容:

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frpc/frpc -c /usr/local/frp/frpc/frpc.toml

[Install]
WantedBy = multi-user.target

执行下面的命令启用开机自器和启动服务。

systemctl enable frpc && sudo systemctl start frpc

执行下面的命令检查客户端状态是否正常,如果服务异不是active请检查日志。

systemctl status frpc

frpc状态

访问管理web

默认看板只监听本地 127.0.0.1 地址,如果你通过内网地址请修改 webServer.addr = "x.x.x.x" 配置字段。

服务端看板

总结

通过本文的介绍,相信你已经对FRP有了较为全面的了解。从基本的安装配置到高级功能的使用,FRP都能满足你不同场景下的内网穿透需求。如果你正在寻找一款高效、易用的内网穿透工具,FRP无疑是一个非常不错的选择。赶快动手试试吧,让你的远程访问不再受限!