网络服务器的 UDP 打孔?

UDP punch hole for a web-server?

对于我的学术项目,我正在努力实现这一目标。 监听端口 3000 的 Web 服务器节点 JS 应用程序。 所以如果你 curl http://localhost:3000 你会得到 Hello World!。 ( 一个简单的网页。

现在我 运行 在本地计算机的网络服务器之上。我的调制解调器在 NAT 后面。假设如果我在调制解调器中转发到 myip:3000 那么它就对世界开放。但这是我遇到的最大问题——我不想使用调制解调器进行端口转发,相反,我将使用第三方服务器进行 UDP 穿孔。

现在我的要求是来自网络的任何人都应该能够在 curl http://third-party-server-ip:3000 访问我的网络服务器。

我正在尝试编写另一个客户端 - 它打开与第三方服务器的连接。假设它在端口 41234 进行了打孔。该端口已打开。第三方主机可以向该端口发送内容。

现在互联网上的任何人都可以向第三方主机发起此命令curl http://third-party-ip:3000。所以第三方 returns myip:udpPunchHolePortmyip:41234.

任何人都会再次卷曲到 myip:41234 它会被节点 js UDP punch 应用程序接收,因此它会重定向到 localhost:3000。最后,anyone 将收到来自 localhost:3000 的响应。

我的两个问题 -

  1. 有没有比我在这里提出的更好的方法?
  2. 有没有什么知名的 node-js 库可以处理这类东西,我明白了, 我可以使用 UDP punch hole或者我正在考虑写一个 Lib 来做一般的事情——这听起来像是在重新发明轮子吗?

注- 在这个学术项目中,我们正在尝试学习如何在没有调制解调器端口转发的情况下使任何本地应用程序向世界开放。

我们阅读skype protocol analysis,那也是我们的灵感。

不,那行不通。

  1. HTTP 在 TCP 上运行,而不是 UDP。打一个 UDP 洞对你没有任何好处——任何到后端 HTTP 服务器的 TCP 连接仍然会失败。

  2. HTTP 重定向并不神奇。如果用户无法访问特定的 host:port,将他们重定向到 host:port 上的 URL 只会使他们的浏览器在请求 URL.[=10= 时超时]

  3. 您不能从不同于浏览器请求的 host:port 发送响应,因为没有与该端点建立 TCP 连接。