如何实现内网穿透(FRP+Screen)

一、为什么要内网穿透

当需要在外网获取内网内部的服务时,就可以进行内网渗透。内网穿透简单来讲就是通过一个带有公网ip的中继服务器进行消息中转,将内网的端口暴露出来,内网机器与中继服务器之间一直保持通信,公网需要访问内网服务的时候,只需访问中继服务器即可。

答主这里的需求就是,当在家没有校园网的时候想要连接学校里面的服务器(QaQ放假还要干活。。。)

这里我们使用FRP+Screen的方案

FRP的作用就是分为clientserver两个程序,分别运行在内网机器和中继服务器上,负责保持二者之间的通讯,以及消息的转发。

Screen的作用是让FRP程序一直在服务器上保持挂起运行。

二、什么是FRP和Screen

1. FRP

内网穿透工具有很多,其中 Frp (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。官网地址:frp

2. Screen

Screen简单来说可以实现让一个程序一直挂起运行在服务器上,这里我们需要的是让FRP服务器端的程序一直运行在我们的中继服务器上,让FRP客户端程序一直运行在内网服务器中。我们只需要用到几个命令,详细使用教程参见Screen教程

screen -S xx   创建一个新的名为xx的窗口
Ctrl + A + D 挂起当前窗口,回到主窗口
screen -ls  列出当前所有窗口
screen -r xx 回到xx窗口

三、安装步骤


1.安装screen

注意内网服务器和中继服务器上都需要安装Screen

安装步骤如下,出现版本号即为成功

[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5


2.安装FRP

这里安装的是v0.37.1版本,如果有最新版本可以进行替换。查看最新版本frp-v

因为frp包含client端和server端,以下步骤同样需要在内网服务器和中继服务器上都运行安装一遍。

sudo wget "https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz"
sudo tar xzvf frp_0.37.1_linux_amd64.tar.gz

3.内网服务器配置

以下命令均在内网服务器上执行:

a)使用screen创建一个窗口,起名为frp_client

screen -S frp_client 

创建完成后,窗口自动切换至frp_client窗口,后续操作均在frp_client环境中,只要该环境保持挂起,内部程序一直保持运行。

b) 编辑frpc.ini配置文件

执行以下命令

cd frp_0.37.1_linux_amd64/
vim frpc.ini

编辑frpc.ini配置文件

[common]
server_addr = xx.xx.xx.xx # 改为远程中继服务器ip
server_port = 7000    # 默认通信端口,可以不改

[ssh]
type = tcp
local_ip = xx.xx.xx.xx    # 改为内网服务器ip
local_port = 22 # 修改为ssh连接内网服务器端口,一般为22
remote_port = 59022 # 中继服务器监听端口

c)启动frpc client端服务

./frpc -c ./frpc.ini

d)将frpc_client窗口挂起

Ctrl+A+D:快捷键将目前窗口挂起,回到主窗口,这样即使断开连接fepc_client窗口内的程序还会保持运行。(如果想重新回到frpc_client窗口,首先执行 screen -ls 列出当前所有窗口,再screen -r 窗口编号 即可)

4. 中继服务器配置

以下命令均在中继服务器上执行:

a) 添加防火墙规则,这里添加7000端口和59022端口。其中7000端口负责与内网服务器保持通信,59022端口是在监听公网的ssh请求,一旦公网ssh59022端口,中继服务器就进行转发。

b)创建frpc_server窗口

screen -S frp_server

c)启动frpc server端程序

cd frp_0.37.1_linux_amd64/
./frps -c ./frps.ini

d)将frpc_server环境挂起

Ctrl+A+D:快捷键将目前窗口挂起,回到主窗口。

四. 测试

此时,中继服务器和内网服务器之间应该已经保持连接,内网穿透的功能应该已经实现。

此时我们只要ssh 中继服务器的 59022端口,使用内网服务器的账号密码,即可登录内网服务器。

你可能感兴趣的:(tcpip,服务器,ssh)