SSH隧道、端口转发、反向代理等等

20210130

引言

之前利用SSH搭建过反向代理,也构架过一个socks代理;当时的脚本应该都找不到了。本篇文章记录一下为了访问内网机器搭建的一个反向代理。搭建起来也比较简单,不过一开始也是看了不对的文章,并没有成功。

本篇文章主要参考了[1][2]两篇文章。

需求

我这边的需求也比较简单,内网机器由于工作需要,需要进行外网访问;其实几年前的时候也有这种想法,但是怕不安全,毕竟如果做不好防护容易导致内网暴露在外网上。这次也是迫不得己,反正也仅仅是我自己用,就直接在阿里云上开放端口,然后做好安全组,绑定只有我的ip能够访问。那么这部分需求,实际上就是一个反向代理的功能。

本次进行实验的机器操作系统都是Centos7,一个是内网机器,一个是阿里云的机器。
最终要达到的效果就是,通过访问阿里云机器的某个端口,可以得到访问内网某个机器某个端口的效果,当然这个机器并不一定非得是执行这个命令的机器,也可以是其他的机器。

那么简单里说,例如我回家以后无法访问实验室内网的深度学习服务器,或者说其机器上开放的服务,例如jupyter,那么就可以通过这种命令来实现。
在文章[1]中,简单介绍了ssh端口转发的集中模式,这里主要针对反向代理来说明。

实验过程

实验环境

在文章中,假设内网执行相关命令机器的ip是10.0.0.2,还有另外一台内网机器10.0.0.3,外网机器是123.123.123.123。

实验步骤

按照文章[1]以及自己的理解,反向代理的命令如下(在内网机器上执行)

ssh -NfR 123.123.123.123:12345:10.0.0.2:22 [email protected]

上述命令会在外网机器上开启一个端口12345,而通过连接这个端口就能实现访问10.0.0.2机器。上述命令中的内网机器的端口可以更换为任意的内网机器和端口,例如10.0.0.3。

**但是需要注意的是,虽然上面的命令没错,但是并不能实现访问端口123.123.123.123:12345就能访问这个内网机器,此时只能实现外网机器自己访问回环网卡的12345端口访问内网机器。**因此,这里缺少的是一个文件配置问题,那就是全局的转发。
此时参考文章[2]中的方式,修改sshd文件。
修改外网机器上的sshd配置文件。

GatewayPorts yes

然后重启服务即可。
当然这种隧道是不稳定的,可能出现短线的情况,那么可以利用文章[2]中的方式部署脚本让命令自动重启。

使用感受

虽然这种反向代理的方式比较简单,但我最近的感受就是带宽不够,下载文件最高也就150k,目前没有找到哪个部分的原因导致到;另外就是,如果是多个端口,那么必然要开启多个隧道。其实如果能使用v-p-n的方式,端口的问题就能更好解决了。

参考

[1]ssh端口转发笔记:ssh反向代理(隧道)、动态代理、本地代理
[2]使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化

你可能感兴趣的:(Linux下命令使用,linux,反向代理,ssh,端口转发)