通过第三台公网 IP 计算机在两台 behind-nat 计算机之间建立 SSH 连接

通过第三台公网 IP 计算机在两台 behind-nat 计算机之间建立 SSH 连接

我家里有一台电脑(家庭服务器) 运行 irssi、rtorrent 等。我的 ISP 阻止了来自外部的所有流量(我知道这很愚蠢,但这是我唯一能拥有的 ISP)。

我希望能够登录家庭服务器任何的 shell远程计算机(NAT 后面)。

我在某处有 shell 帐户(没有 root 访问权限),这可能有用。

下面是描述情况的图表: 在此处输入图片描述

这是否可能获得对我的 shell 的访问权限家庭服务器? 我听说过一些有关 ssh 隧道的事情,但是我找不到与此案例相匹配的任何教程。

答案1

在家庭服务器上(从第三方到家庭的隧道):
ssh -R 20000:127.0.0.1:22 thirdparty.org

这会将您的家庭盒连接到第三方 shell,然后开始将任何到第三方 shell 上端口 20000 的连接转发到您的家庭盒上的端口 22(SSH 端口)。

在远程计算机上(从远程到第三方的隧道):
ssh -L 20000:127.0.0.1:20000 thirdparty.org

这会将您的远程盒连接到第三方 shell,然后开始将远程盒上的端口 20000 转发到第三方 shell 上的端口 20000。

然后在远程计算机上(通过隧道连接):
ssh 127.0.0.1:20000输入你的家庭服务器的凭证

这将尝试通过 ssh 连接到远程机器上的端口 20000。由于我们设置了到第三方的隧道,因此 #2 命令会有效地将此连接尝试转发到第三方 shell 上的 127.0.0.1:20000。然后,第一个命令再次将连接转发到主机器上的端口 22,此时 ssh 服务器会获取连接。

答案2

我尝试更好地解释下面可接受的解决方案。假设“机器 A”和“机器 B”都位于 NAT 防火墙后面。两者都可以 ssh 访问远程“机器 R”(例如 VPS)。

R -> A

ssh -R 20000:127.0.0.1:22 user@RemoteHost
  1. 以上命令在机器上执行A

  2. 创建隧道RR 的 20000 端口) 到AA 的 22 号端口)(反向隧道)

B -> R

ssh -L 8000:127.0.0.1:20000 user@RemoteHost
  1. 上述命令执行于

  2. 创建隧道B 的 8000 端口) 到RR 的 20000 端口

B->A

ssh 127.0.0.1 -p 8000

实际连接正在进行R, 那是(端口 8000)-> R(端口 20000)-> 一个(端口 22)


使用PuTTY和Windows也是一样:

R -> A

putty.exe -R 20000:127.0.0.1:22 -ssh RemoteHost -P port -l user -pw password

B -> R

putty.exe -L 8000:127.0.0.1:20000  -ssh RemoteHost -P port -l user -pw password

B->A

putty.exe -ssh 127.0.0.1 -P 8000 -l user -pw password

答案3

或者您也可以使用 HE.net 设置一些 IPv6 隧道并直接连接......(许多 VPN 解决方案也可以起作用。)

答案4

免费,但可能会对某些人有所帮助..添加图片来增强上述内容。

在此处输入图片描述

相关内容