Sonata - Serveur d'approvisionnement SIP

Je ne sais pas avec quoi comparer l'approvisionnement. Peut-être avec un chat? Cela semble possible sans lui, mais avec lui un peu mieux. Surtout si ça marche))


Énoncé du problème:


  1. Je souhaite configurer les téléphones SIP rapidement, simplement et en toute sécurité. Lors de l'installation du téléphone, et plus encore lors de sa reconfiguration.
  2. De nombreux fournisseurs ont leurs propres formats de configuration, leurs utilitaires pour générer des configurations, leurs propres façons de protéger les configurations. Mais je ne veux pas vraiment traiter avec tout le monde.
  3. De nombreuses solutions de provisioning, a) sont axées sur un fournisseur ou un système téléphonique, b) elles sont plutôt lourdes à mettre en œuvre, un tas de scripts, de paramètres, de br ...

Au point 3, je ferai un commentaire qu'il existe d'excellents systèmes pour FreePBX , FusionPBX , Kazoo , où il existe des modèles accessibles au public pour les téléphones de divers fournisseurs. Il existe des solutions commerciales où il est également possible de configurer dans le module les performances des téléphones de différents fabricants, par exemple Yeastar PBX.


Sur Habré est également plein de recettes sur la façon de configurer les appareils de différents fournisseurs: un , deux . Mais comme on dit, tous les systèmes ont une faille fatale. Faites donc votre vélo.


propre format


Comme on dit dans xkcd, je ne veux pas traiter avec 14 formats - imaginez le 15 . Par conséquent, nous utilisons les paramètres généraux de n'importe quel téléphone et créons notre propre configuration au format json.


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": "", "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, vous devez configurer l'heure locale, les lignes de gorgée. Ici, tout est simple. Plus d'exemples peuvent être trouvés ici .


propre serveur


Dans les manuels du fabricant, il y a généralement un point où il est dit: prenez csv, écrivez l'adresse login-password-poppy-là, générez des fichiers avec notre script d'entreprise, mettez-les sous le serveur Web Apache et ça ira.


Le paragraphe suivant du manuel vous indique généralement quoi d'autre vous pouvez crypter le fichier de configuration généré.


Mais tout cela est un classique. L'approche moderne avec des smoothies et Twitter dit que vous devez créer un serveur Web prêt à l'emploi qui ne sera pas aussi puissant qu'Apache, mais ne fera qu'une petite chose. Formez et donnez des configurations par référence.


Ici, nous nous arrêtons et rappelons que presque tous les téléphones SIP peuvent désormais recevoir des configurations via http / https, donc nous ne considérons pas d'autres implémentations (ftp, tftp, ftps). Ensuite, chaque téléphone connaît sa propre adresse de pavot. Par conséquent, nous allons créer deux liens: un personnel - sur la clé de l'appareil, le deuxième général, qui fonctionne sur un tas d'adresses de jeton et de pavot communes.


De plus, je ne m'attarderai pas sur la configuration zéro, c'est-à-dire configurer le téléphone à partir de zéro, c.-à-d. Vous l'avez coincé dans le réseau et cela a gagné un bond. Non, dans mon scénario, vous l'avez coincé dans le réseau, effectué une configuration préliminaire (configuré pour recevoir la configuration du serveur), puis buvez du chocolat et reconfigurez le téléphone au besoin via le service. La distribution de l'option 66 est la préoccupation du serveur DHCP.


Soit dit en passant, je suis complètement torturé de dire "ravitaillement", donc le mot a été réduit à "ravitaillement", ne donnez pas de coup de pied, s'il vous plaît, avec vos pieds.


Et encore une chose: notre serveur n'a pas d'interface utilisateur, c'est-à-dire interface utilisateur. Peut-être pour l'instant, mais pas sûr, car Je n'en ai pas besoin. Mais il existe une API pour enregistrer / supprimer les paramètres, obtenir une liste des fournisseurs pris en charge, des modèles, tout est décrit selon les canons de la spécification swagger.


Pourquoi une API, pas une interface utilisateur? Parce que J'ai déjà mon propre système téléphonique, alors, j'ai une source d'informations d'identification, où j'ai juste besoin de prendre ces données, de composer le json nécessaire et de le publier sur le serveur. Et déjà le serveur est sécurisé selon les règles spécifiées dans le fichier json, il distribuera la configuration au périphérique nécessaire ou ne donnera pas si le périphérique est incorrect, ou ne répond pas aux critères spécifiés dans ce json également.



Voici une telle disposition de microservice. Cela s'appelle la sonate , le code source est disponible sur le github, il y a aussi une image docker prĂŞte Ă  l'emploi , un exemple d'utilisation de docker ici .


Caractéristiques clés:


  • en tout cas, accès limitĂ© Ă  la config Ă  l'heure, par dĂ©faut 10 minutes. Si vous souhaitez rendre la configuration Ă  nouveau disponible, republiez la configuration Ă  nouveau.


  • un seul format pour tous les fournisseurs, tous les rĂ©glages sont supprimĂ©s en sonate, vous envoyez des json standardisĂ©s, vous configurez tout Ă©quipement disponible.


  • toutes les configurations Ă©mises vers les appareils sont enregistrĂ©es, toutes les zones problĂ©matiques peuvent ĂŞtre consultĂ©es dans le journal et voir les erreurs


  • il est possible d'utiliser un lien commun avec token, chaque tĂ©lĂ©phone reçoit sa propre configuration en spĂ©cifiant l'adresse mac. Ou un lien personnel sur clĂ©.


  • Les API de gestion et d'approvisionnement sont rĂ©parties entre les ports


  • Tests. Il Ă©tait très important pour moi de fixer le format de la configuration Ă©mise et de couvrir toutes les situations habituelles d'Ă©mission de la configuration avec des tests. Pour que tout fonctionne clairement.



Inconvénients:


Jusqu'à présent, le cryptage sonata n'a pas été utilisé. C'est-à-dire Bien sûr, vous pouvez commencer à utiliser https en mettant nginx, par exemple, avant la sonate. Mais voici les méthodes propriétaires non encore impliquées. Pourquoi? Le projet est encore jeune, a presque renversé ses cent premiers appareils. Et, bien sûr, je recueille des idées, des commentaires. De plus, afin de tout sécuriser afin que les configurations ne puissent pas être détectées sur le réseau, cela vaut probablement la peine de se soucier des clés de chiffrement, des tls et d'un hérisson avec elles, mais ce sera une continuation.


Manque d'interface. C'est peut-être un inconvénient important pour l'utilisateur final, mais pour l'administrateur système, l'utilitaire de console est plus important qu'une application à part entière. Il était prévu de créer un utilitaire de console, mais vous ne savez pas s'il est nécessaire?


Quel est le résultat?


Petit serveur Web simple pour provisionner plusieurs modèles de téléphones avec API pour la gestion.


Encore une fois, comment cela devrait-il fonctionner?


  1. Installez la sonate.
  2. Nous formons json-config et le publions en sonate.
  3. Ensuite, nous obtenons un lien de la sonate pour l'approvisionnement.
  4. Ensuite, nous indiquons ce lien dans le téléphone.
  5. L'appareil resserre la config

l'opération suivante ne comporte que deux étapes:


  1. Nous formons une config json et la publions en sonate
  2. L'appareil resserre la config

Quels types de téléphones sont téléchargés?


Vendeurs Grandstream, Fanvil, Yealink. Les configurations au sein du fournisseur sont plus ou moins les mêmes, mais peuvent différer selon le firmware - il peut être nécessaire de tester en plus.


Quelles règles peuvent être fixées?


Par le temps. Vous pouvez spécifier la durée jusqu'à laquelle la configuration sera disponible.
Par adresse mac. Lorsque vous envoyez la configuration via le lien personnel de l'appareil, l'adresse mac sera également vérifiée.
Par ip. Par adresse IP, d'où la demande a été faite.


Comment interagir avec la sonate?


Via l'API, faire des requêtes http. L'API sera disponible dans votre installation. Parce que Étant donné que l'API prend en charge la spécification Swagger, vous pouvez utiliser l' utilitaire en ligne pour les demandes de test à l'API.


Ok, super. Chose sympa, comment essayer?


Le moyen le plus simple consiste à déployer une image Docker basée sur le référentiel d' échantillons de sonates . Le référentiel contient des instructions d'installation.


Et si je connais node.js?


Si vous avez de l'expérience avec JavaScript, vous découvrirez rapidement comment tout fonctionne ici.


La sonate va-t-elle se développer?


J'ai partiellement atteint mes objectifs. La poursuite du développement est une question de mes tâches sur le thème de l'automatisation des paramètres du téléphone. Il y a toujours la possibilité d'étendre les configurations pour personnaliser les boutons du téléphone, d'ajouter les fonctionnalités du carnet d'adresses, peut-être autre chose, d'écrire dans les commentaires.


Résumé et remerciements


Je me ferai un plaisir de formuler des suggestions / objections / commentaires et questions constructifs, cela pourrait bien être quelque chose d'incompréhensible décrit.


Je remercie également tous les collègues qui ont aidé, conseillé, testé, fourni / donné des téléphones pour les tests. En fait, beaucoup de gens avec qui j'ai parlé au travail, dans les bavardoirs et les courriels ont été impliqués dans le projet dans une mesure différente. Merci pour les idées et les réflexions.

Source: https://habr.com/ru/post/fr445350/


All Articles