我正尝试从家里的笔记本电脑访问当前托管在公司防火墙后面的 Web 应用程序。
我发现了很多关于如何创建 SSH 隧道、SSH 代理或通过多跳 SSH 隧道的问题和回复。但是,我仍然无法让它工作。我相信我的情况与其他人有点不同。让我解释一下:
- 我没有对托管 Web 应用程序(红色框)的服务器进行 SSH 访问,它只有一个内部 IP。
- 我可以访问一个内部部署的 Linux 盒(橙色盒),它可以到达托管 Web 应用程序的服务器。
- 橙色盒子没有公共 IP 地址(所以我无法从互联网通过 SSH 连接到它),但它可以访问互联网,而且我可以通过 SSH 连接到托管在互联网上的服务器(例如从橙色盒子连接到蓝色盒子)。
- 我在互联网上有一个具有公共 IP 地址(蓝色框)的 Linux 服务器。
我尝试了不同的方法都没有成功,但老实说,我迷失了方向。
有谁可以帮我解答一下吗?:-)
答案1
这是橙子电脑:
ssh -N -R:<chosen-port>:10.0.0.101:<web-app-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
(如何让它在你退出后继续存在橙子– 这是另一个问题。请参阅这;或tmux
/ screen
,disown
或者nohup
使用自定义脚本。)
上述命令使 SSH 服务器蓝色的<chosen-port>
在环回接口上监听您选择的 (TCP) 。传入连接将通过隧道传输到橙子并发送至10.0.0.101:<web-app-port>
(即红色的)即可。这将创建一个隧道,而无需在蓝色的(感谢-N
选择)。
有一种方法可以使蓝色的监听其他(非环回)接口,但出于安全考虑不建议这样做;此选项甚至可能被禁用蓝色的man ssh
(在选项中解释-R
)。
为了达到蓝色的环回接口绿色的主计算机使用另一条隧道。绿色的:
ssh -N -L:<chosen-port-2>:127.0.0.1:<chosen-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
现在你应该能够到达红色的来自绿色的使用地址:
127.0.0.1:<chosen-port-2>
<chosen-port>
并且<chosen-port-2>
可能是或可能不是相同的数字,这真的不重要。重要的是你应该选择高端口(从 1024 到 65535)。
-L
和隧道的区别-R
:
-L
在本地进行监听,即您调用的地方ssh
;-R
在远程端进行监听,即监听您ssh
所在的位置。
知道了这一点,你应该能够追踪我们刚才做了什么。请注意,我们创建了通往绿色的因为(对我来说)这样工作似乎更合乎逻辑。你的连接将从绿色的那么我们来追踪一下这个方向的整个路线。它如下:
- SSH 客户端绿色的
127.0.0.1:<chosen-port-2>
因为第二条隧道而监听。 - 它将数据包转发到蓝色的将它们发送到
127.0.0.1:<chosen-port>
那里。从蓝色的从这个角度来看,这些是 SSH 服务器生成的本地数据包。 - 由于第一个隧道,同一个 SSH 服务器会监听该端口。该服务器会抓取数据包并将其转发到橙子。
- SSH 客户端橙子发送数据包到红色的。 来自红色的数据包来自橙子,它对蓝色的也不是绿色的。