Sonata - SIP 配置服务器

我不知道该将配置与什么进行比较。 也许和一只猫一起? 没有它似乎也是可以的,但是有了它就更好了。 特别是如果它有效的话))

问题的表述:

  1. 我想要快速、轻松且安全地设置 SIP 电话。 安装手机时,尤其是重新配置手机时。
  2. 许多供应商都有自己的配置格式、生成配置的实用程序以及保护配置的方法。 而且我真的不想和每个人打交道。
  3. 许多配置解决方案,a) 专注于一个供应商或一个电话系统,b) 实施起来相当麻烦,有很多脚本、参数,brrr...

关于第3点,我会评论说有优秀的供应系统 适用于 FreePBX, 用于 FusionPBX, 卡祖笛,其中来自不同供应商的手机模板是公开可用的。 有一些商业解决方案,您还可以在配置模块中配置来自不同制造商的电话的操作,例如Yeastar PBX。

Habré 还提供了很多有关如何设置不同供应商的设备的方法: 时间, 。 但正如他们所说,所有系统都有一个致命的缺陷。 所以我们将制造我们自己的自行车。

你自己的格式

正如 xkcd 中所说,如果你不想处理 14 种格式 - 提出第15个。 因此,我们使用任何手机的常规设置并制作我们自己的 json 配置格式。

像这样的东西:

{
   "key": "sdgjdeu9443908",
   "token": "590sfdsf8u984",
   "model": "gxp1620",
   "vendor": "grandstream",
   "mac": "001565113af8",
   "timezone_offset": "GMT+03",
   "ntp_server": "pool.ntp.org",
   "status": true,
   "accounts": [
      {
         "name": "Мобилон",
         "line": 1,
         "sip_register": "sip.mobilonsip.ru",
         "sip_name": "sip102",
         "sip_user": "sip102",
         "sip_password": "4321",
         "sip_auth": "sip102"
      }
   ]
}

因此,在任何电话中您都需要配置本地时间和 SIP 线路。 这里一切都很简单。 你可以看更多例子 这里.

您自己的服务器配置

在制造商的手册中,通常会有这样的内容:获取 csv,写下您的登录密码-mac 地址,使用我们的专有脚本生成文件,将它们放在 Apache Web 服务器下,一切都会好起来的。

手册的下一段通常会告诉您还可以加密生成的配置文件。

但这些都是经典。 使用 Smoothies 和 Twitter 的现代方法表明,您需要制作一个现成的 Web 服务器,它不会像 Apache 那样强大,但只能做一件小事。 使用链接生成并发送配置。

让我们在此停下来,请记住,几乎所有 SIP 电话现在都可以通过 http/https 接收配置,因此我们不考虑其他实现(ftp、tftp、ftps)。 然后,每部电话都知道自己的 MAC 地址。 因此,我们将创建两个链接:一个是个人链接 - 基于设备密钥,第二个是通用链接,它使用通用令牌和 MAC 地址的组合来工作。

另外,我不会详细讨论零配置,即从头开始设置手机,即你把它插入网络,它就开始工作了。 不,在我的场景中,您将其插入网络,进行初步设置(将其设置为从配置服务器接收配置),然后喝冰镇果汁朗姆酒并根据需要通过配置重新配置手机。 分发 Option 66 由 DHCP 服务器负责。

顺便说一句,我已经厌倦了说“供应”,所以这个词被缩写为“供应”,请不要踢我。

还有一件事:我们的配置服务器没有 UI,即用户界面。 也许,现在,但不确定,因为…… 我不需要它。 但是有一个 API 用于保存/删除设置,获取支持的供应商、型号的列表,一切都是根据 swagger 规范的规范进行描述的。

为什么是 API 而不是 UI? 因为我已经拥有自己的电话系统,然后我有一个凭证来源,我只需要获取这些数据,编译必要的 json 并将其发布到配置服务器上。 如果设备不正确或不满足此 json 中指定的条件,配置服务器将根据 json 文件中指定的规则为所需设备提供配置或不提供配置。

Sonata - SIP 配置服务器

这就是配置微服务的结果。 被称为 奏鸣曲,源码可以在GitHub上找到,还有 准备好docker镜像、docker使用示例 这里.

主要特征:

  • 无论如何,按时间限制对配置的访问,默认为 10 分钟。 如果您想让配置再次可用,请再次重新发布配置。

  • 适用于所有供应商的一种格式,所有调整都在奏鸣曲中删除,您发送标准化的 json,配置任何可用的设备。

  • 记录向设备发出的所有配置,可以在日志中查看所有问题区域并看到错误

  • 可以使用一个带有令牌的公共链接;每部手机通过指定 MAC 地址来接收自己的配置。 或者通过密钥的个人链接。

  • 用于管理(管理)和向电话配置配置(配置)的 API 按端口划分

  • 测试。 对我来说,修复已发布配置的格式并涵盖通过测试发布配置的所有常见情况非常重要。 这样这一切就清楚了。

缺点:

到目前为止,Sonata 中还没有以任何方式使用加密。 那些。 例如,您当然可以通过将 nginx 放在 sonata 前面来开始使用 https。 但专有方法尚未被使用。 为什么? 该项目还很年轻,已经推出了前一百台设备。 当然,我也会收集想法和反馈。 此外,为了确保一切安全,以便配置无法在网络上被嗅探,可能值得使用加密密钥、TLS 和刺猬,但这将是一个延续。

缺乏用户界面。 也许这对于最终用户来说是一个重大缺点,但对于系统管理员来说,控制台实用程序比成熟的应用程序更重要。 有计划制作一个控制台实用程序,但我不确定是否需要?

结果如何呢?

一个小型且简单的 Web 服务器,用于通过 API 来配置多种手机型号以进行管理。

再说一次,这应该如何运作?

  1. 安装奏鸣曲。
  2. 我们创建一个 json 配置并将其发布在 sonata 中。
  3. 然后我们收到来自奏鸣曲的配置链接。
  4. 然后我们在电话中注明此链接。
  5. 设备正在加载配置

后续操作只需两步:

  1. 我们创建一个 json 配置并在 sonata 中发布它
  2. 设备正在加载配置

哪些手机将得到推广?

供应商潮流、方位、亿联。 供应商内的配置或多或少相同,但可能因固件而异 - 可能需要额外测试。

你可以制定什么规则?

按时间。 您可以指定配置可用的时间。
通过mac地址。 通过设备的个人链接提交配置时,还将检查 MAC 地址。
通过ip。 通过发出请求的 IP 地址。

如何与奏鸣曲互动?

通过API,发出http请求。 该 API 将在您的安装中可用。 因为API支持swagger规范,可以使用 在线实用程序 用于对 API 的测试请求。

太好了。 很酷的东西,尝试一下怎么样?

最简单的方法是基于存储库部署 docker 镜像 奏鸣曲样本。 该存储库包含安装说明。

如果我了解 Node.js 怎么办?

如果您有使用 JavaScript 的经验,那么您很快就会明白这里的一切是如何工作的。

会有索纳塔开发吗?

我部分实现了我的目标。 进一步的开发是我关于自动化电话设置主题的任务。 还有机会扩展配置来配置电话按钮,添加地址簿配置,也许还有其他东西,请写在评论中。

总结和致谢

我很高兴收到建设性的建议/反对/意见和问题,因为…… 他很可能描述了一些难以理解的事情。

我还要向所有提供帮助、建议、测试和提供/捐赠手机进行测试的同事表示感谢。 事实上,我在工作中交流过的很多人都不同程度地参与了这个项目, 紫苑会议'e,在聊天和电子邮件中。 感谢您的想法和想法。

来源: habr.com

添加评论