Sonata – serveur de provisioning SIP

Je ne sais pas Ă  quoi comparer le provisioning. Peut-ĂȘtre Ă  un chat ? On pourrait s'en passer, mais avec lui, c'est un peu mieux. Surtout s'il fonctionne ))

Problématique :

  1. Je veux configurer les téléphones SIP rapidement, simplement et en toute sécurité. Lors de l'installation du téléphone, et encore plus lors de sa reconfiguration.
  2. De nombreux fournisseurs ont leurs propres formats de configuration, leurs outils pour générer des configurations, et leurs méthodes de protection. Et s'y retrouver à chaque fois n'est pas vraiment agréable.
  3. De nombreuses solutions de provisioning sont a) orientées vers un seul fournisseur ou un seul systÚme téléphonique, b) assez encombrantes à mettre en place, avec une multitude de scripts, de paramÚtres, blablabla


Concernant le point 3, je ferai un commentaire : il existe d'excellents systĂšmes de provisioning pour FreePBX, pour FusionPBX, pour Kazoo, qui mettent Ă  disposition des modĂšles pour les tĂ©lĂ©phones de diffĂ©rents fournisseurs. Il existe Ă©galement des solutions commerciales oĂč l'on peut configurer, dans le module de provisioning, le fonctionnement des tĂ©lĂ©phones de diffĂ©rents fabricants, par exemple, les PABX Yeastar.

Il y a aussi plein de recettes sur Habr pour configurer les appareils de divers fournisseurs : un, deux. Mais comme on dit, tous les systÚmes ont un défaut fatal. Donc, nous allons créer notre propre vélo.

notre propre format

Comme le dit xkcd, si tu ne veux pas gĂ©rer 14 formats — inventes-en un 15Ăšme. Donc, nous utilisons des paramĂštres gĂ©nĂ©raux pour n'importe quel tĂ©lĂ©phone et allons crĂ©er notre propre format de config JSON.

En gros, quelque chose comme ça :

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

Donc, dans n'importe quel tĂ©lĂ©phone, il est nĂ©cessaire de configurer l'heure locale, les lignes SIP. C'est assez simple. D'autres exemples peuvent ĂȘtre consultĂ©s ici.

sur notre serveur de provisioning

Dans les manuels du fabricant, il y a généralement un point qui indique : prenez un fichier CSV, enregistrez-y le nom d'utilisateur, le mot de passe et l'adresse MAC, générez des fichiers avec notre script propriétaire, placez-les sous le serveur web Apache et tout ira bien.

Dans le point suivant du manuel, il est généralement expliqué qu'il est également possible de chiffrer le fichier de configuration généré.

Mais c'est tout de la classique. L'approche moderne avec des smoothies et Twitter indique qu'il faut crĂ©er un serveur web prĂȘt Ă  l'emploi, qui ne sera pas aussi puissant qu'Apache, mais qui fera une seule petite tĂąche. Fournir et renvoyer des configurations via un lien.

ArrĂȘtons-nous ici et rappelons-nous que presque tous les tĂ©lĂ©phones SIP peuvent maintenant obtenir des configurations via http/https, donc nous ne considĂ©rerons pas d'autres mises en Ɠuvre (ftp, tftp, ftps). Ensuite, chaque tĂ©lĂ©phone connaĂźt son adresse MAC. Nous ferons donc deux liens : l'un personnel - par une clĂ© d'appareil, l'autre gĂ©nĂ©ral, qui fonctionne par une combinaison de jeton commun et d'adresse MAC.

Je ne vais pas non plus m'attarder sur le zero-config, c'est-à-dire la configuration du téléphone « à partir de zéro », c'est-à-dire que vous l'avez branché sur le réseau et il a fonctionné. Non, dans mon scénario, vous l'avez branché sur le réseau, vous avez effectué une configuration préalable (configuré pour obtenir la configuration du serveur de provisionnement), puis vous sirotez une piña colada et reconfigurez le téléphone comme il se doit via le provisionnement. Fournir l'Option 66 est la responsabilité du serveur DHCP.

À propos, j'en ai assez de dire « provisionning », alors le mot a Ă©tĂ© abrĂ©gĂ© en « provision », ne me tapez pas, s'il vous plaĂźt.

Et aussi : notre serveur de provisionnement n'a pas d'UI, c'est-Ă -dire d'interface utilisateur. Peut-ĂȘtre, pour l'instant, mais je ne suis pas sĂ»r, car je n'en ai pas besoin. En revanche, il y a une API pour sauvegarder/supprimer des paramĂštres, obtenir la liste des fournisseurs supportĂ©s, des modĂšles, tout est dĂ©crit selon les rĂšgles de la spĂ©cification swagger.

Pourquoi une API plutĂŽt qu'une UI ? Puisque j'ai dĂ©jĂ  mon propre systĂšme tĂ©lĂ©phonique, j'ai une source d'identifiants, oĂč je peux simplement rĂ©cupĂ©rer ces donnĂ©es, composer le json nĂ©cessaire et le publier sur le serveur de provisionnement. Et le serveur de provisionnement, selon les rĂšgles spĂ©cifiĂ©es dans le fichier json, fournira Ă  l'appareil appropriĂ© sa configuration ou ne la fournira pas, si l'appareil n'est pas le bon, ou ne correspond pas aux critĂšres Ă©galement spĂ©cifiĂ©s dans ce json.

Sonata – serveur de provisioning SIP

VoilĂ , un microservice de provisionnement a Ă©tĂ© créé. Il s'appelle sonata, le code source est disponible sur GitHub, il y a aussi un image Docker prĂȘte Ă  l'emploi, exemple d'utilisation de Docker ici.

Caractéristiques clés :

  • dans tous les cas, un accĂšs limitĂ© Ă  la configuration dans le temps, par dĂ©faut 10 minutes. Si vous souhaitez rendre la configuration Ă  nouveau accessible, republiez la configuration.

  • un format pour tous les fournisseurs, tout le rĂ©glage est intĂ©grĂ© dans sonata, vous envoyez un json standardisĂ©, paramĂ©trez n'importe quel Ă©quipement disponible.

  • Tous les fichiers de configuration fournis aux appareils sont journalisĂ©s, tous les problĂšmes peuvent ĂȘtre consultĂ©s dans le journal et les erreurs peuvent ĂȘtre vues.

  • Il est possible d'utiliser un lien commun avec un token, chaque tĂ©lĂ©phone reçoit sa propre configuration en indiquant l'adresse MAC. Ou un lien personnel par clĂ©.

  • L'API pour la gestion et la dĂ©livrance des configurations aux tĂ©lĂ©phones est sĂ©parĂ©e par ports.

  • Tests. Il Ă©tait trĂšs important pour moi de fixer le format de la configuration fournie et de couvrir toutes les situations normales de dĂ©livrance de configuration par des tests. Pour que tout fonctionne correctement.

Inconvénients :

Aucune encryption n'est actuellement utilisĂ©e dans le cadre de Sonata. C'est-Ă -dire que vous pouvez bien sĂ»r commencer Ă  utiliser https en plaçant par exemple Nginx devant Sonata. Mais les mĂ©thodes propriĂ©taires ne sont pas encore mises en Ɠuvre. Pourquoi ? Le projet est encore jeune, il a Ă  peine provisionnĂ© sa premiĂšre centaine d'appareils. Et bien sĂ»r, je recueille des idĂ©es, des retours. Ensuite, pour rendre tout cela sĂ©curisĂ©, afin que les configurations ne puissent pas ĂȘtre sniffĂ©es sur le rĂ©seau, il vaut probablement la peine de se pencher sur les clĂ©s de chiffrement, SSL/TLS, etc., mais cela sera pour plus tard.

Absence d'UI. Cela peut ĂȘtre un inconvĂ©nient majeur pour l'utilisateur final, mais pour l'administrateur systĂšme, un utilitaire en console est plutĂŽt plus important qu'une application complĂšte. CrĂ©er un utilitaire en console Ă©tait prĂ©vu, mais je ne suis pas sĂ»r s'il est nĂ©cessaire.

Quel est le résultat ?

Un petit et simple serveur Web pour le provisioning de plusieurs modÚles de téléphones avec une API de gestion.

Encore une fois, comment cela devrait-il fonctionner ?

  1. Nous installons Sonata.
  2. Nous formons un fichier de configuration JSON et le publions dans Sonata.
  3. Nous obtenons ensuite de Sonata un lien pour le provisioning.
  4. Nous indiquons ensuite ce lien dans le téléphone.
  5. L'appareil tire la configuration.

Dans l'exploitation ultérieure, seulement deux étapes :

  1. Nous formons un fichier de configuration JSON et le publions dans Sonata.
  2. L'appareil tire la configuration.

Quels téléphones sont provisionnés ?

Les vendeurs Grandstream, Fanvil, Yealink. Les configurations au sein du vendeur sont plus ou moins identiques, mais peuvent diffĂ©rer selon le firmware — des tests supplĂ©mentaires peuvent ĂȘtre nĂ©cessaires.

Quelles rĂšgles peuvent ĂȘtre dĂ©finies ?

Par heure. Vous pouvez indiquer l'heure jusqu'Ă  laquelle la configuration sera disponible.
Par adresse MAC. Lors de la fourniture de la configuration par un lien personnel, l'adresse MAC de l'appareil sera également vérifiée.
Par IP. Par l'adresse IP d'oĂč la demande a Ă©tĂ© faite.

Comment interagir avec Sonata ?

Via l'API, en effectuant des requĂȘtes HTTP. L'API sera accessible dans votre installation. Comme l'API prend en charge la spĂ©cification Swagger, vous pouvez l'utiliser un utilitaire en ligne pour tester les requĂȘtes Ă  l'API.

D'accord, super. C'est vraiment cool, comment l'essayer ?

Il est plus facile de déployer une image Docker basée sur le référentiel sonata-sample. Le référentiel contient des instructions d'installation.

А ДслО Đ·ĐœĐ°ŃŽ node.js?

Si vous avez de l'expérience en JavaScript, vous comprendrez rapidement comment tout cela fonctionne.

Y aura-t-il un développement de Sonata ?

Partiellement, j'ai atteint mes objectifs. Le dĂ©veloppement futur dĂ©pend de mes tĂąches liĂ©es Ă  l'automatisation de la configuration des tĂ©lĂ©phones. Il y a encore la possibilitĂ© d'Ă©largir les configurations pour rĂ©gler les boutons des tĂ©lĂ©phones, d'ajouter des adresses de provisionnement, peut-ĂȘtre d'autres choses, Ă©crivez dans les commentaires.

Résumé et remerciements

Je serais heureux d'avoir des propositions / objections / commentaires constructifs et des questions, car il se peut que j'aie mal expliqué quelque chose.

Je tiens également à remercier tous les collÚgues qui ont aidé, conseillé, testé, fourni / donné des téléphones pour les tests. Réellement, de nombreuses personnes, avec qui j'ai interagi au travail, sont impliquées dans le projet à divers niveaux, sur AsterConfà travers des discussions dans des chats et des e-mails. Merci pour les idées et les réflexions.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster