使用一个公共 SSH 服务器建立从 A 到 C 的直接 SSH 连接,无需公共 IP

使用一个公共 SSH 服务器建立从 A 到 C 的直接 SSH 连接,无需公共 IP

我有以下可用的 SSH 服务器/客户端:

A – 没有公网 IP

B——公共 IP

C – 没有公网 IP

我知道,我可以按照如下方式建立从 A 到 C 的 SSH 连接:

1)将 C 钩至 B。从 C 开始执行:

ssh -R 10100:localhost:22 B_IP

2)使用 B 钩子设置从 A 到 C 的端口转发,以便能够在机器 A 上使用 ssh-agent:

ssh -L 5000:localhost:10100 B_IP

3)现在我可以使用我的 ssh 密钥从 A“直接”访问 C:

ssh -p 5000 localhost

...我的观点是:

我能以某种方式建立从 A 到 C 的新的“纯”连接吗这样当B机器宕机后,我还能继续我的工作吗?

我认为这应该是可能的,只要这两台计算机意识到它们已经共享连接,还是我错了?

感谢您的时间和想法:)

答案1

  • 通常方法就是在 A 或 C 的路由器上设置“NAT 端口转发”。(具体如何设置取决于路由器,但到处都有说明。)完成此操作后,您可以连接到 C 路由器的公共地址 +“转发”端口,连接将通过 C。

    (注:NAT 端口转发和 SSH 端口转发类似但截然不同(例如锤子和螺丝刀。不要混淆它们。)

  • 如果您没有路由器的管理权限,您可以尝试使用 UPnP 或 NAT-PMP 设置端口转发规则,就像许多游戏和 P2P 程序一样。为此,请使用upnpcnatpmpc命令。

  • 如果以上方法均不起作用,您将需要某种形式的NAT 打洞. (另请参阅TCPICMP打孔文章。

    不幸的是,虽然它被广泛应用于各种具体的程序,似乎没有很多通用的但是 TCP 工具乔纳特可能会有效。

答案2

除非您可以在路由器上进行某种端口转发,否则这可能是不可能的 - 但在这种情况下,您根本不需要计算机 C。

问题是,在您的示例中,您不是直接从 A -> C,所有数据包仍穿过 B。

如果您有另一台带有公共地址的计算机,您可能可以在星形拓扑中设置 VPN,并使用 VPN 之间的路由来创建一个虚拟网络,其中任何一个公共主机都可以故障,并且一切可以继续工作。我已经使用 OpenVPN 完成了此操作 - 有几个问题 - 一个重要的问题是禁用反向路径过滤。

答案3

一种方法是使用点对点 VPN - 这种 VPN 不需要其中一个主机具有静态 IP 地址或指向它的静态域名。下面提到的其他想法实际上并不是 VPN,而是通过某种协议建立点对点连接的软件。以下是一些选项:

基于毒物聊天网络:

我亲自尝试了这两种解决方案,但它们都被我工作(大型公司风格)的网络阻止了。

  • 毒网- 截至今天似乎维护得不是很好,但应该可以工作。
  • 通托克斯- 类似的想法,虽然它不是真正的 VPN,但可以在 tox 网络上的两台机器之间建立连接并转发 ssh 端口。ssh 的示例可在 README 中找到。
基于公共、非免费聊天服务

我个人还没有尝试过这些,并且我怀疑它们是否会起作用,但它们可能值得尝试。

  • 局域网络VPN- 基于 Discord。截至目前,维护似乎不太好,而且 README 中没有包含很多示例,但也许值得检查一下。
  • 机器人- 维护得似乎不太好。而且安装似乎很难 - 使用谷歌语音(以前称为 GTalk)。
基于公共服务器的 VPN(由其他人维护)

个人经历:尝试过n2n,但被我工作(大型公司风格)的网络阻止了。

  • n2n- 使用“超级节点“这是ntopn2n团队 - 它根据的 README进行操作supernode.ntop.org:7777(超级节点也是免费软件,但运行它再次需要一个可公开访问的服务器)。
  • 努贝拉- 类似概念n2n,但不是超级节点这叫做灯塔。他们不提供公开的灯塔供所有人使用,但你实际上必须dnclient在你的公共 VPS 上运行它们,如中所述他们的文档。因此它不能满足您的要求,但我认为仍然值得一提。
其他需要付费订阅的 VPN 解决方案。

与大多数商业 VPN 服务不同,只有少数针对高级用户的服务允许两个用户通过您获得的 VPN 子网相互通信。可能还有其他提供商可以提供此功能。以下是其中一个:

基于社区维护的网络

即使在重型 NAT 之后,如果您的防火墙限制不是太严格(就我的情况而言并非如此),您也可以执行以下任一操作(不是 VPN):

  • 托尔- 尝试本指南. 基本上,您正在创建一个.onion域(tor 服务),世界各地的 tor 用户都可以访问该域。
  • 双向通信- 尝试本指南其中还包含针对我推荐的客户的i2dp说明。i2p
最后的解决方案

即使遇到最烦人的防火墙、NAT和其他网络限制,你也应该能够使用出色的https://tmate.io/免费(如免费啤酒和言论自由)软件和服务。但它也有一些缺点:

  • 没有交互式命令(参见问题 #179)。
  • 没有scp支持。
  • tmux截至目前,此 fork 所基于的版本为2.6.0,而当前 tmux 的最新版本为3.3a- 这意味着,要让您的 tmux~/.tmux.conf以 的形式工作~/.tmate.conf,您必须进行一些不小的调整(请参阅例如来自我的个人点文件)。

虽然 tmate 的维护者没有明确提到这一点,但我认为提到的前两个缺点是故意的限制,因为人们可以滥用这些功能通过 的tmate.io服务器传输大量数据。因此,这tmate实际上为你的 shell 提供了一种“远程桌面”。你必须找到其他方法来在两台机器之间传输文件(考虑同步)。

总而言之,tmate 的易用性和出色的性能使其成为 IMO 的最佳解决方案。再加上同步对于传输文件,我认为这是最好的解决方案,也是最可靠的解决方案。

相关内容