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 服务器获取连接。
我试图更好地解释下面接受的解决方案。让我们假设“机器 A”和“机器 B”都在 NAT 防火墙之后。虽然两者都可以通过 ssh 访问远程“机器 R”(比如 VPS)。
R -> A
ssh -R 20000:127.0.0.1:22 user@RemoteHost
Run Code Online (Sandbox Code Playgroud)
以上命令在机器A上执行。
创建从R(R 的端口 20000)到A(A 的端口 22)的隧道(反向隧道)
乙 -> 乙
ssh -L 8000:127.0.0.1:20000 user@RemoteHost
Run Code Online (Sandbox Code Playgroud)
以上命令在B上执行。
创建了一个从隧道乙(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)
| 归档时间: |
|
| 查看次数: |
7885 次 |
| 最近记录: |