ngrok如何在防火墙后工作?

时间:2014-04-30 18:08:01

标签: linux unix networking go

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

ngrok 80

我回来了:

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

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

2 个答案:

答案 0 :(得分:88)

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

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

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

有关详情,请参阅此处:Developer Guide on github.com

答案 1 :(得分:0)

您可以创建基本的http-https-tcp隧道而无需身份验证令牌。对于自定义子域以及更多子域,您应该通过在ngrok.com上注册来获取身份验证令牌。设置完毕后,它将存储在ngrok配置中,并用于所有隧道。几种方法:

等待ngrok.authtoken(token); 等待ngrok.connect({authtoken:令牌,...});