Sonata-SIP设置服务器

我不知道将配置与什么进行比较。 也许和猫在一起? 没有他似乎是可能的,但是有了他会好一些。 尤其是如果可行的话))


问题陈述:


  1. 我想快速,简单,安全地配置SIP电话。 安装手机时,甚至在重新配置手机时更是如此。
  2. 许多供应商都有自己的配置格式,生成配置的实用程序,保护配置的方式。 但是我真的不想和所有人打交道。
  3. 许多供应解决方案,a)专注于一个供应商或一个电话系统,b)实施起来非常麻烦,一堆脚本,参数,...

关于第3点,我将发表评论,说有针对FreePBXFusionPBXKazoo的出色系统,其中有针对各种供应商的电话的公开可用模板。 在商业解决方案中,还可以在模块中配置不同制造商的电话的性能,例如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" } ] } 

因此,在任何电话中,您都需要配置本地时间,饮线。 这里的一切都很简单。 在这里可以找到更多示例。


自己的服务器


在制造商的手册中,通常会有这样的说法:使用csv,在其中写入login-password-poppy-address,使用我们的公司脚本生成文件,然后将其放置在Apache Web服务器下就可以了。


手册的下一段通常告诉您可以加密生成的配置文件的其他内容。


但这都是经典。 使用思慕雪和Twitter的现代方法表示,您需要制造一个现成的Web服务器,它不像Apache那样强大,而只会做一件事。 通过引用形成并提供配置。


在这里,我们停下来回顾一下,几乎所有的SIP电话现在都可以通过http / https接收配置,因此我们不考虑其他实现(ftp,tftp,ftps)。 然后,每个电话都知道自己的罂粟地址。 因此,我们将建立两个链接:一个是个人链接-通过设备密钥,第二个是通用链接,通过公共令牌和罂粟地址的组合来工作。


另外,我不会详细介绍零配置。 从头开始设置手机,即 您将其卡在网络中并获得了跃点。 不,在我的情况下,您将其固定在网络中,进行了初步配置(将其配置为从服务器接收配置),然后喝点巧克力,然后根据需要通过服务重新配置电话。 分发选项66是DHCP服务器需要考虑的问题。


顺便说一句,我完全受折磨地说“供应”,所以这个词被简化为“供应”,请不要用脚踢。


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


为什么要使用API​​,而不要使用UI? 因为 我已经有自己的电话系统,然后,我有一个凭证来源,我只需要获取这些数据,编写必要的json并将其发布在服务器上即可。 根据json文件中指定的规则,服务器已经是安全的,它将向必要的设备提供配置,或者如果设备错误或不符合此json中指定的条件,则不会提供配置。



原来是这样的微服务提供。 它被称为sonata ,源代码可在github上找到,还有一个现成的docker映像此处是使用docker的示例。


主要特点:


  • 在任何情况下,都只能按时限制访问配置,默认情况下为10分钟。 如果要再次使配置可用,请再次重新发布配置。


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


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


  • 可以使用带有令牌的公共链接,每部电话通过指定mac地址来接收自己的配置。 或钥匙上的个人链接。


  • 用于管理和配置的API跨端口划分


  • 测试。 对我而言,修复已发布配置的格式并涵盖使用测试发布配置的所有常见情况对我而言非常重要。 为了使一切都清楚地工作。



缺点:


到目前为止,尚未使用奏鸣曲加密。 即 当然,您可以通过将nginx放在奏鸣曲之前来开始使用https。 但是这里是尚未涉及的专有方法。 怎么了 该项目还很年轻,几乎推翻了它的前一百台设备。 而且,我当然会收集想法和反馈。 此外,为了安全地进行所有操作,以使配置不能在网络上被嗅探,可能有必要将加密密钥,tls和刺猬与它们混淆,但这将是一个延续。


缺乏用户界面。 对于最终用户来说,这可能是一个很大的缺点,但是对于系统管理员而言,控制台实用程序比功能完善的应用程序更重要。 有计划制作控制台实用程序,但不确定是否需要?


结果如何?


小型,简单的Web服务器,用于使用API​​来管理多个电话型号。


再次,这应该如何工作?


  1. 安装奏鸣曲。
  2. 我们形成json-config并将其发布在奏鸣曲中。
  3. 然后,我们从奏鸣曲中获得一个链接以进行配置。
  4. 然后,我们在电话机中指示此链接。
  5. 设备收紧配置

后续操作只有两个步骤:


  1. 我们形成一个json配置并在奏鸣曲中发布
  2. 设备收紧配置

上载了哪种手机?


供应商Grandstream,Fanvil和Yealink。 供应商内的配置大致相同,但可能因固件而异-可能需要进行额外测试。


可以设置哪些规则?


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


如何与奏鸣曲互动?


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


好,太好了 很酷的东西,怎么尝试?


最简单的方法是基于sonata-sample存储库部署泊坞窗映像。 该存储库包含安装说明。


如果我知道node.js?


如果您有使用JavaScript的经验,那么您将很快弄清楚这里的所有工作原理。


奏鸣曲会发展吗?


我部分实现了目标。 进一步的开发是我关于电话设置自动化的任务的问题。 仍然有机会扩展用于自定义电话按钮的配置,添加通讯簿功能(也许还有其他功能),在注释中编写。


摘要和致谢


我将很高兴提出建设性的建议/反对意见/评论和问题,因为 这很可能是难以理解的描述。


我还要感谢所有帮助,建议,测试,提供/捐赠电话进行测试的同事。 实际上,我在工作中,聊天室和电子邮件中与之交谈的很多人都在不同程度上参与了该项目。 感谢您的想法和想法。

Source: https://habr.com/ru/post/zh-CN445350/


All Articles