我家里有一台电脑(家庭服务器) 运行 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
以上命令在机器上执行A。
创建隧道R(R 的 20000 端口) 到A(A 的 22 号端口)(反向隧道)
B -> R
ssh -L 8000:127.0.0.1:20000 user@RemoteHost
上述命令执行于乙。
创建隧道乙(B 的 8000 端口) 到R(R 的 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 解决方案也可以起作用。)