FRP介绍:
FRP内网穿透是一种通过将本地网络服务暴露到公共网络中的技术。通过使用FRP软件,用户可以将本地网络中的应用程序、服务或资源映射到互联网上,从而实现远程访问。这种技术通常用于远程管理、远程调试、远程办公等场景,提供了便利和灵活性。用户可以通过配置FRP客户端和服务器来实现内网穿透,确保数据传输的安全性和稳定性。
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。 代理组间的负载均衡。 端口复用,多个服务通过同一个服务端端口暴露。 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。 服务端和客户端 UI 页面。
实验环境及工具:
实验环境 | IP地址 | 备注 |
---|---|---|
Centos7 | 192.168.94.194 | 虚拟机(需要穿透出去的客户端) |
WindowServer2012 | 4.XXX | 云服务器(服务端) |
FRP官网下载地址:FRP官网下载地址
我这里下载的是frp0.57版本
解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。
Linux系统:
编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini
启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor。
windows系统:
如果是 Windows 用户,需要在 cmd 终端中执行命令。先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini启动客户端
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
FRP服务端部署教程:
我这里使用的是windowsServer2012的VPS,下载安装教程就忽略了,直接去官网下载压缩包直接解压。
下载之后直接编辑frps.toml配置文件。配置相应的控制面板用户名和密码
配置完进行保存运行。
运行命令.\frps.exe -c frps.toml,但是这个命令的话关机就会自动断开,所以我们可以配置一个自动启动的脚本命令。
新建一个bat文件输入以下命令:
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~0"" h",0)(window.close)&&exit
:begin
REM
C:
cd C:\Users\Administrator\Desktop\frp_0.57.0_windows_amd64\frp_0.57.0_windows_amd64
.\frps.exe -c frps.toml
那么我们只要把这个bat文件加入开机启动项里面,当每次服务器重启进入系统就会自启动这个bat文件,开启FRP服务。
FRP客户端部署教程:
如果是Linux客户端可以使用相关的下载命令,wget、curl从官网直接下载压缩包至系统当中
例如:
wgethttps://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
这里我把我之前下载好的0.57版本的包直接上传至客户端中并通过tar命令解压
这里我们能看到有两个绿色的可执行文件与两个配置文件,由于我们这里是客户端所以直接配置frpc.toml配置文件,最后通过frpc读取并执行配置文件
vi frpc.toml
serverAddr = "127.0.0.1" #VPS公网IP服务器的IP地址
serverPort = 15000 #外网服务器通信绑定的端口
[[proxies]]
name = "web" #名称
type = "tcp" #协议类型
localIP = "192.168.94.194" #客户端的IP地址
localPort = 8080 #本地客户端服务开放的端口号
remotePort = 8080 #映射到云服务上面的端口号(根据自己的来,非强制性指定的端口)
这里如果大家要设置其他服务就按照上面那个模板来复制修改就可以了,那么我们配置完毕后,wq!保存退出。
启动服务:执行./frpc -c ./frpc.ini启动,这是前台启动,后台启动命令为nohup ./frpc -c ./frpc.ini,建议先运行该命令,只要运行过程中有错误,都会回显。
那么开启之后,我们在内网Centos7中部署了一个tomcat服务,端口号为8080,在内网访问可以正常访问。tomcat服务里面也部署了一个资产管理系统。两者都访问
于是我们访问一下VPS是否能够正常访问出tomcat服务的默认页面。
在访问一下tomcat下部署的资产管理系统。
好,能够正常访问vps的tomcat服务,那么FRP内网穿透就代表成功了
优化FRP与相关常用命令拓展:
如果运行报错,需要重新修改配置文件,需要先停止FRP的运行:
如果是前台启动的话需要停止服务直接Ctrl+C即可停止。
#查询进程与结束进程命令:
ps -ef |grep frpc
kill -9 [进程号]
除了我前面讲到的两种启动方式:执行./frpc -c ./frpc.ini启动,这是前台启动,后台启动命令为nohup ./frpc -c ./frpc.ini。
我们还可以编译成系统命令来更方便的进行管理与启动。
vim /etc/systemd/system/frpc.service
新增以下内容:
[Unit]
Description=frpc daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/frp_0.57.0_linux_amd64/frpc -c /usr/frp_0.57.0_linux_amd64/frpc.toml
[Install]
WantedBy=multi-user.target
执行命令:
systemctl start frpc.service #开启frpc服务
systemctl status frpc.service #查看frpc服务的状态
systemctl stop frpc.service #关闭frpc服务
systemctl enable frpc.service #设置frpc服务开机自启动
那么以后我们直接可以通过系统命令直接启动frp服务了,更快捷方便!
还可以访问FRP控制面板查看各个隧道的运行状况。