反向SSH隧道

反向SSH隧道

当你的家里/寝室/实验室(一切没有公网IP地址的地方)运行着一台*nix服务器, 而你随时需要ssh登陆这台机器, 你会怎么做呢?

  • DDNS + 端口转发当然是一种常用的做法,但是可能遇到一些棘手的问题:
    • 多层嵌套NAT
    • 无权操作上层路由
    • 运营商级别的NAT
    • 运营商干扰
  • 有一种很好的解决方案是使用反向SSH隧道(SSH Reverse Tunnel)

    反向 SSH 隧道的概念非常简单。使用这种方案,在你的受限的家庭网络之外你需要另一台主机(所谓的“中继主机”),你能从当前所在地通过 SSH 登录到它。你可以用有公网 IP 地址的 VPS 实例 配置一个中继主机。然后要做的就是从你的家庭网络服务器中建立一个到公网中继主机的永久 SSH 隧道。有了这个隧道,你就可以从中继主机中连接“回”家庭服务器(这就是为什么称之为 “反向” 隧道)。不管你在哪里、你的家庭网络中的 NAT 或 防火墙限制多么严格,只要你可以访问中继主机,你就可以连接到家庭服务器。

  • 如下图所示

建立反向SSH隧道

  • 仅需要一行命令即可, 在Internal server上执行

  • 这里端口 5211 是任何你可以使用的端口数字。只需要确保中继服务器上不会有其它程序使用这个端口。
  • “-R 5211:localhost:22” 选项定义了一个反向隧道。它转发中继服务器 5211 端口的流量到家庭服务器的 22 号端口。
  • 用 “-fN” 选项,当你成功通过 SSH 服务器验证时 SSH 会进入后台运行。

  • 此时反向SSH隧道就建立好了

从中继服务器登陆Internal server

  • 确认反向SSH隧道是否已经建立,执行以下命令查看是否正常监听5211端口

  • 登陆

设置一个自动的反向SSH隧道

  • 以上隧道需要手动在Internal server执行以建立隧道,但是有时我们可能不能手动执行
    • 不在Internal server身边
    • Internal server IP地址发生了变化
    • 因为断电等原因重启了服务或重启了机器
  • 解决方案: autossh
  • 这个程序可以让你的 SSH 会话无论因为什么原因中断都会自动重连。

  • 我们需要:

    • 使用密钥验证,而不是密码验证。
    • 自动接受(未知)SSH 主机密钥。

  • “-M 52111” 选项指定中继服务器上的监视端口,用于交换监视 SSH 会话的测试数据。中继服务器上的其它程序不能使用这个端口。
  • 将以上命令加入Internal server开机执行

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注