localtunnel架构¶
不知道你有没有想到过,当我们在家里使用 Raspberry Pi Atlas 构建起 Web Atlas 或者 K3s - 轻量级Kubernetes ( Kubernetes Atlas 轻量级实现 ),但是仅仅因为家用网络没有Internet公网IP地址,无法对外提供服务或演示。那么我们有什么方法能够把这个NAT内部网络服务输出到外界,实现一个个人的 私有云计算构建 呢?
对于我个人的云计算实践,我想实现:
构建 边缘云计算构建 ,采用 K3s - 轻量级Kubernetes 实现一个边缘云计算,并且将个人的开发和部署架构向外提供服务
所有的数据和架构都由自己掌握,不依赖于公有云服务商(仅使用公有云提供代理入口)
我的思路¶
我最初考虑是使用 Linux VPN :
使用一个互联网VPS构建对外出口
在Home网路中部署 Raspberry Pi Atlas 的 K3s - 轻量级Kubernetes ,通过 OpenConnect VPN 建立起内部网络到互联网桥头堡VPS的加密连接
localtunnel¶
实际上早在十几年前(2010年),有一个开源工具 progrium/localtunnel 巧妙地实现了long-lived TCP tunnel方式,将NAT局域网中地服务器输出到因特网上。并且,这个开源项目实现了多个语言版本:
prototype版本 2010年早期,采用Python Twisted实现整个系统
v1版本 2010年中期,采用OpenSS包装方式,客户端使用Ruby,服务端使用Python Twisted
v2版本 2011年到2013年,尝试项目化和服务化,客户端和服务器端使用Python gevent并解决了v1版本很多问题
localtunnel
现在已经不再开发,但是这个开源项目继续影响着世界,还有其他人开发了 Node.js Atlas 版本 localtunnel.me ( 输出本地Node.js应用到Internet ),并且产生了商业化公司 ngrok.com 提供快速简便的方法将个人无公网IP的服务器输出到因特网上。
ngrok¶
ngrok.com 是最流行的tunnel服务公司,使用Go开发,提供不同平台架构的客户端,可以快速把本地服务通过它的站点向外输出:
通过
ngrok.com
的一个随机子域名(如3gf892ks.ngrok.com
)价格大约和VPS或者租用小型虚拟机差不多。
ngrok DEVELOPMENT.md 提供了较为详细的原理说明
localtunnel原理¶
参考¶
progrium/localtunnel 最早实现的开源解决方案,提供了python,go语言实现,并且启发了其他语言实现以及商业模式的形成