首页 > 解决方案 > 如何构建 localtunnel / ngrok 克隆

问题描述

存在ngroklocaltunnel之类的服务,因此您可以(我不太热衷于描述这一点)将您的 localhost 放在公共网络上,以便通过公共 URL 访问Localtunnel似乎更受欢迎。

我的问题是,在一般级别/高级概述之类的事情上,您如何自己实现这一点?就像,我怎样才能创建一个域mydomain.com,然后让它这样一个 cli 命令mydomain create-tunnel会返回一个唯一的 URL12345.mydomain.com或其他什么,然后我可以从那个唯一的 URL 访问我的本地主机。

我知道如何构建 CLI 和 RESTful Web 应用程序,但我不知道 localhost 和公共 URL 之间的连接在哪里。我看不到如何在公共 URL(仅限 https URL)上托管我的本地主机。

如果我尝试考虑一下,我可能会尝试搜索导致隧道协议的HTTP 隧道。HTTP 隧道页面没有透露太多。我认为隧道协议页面的级别太低了,我想我在问更高的级别。

但如果我试着想象会发生什么……浏览器向mydomain.com. 然后,这与我本地计算机上的 HTTPS 服务器建立了一个已经打开的 HTTPS 连接。它将请求代理到本地机器的 HTTPS 服务器。然后这会向 localhost 发出请求。也就是说,它将来自本地 HTTPS 服务器的请求代理到我实际关注的任何 localhost 服务器。它向 localhost 服务器发出请求,然后得到响应。将响应传送回远程机器,然后远程机器将其传送回浏览器。

另外,在安全性方面我需要担心什么(无论是在构建安全隧道应用程序方面,还是在如何绕过防火墙方面,可以这么说)?

也许我应该看这里:)。

标签: node.jshttpremote-accesstunneling

解决方案


我发现这个问题没有答案,我也遇到了同样的问题。其所依据的概念有两个:

  • 反向端口转发:从本地计算机连接到公共主机(您必须获得授权)并要求将特定端口上的所有传入请求转发到 ssh 连接请求开始的本地计算机的 ssh 连接。例如,在您的本地计算机上,您在端口 8080 上有一个 Web 服务器,并且您希望从您知道用户的用户名和密码的公共域服务器访问它:

    ssh -N -R 80:localhost:8080 serveruser@my.public.host.com

现在您可以通过在端口 80 上调用公共服务器来访问本地 Web 服务器。

  • 子域:如果您在公共服务器上有 nginx 或 apache 或其他一些反向代理,您可以在航班上创建一个子域,将地址传送到本地服务器请求 ssh 反向连接,然后,知道特定的主机地址(理解子域),它可以启动 ssh 反向连接。

这就是我认为它的工作原理。


推荐阅读