纪录一次FRP内网穿透搭建
媒介今年计划到场大学生信息安全大赛作品赛,为了让评委老师更便捷地体验我的作品,故希望实现前后端分离,将软件的功能实现放在单独的服务端。
考虑到这次项目涉及的模型情况都较为复制,所以腾讯云/阿里云上出租的CPU云服务器肯定达不到运行要求,而GPU云服务器费用又较贵,从如今租到六月份不太体现
最后综合考虑后,只能退而求其次,舍弃一部分并发处理的性能,直接将学校的工作站作为服务端,而由于工作站没有公网IP,所以就需要涉及到内网穿透技术
内网穿透技术,也被称为NAT穿透技术(Network Address Translation穿透),是一种允许互联网上的设备访问位于私有网络(例如家庭或办公网络)内部的设备或服务的技术。
原理
FRP(Fast Reverse Proxy)是github上的一个开源内网穿透项目。当然开源也是我选择它的主要原因。
项目地点:https://github.com/fatedier/frp?tab=readme-ov-file
FRP通过设置一个公共网络上的服务器(称为FRP服务器)和在内网设备上运行的客户端(称为FRP客户端)来工作。FRP的工作流程可以分为以下几个步骤:
[*]配置FRP服务器: 在公共网络上的服务器上摆设FRP服务。这个服务器将监听来自FRP客户端的连接,并将来自互联网的哀求转发到精确的内网服务。
[*]配置FRP客户端: 在需要进行内网穿透的内网设备上摆设FRP客户端。这个客户端将与FRP服务器建立连接,并根据配置将内网服务通过服务器暴露给外网。
[*]建立隧道: 当FRP客户端启动后,它会与FRP服务器建立一个隧道连接。这个隧道被用来转发哀求和相应。
[*]哀求转发: 当外网的用户或服务哀求特定的服务时,FRP服务器吸收到这个哀求后,通过建立的隧道将哀求转发到FRP客户端,再由客户端转发到内网的目标服务。
[*]相应返回: 内网服务处理完哀求后,相应会通过相同的隧道返回给FRP服务器,然后由FRP服务器发送回原始哀求者。
https://i-blog.csdnimg.cn/direct/ecef1e055267465a9c22c94dc762272e.png#pic_center
下载安装包
本次搭建的服务端及客户端情况如下
服务端:腾讯云上租的CPU云服务器(ubuntu系统)
客户端:学校实验室的工作站(ubuntu系统)
进入frp的github项目发行页,这里我选择的是稍微往前一点的稳固版本0.51.2
https://i-blog.csdnimg.cn/direct/df6c7c819e474cfcb8560a9518c6887a.png#pic_center
由于我的两个终端上的系统都是linux/X86_64,选择下载对应版本的压缩包amd64
解压后的目次结构如下
https://i-blog.csdnimg.cn/direct/a80b582fb04b4ac7ae4c81735c98bb35.png#pic_center
三个客户端文件以及三个服务端文件,另有个LICENSE
我们将对应文件上传到对应终端即可
这里服务端直接使用wget下令下载到并解压更加方便
wget https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_amd64.tar.gz
tar -zxvf frp_0.51.2_linux_amd64.tar.gz
cd frp_0.51.2_linux_amd64
但是由于我的腾讯云服务器设在内地,也没搭VPN,所以通过使用xftp连接后从本地上传
https://i-blog.csdnimg.cn/direct/f79673238ef34480987da68dd6477260.png#pic_center
记得传好后执行chmod指令给上次的frp文件夹提权
sudo chmod 777 frp_0.51.2_linux_amd64
frps配置
查看frps.ini服务端配置文件
这里我们主要设置一些与客户端连接的端口以及口令
https://i-blog.csdnimg.cn/direct/e8fb7cd2ca444900bf0a6aa5b93021b4.png#pic_center
初始情况下只设置了与客户端连接的端口7000
当然,frp还提供了仪表盘功能,我们只需在配置文件中设置仪表盘的端口、用户名和密码
bind_port = 7000
dashboard_port = 7001
dashboard_user = root
dashboard_pwd = 123456
token = 123456
[*]bind_port:客户端和服务端连接的端口
[*]dashboard_port:服务端仪表盘的端口
[*]dashboard_user:仪表盘用户名
[*]dashboard_pwd:仪表盘密码
[*]token:用于客户端和服务端连接的口令,两个终端上需保持同等
启动frps
我们可以执行以下指令在服务端开启frps服务
./frps -c frps.ini
https://i-blog.csdnimg.cn/direct/11fa6cd5487b4d5690189d66011fff03.png#pic_center
此时我们应该能在公网ip:仪表盘端口上访问frp服务端的仪表盘
https://i-blog.csdnimg.cn/direct/6eedab57c174452ab9016fa683ae147e.png#pic_center
frpc配置
同样,客户端则是配置frpc.ini文件
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
token = 123456
type = tcp
local_ip= 127.0.0.1
local_port = 6789
remote_port= 6001
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[*]server_addr:服务端的ip。
[*]server_port:服务端配置的连接端口。
[*]token:服务端配置的token。
[*]:表现一个规则的名称,可以自己定义。
[*]type:表现转发的协议范例,有tcp、udp等选项可以选择。
[*]local_ip:客户端的本地ip。
[*]local_port:客户端的本地端口号。
[*]remote_port:服务端开放的端口号。当我们通过访问server_addr : remote_port就能转发到客户端(frpc)的服务 local_ip : local_port 上。
启动frpc
我们可以执行以下指令在客户端开启frpc服务
./frpc -c frpc.ini
我们可以用ssh连上刚刚配置的ip和端口号,测试下是否搭建成功
https://i-blog.csdnimg.cn/direct/0897f1c46b3f4d36bef7e46c615386de.png#pic_center
持久化frp服务
后台运行
我们可以在启动frps和启动frpc的指令后分别加上&,让它们在后台运行,避免终端进程被我们不小心中断
./frps -c frps.ini
&./frpc -c frpc.ini
& 开机自启动
腾讯云服务器上的客户端进程运行之后就不需要去管了
我们主要是得将客户端工作站上的frpc进程转为开机自启服务,避免关机重启后frpc还需要我们再手动去启动
使用apt下令安装systemd,用于控制开机自启
apt install systemd
在/etc/systemd/system路径下新建frpc.service文件
在此中写入如下规则
Description = frp client
After = network.target syslog.target
Wants = network.target
User = root
Type = simple
Restart = on-failure
RestartSec = 5s
ExecStart = /path/to/frpc -c /path/to/frpc.ini
WantedBy = multi-user.target
此中ExecStart的值为启动frpc的下令,文件路径需要使用绝对路径
执行如下指令启动服务
# 配置 frpc 开机自启。
systemctl enable frpc.service
# 启动 frpc 服务
systemctl start frpc.service
我们可以执行如下指令查看frpc服务的状态
systemctl status frpc.service
悲报
很不幸,本人在学校工作站上搭建的内网穿透服务只存活了两周左右的时间,可能是frp的通讯特征被学校网络中心侦测到了。以后测试软件只能用todesk远控哩
页:
[1]