我尝试通过 No-IP 注册动态 DNS、在我的 TP-Link 路由器中进行端口转发等方式从互联网访问我的系统,但没有成功。您可以

但我不用费心处理这些麻烦,只需使用一个命令,就可以使用 ngrok 访问系统中运行的 Apache httpd,

ngrok http http://localhost:8080

我可以通过以下 URL 访问它(如果我停止终端会话,该 URL 可能不起作用,但我可以通过运行相同的命令再次获取新的 URL。)。

现在,我不明白的是,即使有了所有必要的端口转发、动态公共 IP 和动态 DNS,我还是无法访问我的系统,而 ngrok 如何在没有任何这些的情况下实现这一点?

有对网络有深入了解的人可以帮助我理解这一点吗?

谢谢。


最佳答案
1

Ngrok 无法访问您的系统 –您的系统才是访问 Ngrok 的系统。

尽管 NAT(您的路由器和 ISP)通常会阻止您接收新的入站连接,但它会跟踪每个出站连接,以便属于活动连接的回复数据包仍可被路由进来(例如,您仍然能够接收 HTTP 响应或 SSH 到外部服务器的方式)。

因此ngrok“代理”程序会与 Ngrok 的中继服务器之一保持持久的出站连接,并且只要该 TCP 连接处于打开状态,中继服务器就可以通过它发送数据。

同样的原则适用于 SSH-R隧道(实际上 Ngrok 也有一个 SSH 前端,您可以在其中ssh ngrok -R ...设置隧道而无需使用专用程序),以及所有 VPN 连接 – 至少只要 VPN 客户端配置为定期戳服务器,这样 NAT 网关就不会忘记连接。