SSH 的妙用——反向连接和隧道代理

SSH 是神器

如题,就是这样。就从最常用的远程连接主机的功能来说,已经足以称为神器了。这次介绍的反向连接和隧道代理功能,还能让其实用性更上一层楼。SSH 是神器。

能解决的问题

非常常见的需求:校园网是内网。我们在校外时,可能会需要使用学校内网的资源。

约定

反向连接和隧道代理主要涉及到三台主机。为了后面叙述方便,我们先约定一下它们名字和性质:

  • Home: 本地主机,可以理解为你在家里时用的电脑。
  • School: 远程主机,可以理解为你在学校里的电脑或设备。
  • VPS: SSH 连接的主机,一定要有公网 IP,是连接 Home 和 School 的桥梁。

反向连接

我们在 School 运行:

1
ssh -R Home:2333:School:6666 user@VPS

运行后的效果是在 Home 访问 2333 端口,会连接到 School 的 6666 端口。

隧道代理

我们在 Home 运行:

1
ssh -D 2048 user@School

这句命令的意思是在本机的 2048 端口开启 SOCKS 代理,这样就可以通过 School 来上网了。

解决方案

说完上面这些,解决方案自然就大致形成了。

  • Home 通过隧道代理连接到 School 上网,就实现了访问 School 内网资源的需求。
  • 上述过程的障碍在于 School 处于内网,无法直接访问。
  • 于是就采用反向连接,通过 Home 和 School 都能访问的 VPS 进行端口转发。
  • 事实上不少家庭宽带会给分配公网 IP,此时 Home 和 VPS 可以合并。

实例

  1. 在 School 运行:

    1
    ssh -R VPS:2222:localhost:22 user@VPS
  2. 在 Home 运行:

    1
    ssh -D 2048 user@VPS -p 2222
  3. 在 Home 设置 SOCKS 代理 127.0.0.1:2048 上网。