frp内网穿刺/反向代理教程
前言
frp 是一个高性能的反向代理应用,可以帮助开发者轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
frp的作用如下:
- 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
- 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
- 可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
本文介绍了如何使用frp进行反向代理,使位于内网的服务器向外网提供ssh服务。
一、明确基本概念
对于新手而言,服务器、公网服务器这些概念很容易混淆,所以首先需要明确这几台机器的定义:
内网服务器/GPU服务器:假设我们实验室有一台NVIDIA A100的GPU服务器,但是目前只能通过校园网进行访问,我想把这个GPU服务器的端口映射出去,这样我在任何地方都可以连接到这台GPU服务器了。我们称这台GPU服务器为内网服务器。这个server含有更多的含义是“计算资源”。
公网服务器/云服务器:想要在任何地方都访问到内网服务器,我们必须要有一台具有公网IP的云服务器,例如从阿里云、腾讯云这些平台租到的服务器。这个server含有更多的含义是“具有公网IP”。
为了区分开,后面统称为GPU服务器、云服务器以做区分。
明确任务:我们现在想把GPU服务器
的22号端口转发到云服务器
的某个X端口,这样我们访问云服务器
的X端口时就直接访问了GPU服务器
的22号端口。
二、frp下载与使用
首先找到frp的Github页面,找到release版本并下载解压。
一般将frp文件夹放置在/usr/local/
路径下,并且将一长串名字命名为frp。
GPU服务器
的frp文件夹中删去frps*
相关文件;云服务器
的frp文件夹中删除frpc*
相关文件。
下面为GPU服务器
和云服务器
上分别的设置方法:frp说明文档
1.云服务器做为Server端
修改frp文件夹下的frps.ini
文件:
# frps.ini
[common]
bind_port = 7000 //此端口用于和GPU服务器的通讯
配置完成之后执行以下命令,开启frps服务。显示下图则开启成功。./frps -c ./frps.ini
2.GPU服务器做为Client端
修改frp文件夹下的frpc.ini
文件:
# frpc.ini
[common]
server_addr = x.x.x.x //此处填写云服务器的公网ip,或者域名
server_port = 7000 //访问云服务器的哪个端口,和云服务器的bind_port保持一致
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 // 如果接收到外部访问,提供哪个端口服务?
remote_port = 6000 // 远程连接的端口号,构建frp成功之后,直接在外网访问此端口即可。
配置完成之后执行以下命令,开启frpc服务。显示下图则开启成功。./frpc -c ./frpc.ini
3.远程访问
如需远程访问则直接运行:ssh -oPort=6000 <NAME>@x.x.x.x
其中<NAME>
为用户名,x.x.x.x
为云服务器的公网IP。
三、云服务器防火墙端口开启
安全起见,云服务器的端口默认都关闭,因为frp需要使用云服务器的两个端口:
- 7000端口:bind_port,用于和GPU服务器通讯
-
6000端口:GPU服务器指定的remote_port
若7000端口不开放则无法构建和GPU服务器之间的通讯。若6000端口不开放则远程无法访问。
端口开启需要进入云服务器的控制台界面:
上一篇: ssh反向代理实现内网穿透
下一篇: Java基础类String了解一下