是否可以通过类似 bittorrent 的技术建立点对点 SSH 连接?

是否可以通过类似 bittorrent 的技术建立点对点 SSH 连接?

正如我们讨论我的问题时所说的那样,问题在于:

我们可以通过 UDP Hole Punching 技术建立 TCP 连接吗?

-- 原始问题/历史 --

我正在使用 OpenSSH 的反向隧道功能来连接防火墙后面的 SSH 服务器。

现在我可以server-behind-firewall通过发出以下命令来连接机器 ssh me@my-known-server -p 12345

这样,my-laptop的所有流量都会被路由到my-known-server,并且my-known-server正在将这些流量路由到server-behind-firewall机器。我认为这是低效的。

我正在寻找一种能够提供相同功能但使用 bittorrent 技术的技术(即对等方与my-known-server(跟踪器)创建 UDP 连接并直接向对方发送数据包)

有什么方法可以实现这个功能吗?

编辑:

Bittorrent 连接是通过“UDP 打洞”技术创建的。

編輯-2:

显然,我正在寻找的是通过使用 NAT 遍历技术的“Hamachi”类软件建立 SSH 连接。

答案1

SSH-P2P正是你想要做的,它创建直接的点对点 ssh 连接使用 RTCDataChannel/WebRTC 作为传输(使用 ICE NAT Transversal 进行打洞)。

如果客户端或服务器位于非常受限的网络中,则直接连接将失败。通常,点对点连接会回退到使用代理服务器(对于 RTC 来说,则是 TURN 服务器),但SSH-P2P如果无法直接连接,则会失败

所以,如果SSH-P2P无法连接,您应该使用代理服务器。您可以使用您描述的“反向代理”方法,也可以使用第三方代理作为恩格罗克或者塞维奥

答案2

回答你的问题,我很确定没有这样的功能,首先因为 SSH 是基于 TCP 的协议而不是 UDP。

到达网关后面的主机的标准方法是使用文件ProxyCommand中的选项~/.ssh/config

隧道在其他地方有解释但实际上,你基本上可以通过代理“跳跃”你的 SSH,只需指定一个命令即可,该命令将打开与可以作为下一个 SSH 跳跃的远程主机的 TCP:22 连接。(尽管在许多情况下,你只需要一个代理。)

例如,使用您在问题中提到的主机名,您可以将以下内容添加到my-laptop.ssh/config 文件中:

host server-behind-firewall
    ProxyCommand ssh -xaqW%h:22 my-known-server

然后您通过 ssh 连接到server-behind-firewall,笔记本电脑上的 ssh 客户端将与 建立连接,该服务器my-known-server将与防火墙服务器建立连接并将流量代理回传给您。这意味着您在 上有一个 SSH 帐户my-known-server。虽然代理可能不是管理数据的最有效方式,但它是安全的、有据可查的,并且是建立此类连接的公认方法。

“对等端 [创建] UDP 连接... 并直接 [发送] 数据包”的想法只有在机器能够直接相互连接时才有效。由于无法直接访问受防火墙保护的机器,因此唯一的访问方式是通过其网关上的代理。

如果您的防火墙服务器位于使用 NAT 访问外部世界的网络上,那么服务器可能会建立自己的独立连接以绕过防火墙。但要小心这样做。网络管理员非常重视防火墙绕过策略。为了保持对事物的访问,您应该努力您的网络管理员应该找到解决方案,而不是绕过他们。

答案3

似乎有一种方法可以做到这一点,即使没有第三方服务器(例如跟踪器),使用一个名为的工具pwnat

有关详细信息,请参阅这个超级用户帖子或者pwnat github 页面出版物

相关内容