通过代理和 SSH 隧道连接到本地服务器

通过代理和 SSH 隧道连接到本地服务器

我正尝试从家里的笔记本电脑访问当前托管在公司防火墙后面的 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/ screendisown或者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所在的位置。

知道了这一点,你应该能够追踪我们刚才做了什么。请注意,我们创建了通往绿色的因为(对我来说)这样工作似乎更合乎逻辑。你的连接将从绿色的那么我们来追踪一下这个方向的整个路线。它如下:

  1. SSH 客户端绿色的127.0.0.1:<chosen-port-2>因为第二条隧道而监听。
  2. 它将数据包转发到蓝色的将它们发送到127.0.0.1:<chosen-port>那里。从蓝色的从这个角度来看,这些是 SSH 服务器生成的本地数据包。
  3. 由于第一个隧道,同一个 SSH 服务器会监听该端口。该服务器会抓取数据包并将其转发到橙子
  4. SSH 客户端橙子发送数据包到红色的。 来自红色的数据包来自橙子,它对蓝色的也不是绿色的

相关内容