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端口不开放则远程无法访问。
      端口开启需要进入云服务器的控制台界面:
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页