Sonata - SIP-Bereitstellungsserver

Ich weiß nicht, womit ich Provisioning vergleichen soll. Vielleicht mit einer Katze? Ohne ihn scheint es möglich, aber mit ihm etwas besser. Besonders wenn es funktioniert))


Problemstellung:


  1. Ich möchte SIP-Telefone schnell, einfach und sicher konfigurieren. Bei der Installation des Telefons und vor allem bei der Neukonfiguration.
  2. Viele Anbieter haben ihre eigenen Konfigurationsformate, ihre Dienstprogramme zum Generieren von Konfigurationen und ihre eigenen Methoden zum Schutz von Konfigurationen. Aber ich möchte nicht wirklich mit jedem umgehen.
  3. Viele Bereitstellungslösungen, a) konzentrieren sich auf einen Anbieter oder ein Telefonsystem, b) sind ziemlich umständlich zu implementieren, eine Reihe von Skripten, Parametern, ...

Zu Punkt 3 möchte ich kommentieren, dass es hervorragende Systeme für FreePBX , FusionPBX , Kazoo gibt , bei denen es öffentlich verfügbare Vorlagen für Telefone verschiedener Anbieter gibt. Es gibt kommerzielle Lösungen, bei denen es auch möglich ist, im Modul den Betrieb von Telefonen verschiedener Hersteller zu konfigurieren, z. B. Yeastar PBX.


Auf Habré gibt es auch viele Rezepte zum Konfigurieren von Geräten verschiedener Hersteller: eins , zwei . Aber wie sie sagen, haben alle Systeme einen schwerwiegenden Fehler. Also mach dein Fahrrad.


eigenes Format


Wie sie in xkcd sagen, wollen Sie sich nicht mit 14 Formaten befassen - denken Sie an das 15 .. Daher verwenden wir die allgemeinen Einstellungen für jedes Telefon und erstellen unsere eigene Konfiguration im JSON-Format.


So etwas wie das:


{ "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" } ] } 

In jedem Telefon müssen Sie also die Ortszeit und die Schluckleitungen konfigurieren. Hier ist alles einfach. Weitere Beispiele finden Sie hier .


eigener Server


In den Handbüchern des Herstellers steht normalerweise ein Punkt, an dem es heißt: Nehmen Sie CSV, schreiben Sie dort das Login-Passwort-Mohn-Adresse, generieren Sie Dateien mit unserem Firmenskript, legen Sie sie unter den Apache-Webserver und es wird in Ordnung sein.


Im nächsten Abschnitt des Handbuchs erfahren Sie normalerweise, was Sie sonst noch für die generierte Konfigurationsdatei verschlüsseln können.


Aber das ist alles ein Klassiker. Der moderne Ansatz mit Smoothies und Twitter besagt, dass Sie einen vorgefertigten Webserver erstellen müssen, der nicht so leistungsfähig wie Apache ist, sondern nur eine kleine Sache erledigt. Formen und geben Sie Konfigurationen durch Bezugnahme.


Hier halten wir an und erinnern uns, dass fast alle SIP-Telefone jetzt Konfigurationen über http / https empfangen können, sodass wir andere Implementierungen (ftp, tftp, ftps) nicht berücksichtigen. Dann kennt jedes Telefon seine eigene Mohnadresse. Daher werden wir zwei Links erstellen: einen persönlichen - auf dem Schlüssel des Geräts, den zweiten allgemeinen, der mit einer Reihe von gemeinsamen Token- und Mohnadressen arbeitet.


Ich werde auch nicht auf die Nullkonfiguration eingehen, d.h. Einrichten des Telefons von Grund auf neu, d.h. Du hast es in das Netzwerk gesteckt und es hat einen Sprung verdient. Nein, in meinem Szenario haben Sie es im Netzwerk gespeichert, eine vorläufige Konfiguration vorgenommen (konfiguriert, um die Konfiguration vom Server zu erhalten), dann etwas Schokolade getrunken und das Telefon nach Bedarf über den Dienst neu konfiguriert. Das Verteilen von Option 66 ist das Anliegen des DHCP-Servers.


Übrigens bin ich völlig gefoltert, "Provisioning" zu sagen, daher wurde das Wort auf "Provisioning" reduziert. Treten Sie bitte nicht mit Ihren Füßen.


Und noch etwas: Unser Server hat keine Benutzeroberfläche, d. H. Benutzeroberfläche. Vielleicht vorerst, aber nicht sicher, weil Ich brauche nicht Es gibt jedoch eine API zum Speichern / Löschen von Einstellungen, zum Abrufen einer Liste der unterstützten Anbieter und Modelle. Alles wird gemäß den Kanonen der Swagger-Spezifikation beschrieben.


Warum eine API, keine Benutzeroberfläche? Weil Ich habe bereits mein eigenes Telefonsystem, dann habe ich eine Quelle für Anmeldeinformationen, wo ich nur diese Daten nehmen, den erforderlichen JSON zusammenstellen und auf dem Server veröffentlichen muss. Und bereits ist der Server gemäß den in der JSON-Datei angegebenen Regeln sicher. Er gibt die Konfiguration an das erforderliche Gerät weiter oder gibt sie nicht aus, wenn das Gerät falsch ist oder die in diesem JSON angegebenen Kriterien nicht erfüllt.



Hier hat sich eine solche Microservice-Bereitstellung herausgestellt. Es heißt Sonate , der Quellcode ist auf dem Github verfügbar, es gibt auch ein fertiges Docker-Image , ein Beispiel für die Verwendung von Docker hier .


Hauptmerkmale:


  • In jedem Fall eingeschränkter Zugriff auf die Konfiguration pünktlich, standardmäßig 10 Minuten. Wenn Sie die Konfiguration wieder verfügbar machen möchten, veröffentlichen Sie die Konfiguration erneut.


  • Ein Format für alle Anbieter, alle Abstimmungen werden in der Sonate entfernt, Sie senden standardisierte JSON, Sie konfigurieren alle verfügbaren Geräte.


  • Alle an Geräte ausgegebenen Konfigurationen werden protokolliert. Alle Problembereiche können im Protokoll angezeigt werden und Fehler anzeigen


  • Es ist möglich, einen gemeinsamen Link mit Token zu verwenden. Jedes Telefon erhält seine eigene Konfiguration, indem es die Mac-Adresse angibt. Oder ein persönlicher Link zum Schlüssel.


  • Die APIs für Verwaltung und Bereitstellung sind auf mehrere Ports verteilt


  • Tests. Für mich war es sehr wichtig, das Format der ausgegebenen Konfiguration zu korrigieren und alle üblichen Situationen der Ausgabe der Konfiguration mit Tests abzudecken. Damit alles klar funktioniert.



Nachteile:


Bisher wurde keine Sonatenverschlüsselung verwendet. Das heißt, Natürlich können Sie https verwenden, indem Sie beispielsweise nginx vor die Sonate setzen. Aber hier sind die proprietären Methoden noch nicht beteiligt. Warum? Das Projekt ist noch jung und hat seine ersten hundert Geräte fast umgeworfen. Und natürlich sammle ich Ideen, Feedback. Um alles sicher zu machen, damit Konfigurationen nicht im Netzwerk abgehört werden können, lohnt es sich wahrscheinlich, sich mit Verschlüsselungsschlüsseln, TLS und einem Igel zu beschäftigen, aber dies wird eine Fortsetzung sein.


Fehlende Benutzeroberfläche. Möglicherweise ist dies ein erhebliches Minus für den Endbenutzer, aber für den Systemadministrator ist das Konsolendienstprogramm wichtiger als eine vollwertige Anwendung. Es gab Pläne, ein Konsolendienstprogramm zu erstellen, aber nicht sicher, ob es benötigt wird?


Was ist das Ergebnis?


Kleiner und einfacher Webserver zur Bereitstellung mehrerer Telefonmodelle mit API für die Verwaltung.


Wie soll das noch einmal funktionieren?


  1. Installieren Sie die Sonate.
  2. Wir bilden json-config und veröffentlichen es in Sonaten.
  3. Dann erhalten wir einen Link von der Sonate zur Bereitstellung.
  4. Dann geben wir diesen Link im Telefon an.
  5. Das Gerät verschärft die Konfiguration

Im nachfolgenden Betrieb gibt es nur zwei Schritte:


  1. Wir bilden eine JSON-Konfiguration und veröffentlichen sie in Sonaten
  2. Das Gerät verschärft die Konfiguration

Welche Art von Telefonen werden hochgeladen?


Anbieter Grandstream, Fanvil, Yealink. Die Konfigurationen innerhalb des Herstellers sind mehr oder weniger gleich, können jedoch je nach Firmware unterschiedlich sein. Möglicherweise müssen zusätzliche Tests durchgeführt werden.


Welche Regeln können festgelegt werden?


Mit der Zeit. Sie können die Zeit angeben, bis zu der die Konfiguration verfügbar sein wird.
Nach Mac-Adresse. Wenn Sie die Konfiguration über den persönlichen Link des Geräts senden, wird auch die Mac-Adresse überprüft.
Von ip. Nach IP-Adresse, von wo aus die Anfrage gestellt wurde.


Wie interagiere ich mit Sonaten?


Über die API http-Anfragen stellen. Die API ist in Ihrer Installation verfügbar. Weil Da die API die Swagger-Spezifikation unterstützt, können Sie das Online-Dienstprogramm für Testanforderungen an die API verwenden.


Ok, großartig. Coole Sache, wie man es versucht?


Am einfachsten ist es, ein Docker-Image basierend auf dem Sonata-Sample- Repository bereitzustellen. Das Repository enthält Installationsanweisungen.


Und wenn ich node.js kenne?


Wenn Sie Erfahrung mit JavaScript haben, werden Sie schnell herausfinden, wie hier alles funktioniert.


Wird sich eine Sonate entwickeln?


Ich habe meine Ziele teilweise erreicht. Die Weiterentwicklung ist eine Frage meiner Aufgaben zum Thema Automatisierung von Telefoneinstellungen. Es besteht weiterhin die Möglichkeit, die Konfigurationen zum Anpassen der Telefontasten zu erweitern, die Adressbuchfunktionen hinzuzufügen, möglicherweise etwas anderes, in die Kommentare zu schreiben.


Zusammenfassung und Bestätigungen


Ich freue mich über konstruktive Vorschläge / Einwände / Kommentare und Fragen, wie es kann durchaus etwas Unverständliches sein.


Ich danke auch allen Kollegen, die geholfen, beraten, getestet, Telefone für Tests bereitgestellt / gespendet haben. Tatsächlich waren viele Leute, mit denen ich bei der Arbeit, in Chatrooms und in E-Mails gesprochen habe, in unterschiedlichem Maße an dem Projekt beteiligt. Danke für die Ideen und Gedanken.

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


All Articles