我有以下可用的 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 程序一样。为此,请使用
upnpc
或natpmpc
命令。如果以上方法均不起作用,您将需要某种形式的NAT 打洞. (另请参阅TCP和ICMP打孔文章。
不幸的是,虽然它被广泛应用于各种具体的程序,似乎没有很多通用的但是 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- 使用“超级节点“这是ntop
n2n
团队 - 它根据的 README进行操作supernode.ntop.org:7777
(超级节点也是免费软件,但运行它再次需要一个可公开访问的服务器)。 - 努贝拉- 类似概念
n2n
,但不是超级节点这叫做灯塔。他们不提供公开的灯塔供所有人使用,但你实际上必须dnclient
在你的公共 VPS 上运行它们,如中所述他们的文档。因此它不能满足您的要求,但我认为仍然值得一提。
其他需要付费订阅的 VPN 解决方案。
与大多数商业 VPN 服务不同,只有少数针对高级用户的服务允许两个用户通过您获得的 VPN 子网相互通信。可能还有其他提供商可以提供此功能。以下是其中一个:
- Hamachi,由 LogmeIn 提供(vpn.net)- 客户端不是开源的,但似乎根据他们的文档它确实可以让您管理网络和 IP 地址等。
基于社区维护的网络
即使在重型 NAT 之后,如果您的防火墙限制不是太严格(就我的情况而言并非如此),您也可以执行以下任一操作(不是 VPN):
最后的解决方案
即使遇到最烦人的防火墙、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 的最佳解决方案。再加上同步对于传输文件,我认为这是最好的解决方案,也是最可靠的解决方案。