欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

frp内网穿刺/反向代理教程

程序员文章站 2022-07-15 13:41:59
...


前言

   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

frp内网穿刺/反向代理教程

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

frp内网穿刺/反向代理教程

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端口不开放则远程无法访问。
      端口开启需要进入云服务器的控制台界面:
    frp内网穿刺/反向代理教程