正如我们讨论我的问题时所说的那样,问题在于:
我们可以通过 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
答案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 页面和出版物。