自学内容网 自学内容网

【笔记】下云的一小步尝试——内网穿透

云上的世界很精彩,可是越来越贵,系统也越来越臃肿;如果我只需要云提供网络接入,流量大的时候CDN和load balancer就够了,其他的业务只想在内部公开,那么就得将一些需要内部化的服务下云了。用自己的数据中心,自由自在!在财力不到之前,云上的网络接入虽然贵得肉疼,还是比较简单的,配置一下就四通八达了。我们只要解决云上和云下网络通信的问题。

想要把云上云下业务解耦,自然想到了内网穿透。就是你在内部有一个服务,这个服务如果连接到互联网上。传统的服务器软件诸如httpd,nginx,haproxy等都是top-down的代理,就是入口机器有了,然后入口机器要通达所有服务,iptables和tc上场编排了。要想将内部服务暴露出去,得有一个反向bottom-up的代理,就是一个服务在那里,只要内部服务能连接到外部这个服务上,流量就能联通。

frp是一个不错的选择:

https://github.com/fatedier/frp

网上很多配置教程,frps在连外网的机器上,frpc在内部机器上,反向联通就好了。但是,云上机器都给我安装了啥,为啥正常使用frp会被报告恶意软件?没关系,自己动手写一个简易版的,先将就着。

https://github.com/stallpool/apitunnel

原理还是比较简单的,让公网机器运行一个pub server,在内网用sub连接到pub上;当访问pub的时候把流量转移到sub上就好了。这个是纯http的服务,这样少写点代码也不用管https了,套上nginx或者traefic也很方便。

业务流量通了,有时还真需要ssh到服务器上。这个是比较危险的操作,可以威胁到内部系统安全;但是我们还是先把它打通,万一要用至少能派点用处,之后就是排布内部网络,防止通过pub/sub渗透到内网了。

因为pub/sub是http协议的,所有都得http。那么ssh自然是要联想到websocket了,网上搜索了下

https://github.com/mhzed/wstunnel

有大哥已经写过一个wstunnel了,然后还有人参考这个用rust写了一遍。我们就直接用wstunnel呗,也是node;为啥用node,不用go和rust呢,因为懒随时可以改,go和rust部署前需要编译…于是改造了下pub/sub,让它简单支持websocket的穿透。原理就是外部连接pub建立长链接,通知内部也建立一个长链接,然后通过pub/sub传递websocket的消息。

改造完发现wstunnel也是各种老旧,为了用上新的lib,先disable掉了一些功能,然后将websocket换成了ws

https://github.com/dna2fork/wstunnel-node

这样在内部启动一个wstunnel的server,sub注册好;再在外部启动一个wstunnel的client连上pub,就可以使用ssh -> wstunnel (client) -> pub -> sub -> wstunnel (server) 了。

至此,云上云下的连接简单弄好了。架构上就是云上抗请求,所有的请求入队列;云下慢慢读这个队列然后处理。完成。


原文地址:https://blog.csdn.net/prog_6103/article/details/137893681

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!