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

来源:互联网 发布:朕是什么意思网络此意 编辑:程序博客网 时间:2024/05/18 11:36

转载自开源中国 零号_特工 的博客 利用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

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

编辑crontab定时任务

crontab -e

添加一行记录

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

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

2. 安装autossh

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

yum install autossh

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

-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

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

最后,在C机器上执行:

ssh -p 10021 root@120.45.XXX.XXX

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

总结

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

0 0