Sonata - serwer obsługi protokołu SIP

Nie wiem z czym porównać dostarczanie. Może z kotem? Bez niego wydaje się to możliwe, ale z nim jest trochę lepiej. Zwłaszcza jeśli to działa))

Sformułowanie problemu:

  1. Chcę szybko, łatwo i bezpiecznie skonfigurować telefony SIP. Podczas instalacji telefonu, a tym bardziej podczas jego rekonfiguracji.
  2. Wielu dostawców ma własne formaty konfiguracji, własne narzędzia do generowania konfiguracji i własne sposoby ochrony konfiguracji. I naprawdę nie chcę mieć do czynienia ze wszystkimi.
  3. Wiele rozwiązań dostarczających, a) koncentruje się na jednym dostawcy lub jednym systemie telefonicznym, b) jest dość uciążliwych w implementacji, dużo skryptów, parametrów, brrr...

Jeśli chodzi o punkt 3, poczynię komentarz, że istnieją doskonałe systemy zaopatrzenia dla FreePBX, dla FusionPBX, dla Kazoo, gdzie szablony dla telefonów różnych dostawców są publicznie dostępne. Istnieją rozwiązania komercyjne, gdzie w module udostępniania można skonfigurować także działanie telefonów różnych producentów, np. Yeastar PBX.

Habré jest również pełen przepisów na konfigurowanie urządzeń różnych dostawców: czas, два. Ale jak mówią, wszystkie systemy mają fatalną wadę. Więc zrobimy własny rower.

swój własny format

Jak mówią w xkcd, jeśli nie chcesz zajmować się 14 formatami - wymyśl 15. Dlatego używamy ogólnych ustawień dla dowolnego telefonu i tworzymy własny format konfiguracji json.

Coś takiego:

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

Tak więc w każdym telefonie musisz skonfigurować czas lokalny i linie SIP. Tutaj wszystko jest proste. Możesz zobaczyć więcej przykładów tutaj.

własne udostępnianie serwerów

W instrukcjach producentów jest zwykle miejsce, w którym jest napisane: weź plik CSV, zapisz swoje hasło-login-adres-mac, wygeneruj pliki przy użyciu naszego autorskiego skryptu, umieść je pod serwerem WWW Apache i wszystko będzie dobrze.

Następny akapit instrukcji zwykle mówi, że możesz także zaszyfrować wygenerowany plik konfiguracyjny.

Ale to wszystko są klasyki. Nowoczesne podejście do smoothies i Twittera mówi, że trzeba stworzyć gotowy serwer WWW, który nie będzie tak potężny jak Apache, ale zrobi tylko jedną małą rzecz. Generuj i wysyłaj konfiguracje za pomocą łącza.

Zatrzymajmy się tutaj i pamiętajmy, że prawie wszystkie telefony SIP mogą teraz odbierać konfiguracje przez http/https, więc nie rozważamy innych implementacji (ftp, tftp, ftps). Wtedy każdy telefon zna swój własny adres MAC. Dlatego zrobimy dwa linki: jedno osobiste - oparte na kluczu urządzenia, drugie ogólne, które działa przy użyciu kombinacji wspólnego tokena i adresu MAC.

Nie będę też rozwodzić się nad zerową konfiguracją, tj. skonfigurowanie telefonu od podstaw, tj. podłączyłeś go do sieci i zaczął działać. Nie, w moim scenariuszu podłączasz go do sieci, przeprowadzasz wstępną konfigurację (skonfigurujesz go tak, aby otrzymał konfigurację z serwera obsługi administracyjnej), a następnie pijesz pina colada i ponownie konfigurujesz telefon zgodnie z potrzebami poprzez obsługę administracyjną. Za dystrybucję opcji 66 odpowiada serwer DHCP.

Swoją drogą, jestem już całkowicie zmęczony mówieniem „zaopatrzenie”, więc słowo zostało skrócone do „zaopatrzenie”, proszę mnie nie kopać.

I jeszcze jedno: nasz serwer zaopatrzeniowy nie posiada interfejsu użytkownika, tj. interfejs użytkownika. Być może na razie, ale nie jestem pewien, ponieważ... Nie potrzebuję tego. Ale istnieje API do zapisywania/usuwania ustawień, uzyskiwania listy obsługiwanych dostawców, modeli, wszystko jest opisane zgodnie z kanonami specyfikacji swagger.

Dlaczego API, a nie interfejs użytkownika? Ponieważ Mam już własny system telefoniczny, potem mam źródło poświadczeń, skąd muszę tylko pobrać te dane, skompilować niezbędny json i opublikować go na serwerze udostępniającym. A serwer udostępniający, zgodnie z zasadami określonymi w pliku json, przekaże wymaganemu urządzeniu swoją konfigurację lub nie poda jej, jeśli urządzenie jest niepoprawne lub nie spełnia kryteriów określonych również w tym jsonie.

Sonata - serwer obsługi protokołu SIP

Tak powstała mikrousługa aprowizacyjna. Zwany sonata, kod źródłowy jest dostępny na GitHubie, jest tam również gotowy obraz okna dokowanego, przykład użycia dokera tutaj.

Kluczowe cechy:

  • w każdym razie ograniczony czasowo dostęp do konfiguracji, domyślnie 10 minut. Jeśli chcesz ponownie udostępnić konfigurację, opublikuj ją ponownie.

  • jeden format dla wszystkich dostawców, wszystkie korekty są usuwane w sonacie, wysyłasz standardowy json, konfigurujesz dowolny dostępny sprzęt.

  • wszystkie konfiguracje wprowadzone do urządzeń są rejestrowane, w dzienniku można przeglądać wszystkie obszary problematyczne i błędy

  • Możliwe jest wykorzystanie jednego wspólnego linku z tokenem, każdy telefon otrzymuje własną konfigurację poprzez podanie adresu mac. Lub osobisty link za pomocą klucza.

  • Interfejsy API do zarządzania (zarządzania) i dostarczania konfiguracji do telefonów (provisioning) są podzielone według portów

  • Testy. Bardzo ważne było dla mnie naprawienie formatu wydawanego configu i uwzględnienie wszystkich typowych sytuacji wydawania configu za pomocą testów. Żeby to wszystko działało przejrzyście.

Wady:

Jak dotąd szyfrowanie nie jest w żaden sposób stosowane w Sonata. Te. możesz oczywiście zacząć używać https, na przykład umieszczając nginx przed sonatą. Ale zastrzeżone metody nie zostały jeszcze zastosowane. Dlaczego? Projekt jest jeszcze młody, wypuścił na rynek pierwszą setkę urządzeń. I oczywiście zbieram pomysły i opinie. Co więcej, aby wszystko było bezpieczne, aby konfiguracje nie mogły zostać wąchane w sieci, prawdopodobnie warto zawracać sobie głowę kluczami szyfrującymi, tls i jeżem, ale to będzie kontynuacja.

Brak interfejsu użytkownika. Być może jest to znacząca wada dla użytkownika końcowego, ale dla administratora systemu narzędzie konsolowe jest ważniejsze niż pełnoprawna aplikacja. Były plany stworzenia narzędzia konsolowego, ale nie jestem pewien, czy jest ono potrzebne?

Wynik?

Mały i prosty serwer WWW do udostępniania kilku modeli telefonów z interfejsem API do zarządzania.

Jeszcze raz, jak to ma działać?

  1. Instalacja Sonaty.
  2. Tworzymy konfigurację json i publikujemy ją w sonata.
  3. Następnie otrzymujemy link do zaopatrzenia od Sonaty.
  4. Następnie wskazujemy ten link w telefonie.
  5. Urządzenie ładuje konfigurację

W dalszej operacji są tylko dwa kroki:

  1. Tworzymy konfigurację json i publikujemy ją w sonata
  2. Urządzenie ładuje konfigurację

Które telefony będą promowane?

Sprzedawcy: Grandstream, Fanvil, Yealink. Konfiguracje u dostawcy są mniej więcej takie same, ale mogą się różnić w zależności od oprogramowania sprzętowego - może być konieczne dodatkowe przetestowanie.

Jakie zasady możesz ustalić?

Z czasem. Możesz określić czas, do którego konfiguracja będzie dostępna.
Według adresu MAC. Podczas przesyłania konfiguracji za pośrednictwem osobistego łącza urządzenia sprawdzany będzie również adres MAC.
Przez ip. Według adresu IP, z którego wysłano żądanie.

Jak wchodzić w interakcję z sonatą?

Poprzez API, tworzenie żądań http. Interfejs API będzie dostępny w Twojej instalacji. Ponieważ Interfejs API obsługuje specyfikację swagger, której możesz użyć narzędzie internetowe dla żądań testowych do API.

Ok świetnie. Świetna rzecz, może spróbujesz?

Najprostszym sposobem jest wdrożenie obrazu okna dokowanego w oparciu o repozytorium próbka sonaty. Repozytorium zawiera instrukcje instalacji.

A co jeśli znam node.js?

Jeśli masz doświadczenie w korzystaniu z JavaScript, szybko zrozumiesz, jak tutaj wszystko działa.

Czy będzie rozwój Sonaty?

Częściowo osiągnąłem swoje cele. Dalszy rozwój to kwestia moich zadań w temacie automatyzacji konfiguracji telefonu. Istnieje również możliwość rozszerzenia konfiguracji o konfigurację przycisków telefonu, dodanie obsługi książki adresowej, a może coś innego, napisz w komentarzach.

Podsumowanie i podziękowania

Będę wdzięczny za konstruktywne sugestie/sprzeciwy/komentarze i pytania, ponieważ... Być może opisał coś niezrozumiałego.

Wyrażam także wdzięczność wszystkim moim kolegom, którzy pomagali, doradzali, testowali i dostarczali/przekazali telefony do testów. W rzeczywistości wiele osób, z którymi komunikowałem się w pracy, jest zaangażowanych w projekt w różnym stopniu, AsterConfe, na czatach i w e-mailach. Dziękuję za pomysły i przemyślenia.

Źródło: www.habr.com

Dodaj komentarz