ngrok如何在防火墙后工作?

aso*_*erg 36 unix linux networking go

Ngrok(https://ngrok.com/)应该允许您通过转发向世界范围的Web公开本地端口和服务.但是,如果我在本地计算机上打开端口80,如下所示:

ngrok 80
Run Code Online (Sandbox Code Playgroud)

我回来了:

Tunnel Status                 online
Version                       1.3/1.3
Forwarding                    http://3a4bfceb.ngrok.com -> 127.0.0.1:80
Forwarding                    https://3a4bfceb.ngrok.com -> 127.0.0.1:80
Web Interface                 http://127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms
Run Code Online (Sandbox Code Playgroud)

据我所知,对http://3a4bfceb.ngrok.com的任何请求都将通过端口80进入我的本地计算机,但是如果我坐在阻止传入流量的NAT /防火墙后面(这是一种非常常见的情况).ngrok是否启动轮询请求以确定何时收到数据?

Ral*_*veo 99

由于ngrok隧道始终首先在客户端启动,因此它可以与服务器协商安全通道.这是解决传统防火墙配置的一个非常灵活的解决方案.

这是由客户端在内部完成的,它打开一个长寿命的tcp连接,其中在一个物理套接字连接中创建了许多逻辑套接字.该技术称为流复用.通过这种设置,不需要任何类型的轮询,因为客户端和服务器仍然具有完全双向通信.

然后客户端和服务器通过心跳机制保持活动状态,该机制确保连接打开并正常工作,甚至在出错或丢失/关闭连接时重新连接.

有关更多信息,请参阅此内容:github.com上的开发人员指南