如何在两个不同的 NAT 后面的两台机器之间设置 SSH 隧道

如何在两个不同的 NAT 后面的两台机器之间设置 SSH 隧道

我家里的 Windows PC 位于 NAT/防火墙后面,办公室的 Windows PC 位于 NAT/防火墙后面。也就是说,两台 PC 都没有公开可见的 IP 地址。在每台 PC 上,我都在 VirtualBox 上运行 Ubuntu VM。

我公司的 IT 人员不允许我从外部通过 SSH 进入我的 Windows 计算机或该计算机上运行的 Ubuntu VM,他们也不会打开任何端口来让我的计算机可以访问,也不会为我的 Windows PC 或 Ubuntu VM 提供公开可见的 IP 地址。但我可以通过 SSH 退出(我经常这样做来管理 Amazon EC2 实例)。

我想通过 SSH 从我的(无法寻址的)家用机器连接到我的(无法寻址的)工作机器,这样我就可以在家里的工作机器上运行软件。我在网上找到的所有解决方案都要求其中一台虚拟机具有网络寻址能力,但当两台机器都无法寻址时,没有一个能解决问题。我愿意花几块钱租一台便宜的 Digital Ocean 服务器来桥接 Ubuntu 虚拟机之间的通信。

有没有办法在我的 Ubuntu VM 和外部 Digital Ocean 服务器之间配置一组 SSH 隧道,这样我工作中的 Ubuntu VM 就可以通过 SSH 从家里的 Ubuntu VM 寻址?我愿意通过从每个 Ubuntu VM 到(可寻址的)Digital Ocean 服务器设置 SSH 隧道(使用来自 Ubuntu VM 的 SSH 命令)来实现这一点。

答案1

您可以轻松完成此操作,且无需花费任何费用。

1)在家里,从无ip.com. 您将被赋予一个像

  my_name.no-ip.biz

2) 在路由器或电脑上进行设置;这样,即使您的 ISP 更改了您的 IP 地址,上面的昵称也始终指向您的家。网站无ip.com有关于如何做到这一点的说明。

3) 在您的路由器中,将端口 6521 和 ssh 端口(2222?)转发到您的电脑。

4)在工作中:首先使用 ssh 设置到上述昵称的反向隧道,并检查它是否正常工作;

5)现在下载自动SSH对于你的发行版,一个小包装器使用端口 6521(这就是原因!)来检查连接是否仍然处于活动状态,如果不是,它会终止正在运行的远程控制并开始一个新的。

通常,我会编写一个名为汽车内容如下:

 #!/bin/sh
 /usr/lib/autossh/autossh -M 6521 -f -p 2222 -2 -N -R 8400:localhost:22 [email protected] -i /home/myname/.ssh/id_rsa

这将设置一个无密码远程控制无需终端(-N)的连接(参见加密密钥**id_rsa的使用),在协议2(-2)中,使用端口6521检查连接是否仍然处于活动状态,并将所有发送到工作端口8400的内容重定向到我的家庭端口22。

我把这行

   su myname -c /home/myname/bin/auto

执行可执行文件汽车在启动时自动以我自己的身份(而不是 root 身份)进入 /etc/rc.local。我现在可以使用以下命令连接到我的工作电脑:

   ssh -Y myname_at_work@localhost -p 8400 -i /home/myname/.ssh/id_rsa_work

我现在必须使用无密码密钥工作我发现这种连接始终处于开启状态。真的很令人满意。

答案2

如果他们允许,您可以尝试类似 hamachi 之类的东西(我使用付费的 logmein hamachi)让两台机器彼此存在于私人 VPN 上。

一旦在两台机器上运行,您就可以使用它的 VPN IP 通过 ssh 连接到另一台机器。

答案3

如果您更喜欢使用您提到的 Digital Ocean 服务器而不是 Hamachi 等,我建议您研究一下 OpenVpn。将 do 服务器设置为服务器,将 PC 设置为客户端,并确保允许客户端相互访问,这样就大功告成了。然后,您可以通过其 vpn ip 地址访问您的工作 PC。

相关内容