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

sel*_*ler 9 firewall ssh nat sshd ssh-tunnel

我家里有一台运行 irssi、rtorrent 等的计算机(家庭服务器)。我的 ISP 正在阻止来自外部的所有流量(愚蠢,我知道,但它是我唯一可以拥有的 ISP)。

我希望能够从任何远程计算机(在 NAT 后面)登录到home-server的外壳。

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

这是描述情况的图表: 在此处输入图片说明

这可以访问我的家庭服务器上的 shell吗?我听说了一些关于 ssh 隧道的消息,但我找不到任何与这种情况相匹配的教程。

Dar*_*oid 18

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

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

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

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

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

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

  • 在`ssh 127.0.0.1 -p 20000`之后它工作了。不过,如果你能解释一下…… (2认同)

Ryu*_*usa 7

我试图更好地解释下面接受的解决方案。让我们假设“机器 A”和“机器 B”都在 NAT 防火墙之后。虽然两者都可以通过 ssh 访问远程“机器 R”(比如 VPS)。

R -> A

ssh -R 20000:127.0.0.1:22 user@RemoteHost
Run Code Online (Sandbox Code Playgroud)
  1. 以上命令在机器A上执行。

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

乙 -> 乙

ssh -L 8000:127.0.0.1:20000 user@RemoteHost
Run Code Online (Sandbox Code Playgroud)
  1. 以上命令在B上执行。

  2. 创建了一个从隧道B的端口8000)到- [R 口R的20000

乙 -> 甲

ssh 127.0.0.1 -p 8000
Run Code Online (Sandbox Code Playgroud)

实际连接通过R 进行,即B(端口 8000)-> R(端口 20000)-> A(端口 22)


同样使用 PuTTY 和 windows:

R -> A

putty.exe -R 20000:127.0.0.1:22 -ssh RemoteHost -P port -l user -pw password
Run Code Online (Sandbox Code Playgroud)

乙 -> 乙

putty.exe -L 8000:127.0.0.1:20000  -ssh RemoteHost -P port -l user -pw password
Run Code Online (Sandbox Code Playgroud)

乙 -> 甲

putty.exe -ssh 127.0.0.1 -P 8000 -l user -pw password
Run Code Online (Sandbox Code Playgroud)