利用SSH端口转发作内网穿透(转)

利用SSH端口转发作内网穿透

背景

在学校里用到的都是校园网,每个校园网会动态分配一个IP地址,且连外网需要web页面登录账号,长时间不使用账号会自动下线。现在需要从外网SSH进入内网的机器进行操作,甚至还需要将内网机器上部署的机器让外网用户访问。

说明

机器代号IP备注
A 172.16.200.11 内网机器
B 120.45.XXX.XXX 阿里云服务器
C ANY 外网机器

A和B均为Linux系统,所有Linux终端的操作为了避免权限问题,全部以root用户操作。

原理

A可以访问B,C也可以访问B。这是前提条件,否则无法实现穿透。 A将自己的ssh默认的22端口反向代理到B的10020端口上,B再将本地10020端口转发到10021端口。C直接访问B的10021端口,就可以达到访问A的22端口的效果。

注意

这里B服务器必须做一次本地端口转发,因为A反向代理到B的10020端口之后,只有B本身可以访问10020端口,其他机器是访问不了的,必须做一次本地端口转发。

操作步骤

1. 保持内网机器可以一直访问外网

在linux终端下登录校园网账号其实就是发送一个post请求带上自己的用户名密码就可以实现。 在A机器上执行命令如下:

curl -d "DDDDD=用户名" -d "upass=密码" -d "0MKKey=" http://172.16.200.13
  • 1

由于校园网长时间没有访问就会自动断开,为了保持外网的连接,利用crontab每10分钟执行登录一次。

编辑crontab定时任务:

crontab -e
  • 1

添加一行记录

*/10 7-23 * * * curl -d "DDDDD=用户名" -d "upass=密码" -d "0MKKey=" http://172.16.200.13
  • 1

对于crontab参数不明白的请自行百度。每个学校登录校园网账号的方式可能有区别,改成自己的登录方法,然后加入crontab定时任务即可。

2. 安装autossh

由于ssh连接长时间不使用会自动断开,为了保持ssh连接需要安装autossh,它会自动监听ssh连接的状态,自动重连。利用yum可以直接安装。

yum install autossh
  • 1

3. 端口转发

在A机器上将A的22端口反向代理到B的10020端口上。A执行:

autossh -M 10019 -f -CNR -p 22 '*:10020:127.0.0.1:22' root@120.45.XXX.XXX
  • 1

-M 表示autossh监听ssh连接状态的端口 
-f 后台运行autossh

后面接的是SSH的命令。SSH常用命令参数解释如下:

-f 后台运行 
-C 允许压缩数据 
-N 不执行任何命令 
-R 将端口绑定到远程服务器,反向代理 
-L 将端口绑定到本地客户端,正向代理 
-p 转发服务器B的SSH登录端口号,默认为22

接下来,在B机器上将10020端口本地转发到10021端口。B执行:

ssh -fCNL "*:10021:localhost:10020" localhost
  • 1

B机器不需要安装autossh,因为本地端口转发的ssh连接不会自动断开。

最后,在C机器上执行:

ssh -p 10021 root@120.45.XXX.XXX
  • 1

输入A机器root密码就可以登录A机器,达到内网穿透的目的。如果C机器是windows系统可以安装Xshell等软件实现访问。

总结

本文的方法不仅仅可以将A的22号端口映射到外网,也可以将其他端口,如80端口等,映射到外网。如果A机器80端口部署了一个网站,那么通过本文的方法,外网即可访问该网站。

posted @ 2019-02-12 20:51  中国人醒来了  阅读(991)  评论(0编辑  收藏  举报