关于后端:下一代动态隧道代理服务

34次阅读

共计 1950 个字符,预计需要花费 5 分钟才能阅读完成。

概述

说起隧道代理,相熟的敌人肯定会想到 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建设映射关系。


这个命令是告知 1.3 的 Menet 服务,将 `tunnel1` 与 `service1` 建设映射关系。

正文完
 0