下一代动态隧道代理服务

概述

说起隧道代理,熟悉的朋友一定会想到frp,这是一款比较有名的开源隧道代理。并且这款产品也已经围绕着隧道代理服务搭建了自己的生态圈。

今天这篇文章主要是想抛出一个观点,并且使用一款实验性开源项目进行演示说明。

早在几年前,有心的朋友可能应注意到了,有些软件已经开始尝试支持动态更新功能了,尤其是在云原生环境下。例如:Nginx的dyups模块、Nginx的Unit服务,Kong的location热更新等等。这在容器大行其道的场景下愈演愈烈。

所以,对于frp这类的隧道代理服务而言,我也想尝试一下热更新模式。所以有了这个实验性项目——Menet

这是一个实验性项目,实验在于两方面:

  • 使用Melang语言开发,验证Melang语言的能力及稳定性
  • 支持了配置动态更新,实现上下游及隧道的动态建立、断开等功能

这个项目不建议用于生产环境,本文仅用来演示动态更新效果。

使用

使用Menet只需要安装Melang脚本解释器,然后执行Menet即可。

$ melang menet.m

这里,有两个配置是需要在启动前给定的:

  • 管理端口,用于对这个代理服务下发配置的
  • 隧道端口,每个服务的隧道监听端口是启动时确定的,其余监听端口或远端连接都是运行中动态创建的

默认的示例中,配置文件内容如下:

//conf.m

conf = [
    '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请求来完成这个结构部署,我们逐条说明:

  1. $ 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。

  2. $ 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就是加密密钥,typelocal就是在本地起监听的意思。

  3. $ 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端口建立连接并转发。

  4. $ curl -XPOST -d '{"tunnel": "tunnel1", "service":"service1", "type": "local"}' http://192.168.1.2:1234/bind
    

    这个命令是告知1.2的Menet服务,将tunnel1service1建立映射关系。

  5. $ curl -XPOST -d '{"tunnel": "tunnel1", "service":"service1", "type": "remote"}' http://192.168.1.3:1234/bind
    

    这个命令是告知1.3的Menet服务,将tunnel1service1建立映射关系。

执行完这5步后,我们就可以使用curl访问192.168.1.2:8080来间接访问192.168.1.3:80服务了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥比特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值