概述
说起隧道代理,相熟的敌人肯定会想到frp,这是一款比拟有名的开源隧道代理。并且这款产品也曾经围绕着隧道代理服务搭建了本人的生态圈。
明天这篇文章次要是想抛出一个观点,并且应用一款实验性开源我的项目进行演示阐明。
早在几年前,有心的敌人可能应留神到了,有些软件曾经开始尝试反对动静更新性能了,尤其是在云原生环境下。例如:Nginx的dyups模块、Nginx的Unit服务,Kong的location热更新等等。这在容器大行其道的场景下愈演愈烈。
所以,对于frp这类的隧道代理服务而言,我也想尝试一下热更新模式。所以有了这个实验性我的项目——Menet。
这是一个实验性我的项目,试验在于两方面:
- 应用Melang语言开发,验证Melang语言的能力及稳定性
- 反对了配置动静更新,实现上下游及隧道的动静建设、断开等性能
这个我的项目不倡议用于生产环境,本文仅用来演示动静更新成果。
应用
应用Menet只须要装置Melang脚本解释器,而后执行Menet即可。
$ melang menet.m
这里,有两个配置是须要在启动前给定的:
- 治理端口,用于对这个代理服务下发配置的
- 隧道端口,每个服务的隧道监听端口是启动时确定的,其余监听端口或远端连贯都是运行中动态创建的
默认的示例中,配置文件内容如下:
//conf.mconf = [ 'admin': [ //HTTP API listen address 'ip': '0.0.0.0', 'port': '1234' ], 'tunnel': [ //tunnel server listen address 'ip': '0.0.0.0', 'port': '4321' ],];
如果有批改这两个地址的须要,则可编辑conf.m
文件进行批改。
服务启动后,会看到终端输入两个监听地址,阐明服务曾经就绪。
示例
上面咱们给出一个示例,假如咱们有如下网络结构:
|---------------| |------------------| service1 |192.168.1.2 | tunnel1 |192.168.1.3 | service1----------------> |8080 Menet |--------------------->|4321 Menet |-------------->192.168.1.3:80 |admin port:1234| |admin port:1234 | |---------------| |------------------|
简略形容一下:
咱们有一个实在的80服务运行在192.168.1.3上,咱们冀望利用隧道代理从192.168.1.2的8080端口拜访这个服务。
咱们能够应用curl命令下发5个HTTP申请来实现这个构造部署,咱们逐条阐明:
$ curl -XPOST -d '{"name":"tunnel1", "dest":["192.168.1.3", "4321"]}' http://192.168.1.2:1234/tunnel
这条命令是向192.168.1.2的Menet下发的,目标是让1.2向1.3的4321端口(隧道端口)建设一个TCP连贯,这样一个隧道(
tunnel1
)就建设了。留神:这只是个示例,理论中你也能够给1.3下发申请,让它向1.2的隧道端口建设TCP。$ curl -XPOST -d '{"name":"service1", "key":"UHI@&s8sa*S", "type": "local", "addr":["0.0.0.0", "8080"]}' http://192.168.1.2:1234/service
这个申请是用来通知1.2的Menet服务,建设本地8080端口进行监听,并将这个监听服务命名为
service1
,并且隧道应用了RC4加密,因而key
就是加密密钥,type
为local
就是在本地起监听的意思。$ curl -XPOST -d '{"name":"service1", "key":"UHI@&s8sa*S", "type": "remote", "addr":["192.168.1.3", "80"]}' http://192.168.1.3:1234/service
这个申请是用来通知1.3的Menet服务,当从隧道上收到
service1
的数据时,向192.168.1.3:80
端口建设连贯并转发。$ curl -XPOST -d '{"tunnel": "tunnel1", "service":"service1", "type": "local"}' http://192.168.1.2:1234/bind
这个命令是告知1.2的Menet服务,将
tunnel1
与service1
建设映射关系。
这个命令是告知1.3的Menet服务,将`tunnel1`与`service1`建设映射关系。