如何构建本地隧道/ngrok 克隆

Lan*_*ard 6 http remote-access tunneling node.js

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

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

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

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

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

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

也许我应该看看这里:)。

Ale*_*shi 4

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

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

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

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

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

我认为这就是它的运作方式。