Sonata – SIP-Bereitstellungsserver

Ich weiß nicht, womit ich die Bereitstellung vergleichen soll. Vielleicht mit einer Katze? Ohne scheint es möglich zu sein, aber damit ist es etwas besser. Vor allem, wenn es funktioniert))

Formulierung des Problems:

  1. Ich möchte SIP-Telefone schnell, einfach und sicher einrichten. Bei der Installation eines Telefons und noch mehr bei der Neukonfiguration.
  2. Viele Anbieter haben ihre eigenen Konfigurationsformate, ihre eigenen Dienstprogramme zum Generieren von Konfigurationen und ihre eigenen Methoden zum Schutz von Konfigurationen. Und ich möchte nicht wirklich mit jedem zu tun haben.
  3. Viele Bereitstellungslösungen sind a) auf einen Anbieter oder ein Telefonsystem ausgerichtet, b) sind recht umständlich zu implementieren, viele Skripte, Parameter, Brrr...

Zu Punkt 3 möchte ich anmerken, dass es hervorragende Bereitstellungssysteme gibt für FreePBX, für FusionPBX, für Kazoo, wo Vorlagen für Telefone verschiedener Anbieter öffentlich verfügbar sind. Es gibt kommerzielle Lösungen, bei denen Sie im Bereitstellungsmodul auch den Betrieb von Telefonen verschiedener Hersteller konfigurieren können, beispielsweise Yeastar PBX.

Habré ist auch voll von Rezepten zum Einrichten von Geräten verschiedener Anbieter: Zeit, два. Aber wie heißt es so schön: Alle Systeme haben einen fatalen Fehler. Also bauen wir unser eigenes Fahrrad.

Ihr eigenes Format

Wie es in xkcd heißt: Wenn Sie sich nicht mit 14 Formaten befassen möchten – Überlegen Sie sich den 15. Daher verwenden wir allgemeine Einstellungen für jedes Telefon und erstellen unser eigenes JSON-Konfigurationsformat.

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

Daher müssen Sie in jedem Telefon die Ortszeit und SIP-Leitungen konfigurieren. Hier ist alles einfach. Weitere Beispiele finden Sie hier hier.

Ihre eigene Serverbereitstellung

In den Handbüchern der Hersteller gibt es normalerweise einen Punkt, an dem es heißt: Nehmen Sie eine CSV-Datei, notieren Sie Ihre Login-Passwort-Mac-Adresse, generieren Sie Dateien mit unserem proprietären Skript, legen Sie sie unter dem Apache-Webserver ab und alles wird gut.

Im nächsten Absatz des Handbuchs erfahren Sie normalerweise, dass Sie die generierte Konfigurationsdatei auch verschlüsseln können.

Aber das sind alles Klassiker. Der moderne Ansatz mit Smoothies und Twitter besagt, dass Sie einen vorgefertigten Webserver erstellen müssen, der nicht so leistungsstark wie Apache ist, aber nur eine kleine Sache erledigt. Generieren und senden Sie Konfigurationen über einen Link.

Lassen Sie uns hier innehalten und bedenken, dass fast alle SIP-Telefone mittlerweile Konfigurationen über http/https empfangen können, sodass wir andere Implementierungen (ftp, tftp, ftps) nicht in Betracht ziehen. Dann kennt jedes Telefon seine eigene MAC-Adresse. Daher werden wir zwei Links erstellen: einen persönlichen – basierend auf dem Geräteschlüssel, den zweiten allgemeinen, der mit einer Kombination aus einem gemeinsamen Token und einer MAC-Adresse funktioniert.

Außerdem werde ich nicht weiter auf Zero-Config eingehen, d. h. Das Telefon von Grund auf einrichten, d. h. Sie haben es an das Netzwerk angeschlossen und es hat funktioniert. Nein, in meinem Szenario schließen Sie es an das Netzwerk an, führen die vorläufige Einrichtung durch (richten Sie es so ein, dass es die Konfiguration vom Bereitstellungsserver empfängt), trinken dann Pina Colada und konfigurieren das Telefon nach Bedarf durch die Bereitstellung neu. Die Verteilung von Option 66 liegt in der Verantwortung des DHCP-Servers.

Übrigens bin ich es völlig leid, „Bereitstellung“ zu sagen, deshalb wurde das Wort zu „Bereitstellung“ abgekürzt, bitte tritt mich nicht.

Und noch etwas: Unser Provisioning-Server hat kein UI, d.h. Benutzeroberfläche. Vielleicht vorerst, aber ich bin mir nicht sicher, weil... Ich brauche es nicht. Aber es gibt eine API zum Speichern/Löschen von Einstellungen, zum Abrufen einer Liste der unterstützten Anbieter und Modelle, alles wird gemäß den Kanons der Swagger-Spezifikation beschrieben.

Warum API und nicht UI? Weil Ich habe bereits eine eigene Telefonanlage, dann habe ich eine Quelle für Zugangsdaten, wo ich nur noch diese Daten nehmen, das nötige JSON kompilieren und auf dem Bereitstellungsserver veröffentlichen muss. Und der Bereitstellungsserver gibt gemäß den in der JSON-Datei angegebenen Regeln dem erforderlichen Gerät seine Konfiguration oder gibt sie nicht weiter, wenn das Gerät nicht korrekt ist oder die ebenfalls in dieser JSON-Datei angegebenen Kriterien nicht erfüllt.

Sonata – SIP-Bereitstellungsserver

So ist der Bereitstellungs-Microservice entstanden. Angerufen SonateDer Quellcode ist auch auf GitHub verfügbar fertiges Docker-Image, Docker-Nutzungsbeispiel hier.

Hauptmerkmale:

  • In jedem Fall ist der Zugriff auf die Konfiguration zeitlich begrenzt, 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 Anpassungen werden in Sonata entfernt, Sie senden standardisiertes JSON, konfigurieren alle verfügbaren Geräte.

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

  • Es ist möglich, einen gemeinsamen Link mit einem Token zu verwenden; jedes Telefon erhält durch Angabe der MAC-Adresse seine eigene Konfiguration. Oder ein persönlicher Link per Schlüssel.

  • APIs für die Verwaltung (Verwaltung) und die Bereitstellung von Konfigurationen für Telefone (Bereitstellung) sind nach Ports unterteilt

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

Nachteile:

Bisher kommt in Sonata keinerlei Verschlüsselung zum Einsatz. Diese. Sie können natürlich mit der Verwendung von https beginnen, indem Sie beispielsweise nginx vor sonata setzen. Doch proprietäre Methoden kommen noch nicht zum Einsatz. Warum? Das Projekt ist noch jung, es hat seine ersten hundert Geräte auf den Markt gebracht. Und natürlich sammle ich Ideen und Feedback. Um alles sicher zu machen, damit die Konfigurationen nicht im Netzwerk ausspioniert werden können, lohnt es sich wahrscheinlich, sich mit Verschlüsselungsschlüsseln, TLS und dem dazugehörigen Hedgehog herumzuschlagen, aber das wird eine Fortsetzung sein.

Fehlende Benutzeroberfläche. Vielleicht ist dies ein erheblicher Nachteil für den Endbenutzer, aber für einen Systemadministrator ist ein Konsolendienstprogramm wichtiger als eine vollwertige Anwendung. Es gab Pläne, ein Konsolen-Dienstprogramm zu erstellen, aber ich bin mir nicht sicher, ob es nötig ist?

Das Ergebnis?

Ein kleiner und einfacher Webserver zur Bereitstellung mehrerer Telefonmodelle mit einer API zur Verwaltung.

Noch einmal: Wie soll das funktionieren?

  1. Sonate installieren.
  2. Wir erstellen eine JSON-Konfiguration und veröffentlichen sie in Sonata.
  3. Anschließend erhalten wir von sonata einen Bereitstellungslink.
  4. Dann geben wir diesen Link im Telefon an.
  5. Das Gerät lädt die Konfiguration

Im weiteren Betrieb gibt es nur noch zwei Schritte:

  1. Wir erstellen eine JSON-Konfiguration und veröffentlichen sie in Sonata
  2. Das Gerät lädt die Konfiguration

Welche Telefone werden beworben?

Anbieter Grandstream, Fanvil, Yealink. Die Konfigurationen innerhalb des Herstellers sind mehr oder weniger gleich, können jedoch je nach Firmware unterschiedlich sein – es kann sein, dass zusätzliche Tests erforderlich sind.

Welche Regeln können Sie festlegen?

Zum Zeitpunkt. Sie können die Zeit angeben, bis zu der die Konfiguration verfügbar sein wird.
Nach Mac-Adresse. Beim Absenden der Konfiguration über den persönlichen Link des Geräts wird auch die Mac-Adresse überprüft.
Per IP. Nach IP-Adresse, von der aus die Anfrage gestellt wurde.

Wie interagiere ich mit Sonata?

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

Okay, großartig. Cooles Zeug, wie wäre es, wenn du es mal ausprobierst?

Der einfachste Weg besteht darin, ein Docker-Image basierend auf einem Repository bereitzustellen Sonatenprobe. Das Repository enthält Installationsanweisungen.

Was ist, wenn ich node.js kenne?

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

Wird es eine Sonatenentwicklung geben?

Ich habe meine Ziele teilweise erreicht. Die Weiterentwicklung ist eine meiner Aufgaben zum Thema Automatisierung der Telefoneinrichtung. Es besteht auch die Möglichkeit, die Konfigurationen zu erweitern, um Telefontasten zu konfigurieren, die Adressbuchbereitstellung hinzuzufügen und vielleicht noch etwas anderes, schreiben Sie in die Kommentare.

Zusammenfassung und Danksagungen

Über konstruktive Anregungen/Einwände/Kommentare und Fragen freue ich mich, denn... Es kann durchaus sein, dass er etwas Unverständliches beschrieben hat.

Ich bedanke mich auch bei allen meinen Kollegen, die geholfen, beraten, getestet und Telefone für Tests bereitgestellt/gespendet haben. Tatsächlich sind viele Menschen, mit denen ich bei der Arbeit kommuniziert habe, in unterschiedlichem Maße in das Projekt involviert. AsterConf'e, in Chats und E-Mails. Danke für die Ideen und Gedanken.

Source: habr.com

Kommentar hinzufügen