SSH Tunnel 简介

SSH Tunnel是SSH的一种机制,用于从客户端到服务器的隧穿应用端口,反之亦然,可以用于内网穿透,相比其他类似于Frp、Nps等内网穿透软件,Frp不但可以将客户端本地端口、客户端能访问到的内网其他计算机端口映射至远程服务器,还可以将服务器能访问到的本地/其他计算机的任意端口映射至本地。更关键的是,SSH作为一个任何发行版都有的必备软件,其安全性拥有足够的保障。我们知道,根据Don't Break Debian,在使用Debian等Linux系统时,只使用系统包管理器所提供的包是Debian所提倡的。这些Debian所提供的包拥有极高的安全性,只要保持发行版的更新,漏洞就会几乎不可能存在。而运行第三方软件如Frp,则无法保障其安全性,并且,当进行dist-upgrade时,第三方软件很可能破坏Debian的包依赖关系,造成无法欲知的问题。(当然,golang写的软件应该还好)。

1. 端口转发概念

一定要理清从A转发到B的概念。从ipA的端口B转发到ipC的端口D意味着,ipC的D端口本身是存在的,现在在ipA开辟B端口使其接受到的所有数据包转发至ipC的D端口。即端口转发是一个主动的过程。
如本地开辟一个60022端口用于实现和远程服务器上22同样的效果,此为一个Local->Remote的过程,属于本地转发。

2. Cli命令介绍

2.1 约束

我们假设以下所有例子执行前已经配置好~/.ssh/config文件,该config配置如下:

Host serverName
  HostName server.ip.or.domain
  Port 22
  User root

并且服务器server.ip.or.domain上的/etc/ssh/sshd_config打开了GatewayPorts选项

GatewayPorts yes

该选项用于允许远程主机连接本地(服务器)的转发端口。

2.2 本地转发

本地转发用于将一个端口从客户端转发到服务器。

在OpenSSH中,本地端口转发需要使用-L参数进行配置,其命令如下:

ssh -L 本地网上可供访问的ip范围:映射使用的本地端口:转发到的服务器上的ip地址:转发到的端口 [SSH连接字符串]

如我们想将服务器的22端口映射至本地的60022端口并使局域网内的其他计算机可以访问:

ssh -L 0.0.0.0:60022:localhost:22 serverName

如我们想将服务器的22端口映射至本地的60022端口但只有本机可以访问:

ssh -L localhost:60022:localhost:22 serverName

2.3 远程转发

本地转发用于将一个端口从服务器转发到客户端。

在OpenSSH中,本地端口转发需要使用-R参数进行配置,其命令如下:

ssh -R 服务器上可供访问的ip范围:映射使用的服务器端口:转发到的本地网上的ip地址:转发到的端口 [SSH连接字符串]

如我们想将本机的22端口映射至服务器的60022端口并使所有计算机可以访问:

ssh -R 0.0.0.0:60022:localhost:22 serverName

可以看到,这和上面的命令完全一样,只要你搞清了转发的关系,SSH Tunnel的命令非常好记。

2.4 有用的参数

通过阅读ssh的man pages,有如下三个参数对端口转发很有用:-nNT,其中-n将所有stdin直接redirect至/dev/null,-N使得SSH不在远程服务器上执行命令,-T禁用了Terminal分配。

3. 保持常开

3.1 Linux:Sidedoor

3.2 Windows: MyEnTunnel

Download Here

软件很简单,看一眼就会。

myentunnel1
myentunnel1

标签: 无

发表评论: