Sonata — server pro provisioning SIP

Nevím, s čím porovnat provisioning. Možná s kočkou? Vypadá to, že se bez ní dá obejít, ale je s ní trochu lépe. Zvlášť, když funguje ))

Vymezení problému:

  1. Chci rychle, jednoduše a bezpečně nastavovat SIP telefony. Při instalaci telefonu, a tím spíše při jeho rekonfiguraci.
  2. Mnoho dodavatelů má své formáty konfigurací, své nástroje na generování konfigurací a své způsoby ochrany konfigurací. A nechce se mi s každým rozebírat.
  3. Mnohá řešení pro provisioning, a) jsou orientována na jednoho dodavatele nebo jeden telefonní systém, b) poměrně složitě se implementují, spousta skriptů, parametrů, brr…

K bodu 3 uvádím poznámku, že existují skvělé provisioning systémy pro FreePBX, pro FusionPBX, pro Kazoo, kde jsou veřejně k dispozici šablony pro telefony různých dodavatelů. Existují komerční řešení, kde lze také v modulu provisioning nastavit práci telefonů různých výrobců, například PBX Yeastar.

Na Habr také existuje spousta receptů, jak nastavit zařízení různých dodavatelů: jedna, dva. Ale jak se říká, každému systému dojde fatální nedostatek. Takže si uděláme vlastní kolo.

vlastní formát

Jak říká xkcd, nechceš se babrat se 14 formáty — vymysli 15.. Takže použijeme společná nastavení pro jakýkoli telefon a vytvoříme vlastní json formát konfigurace.

Zhruba takto:

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

Takže, v jakémkoli telefonu je nutné nastavit místní čas a SIP linky. Tady je to jednoduché. Další příklady lze vidět zde.

svůj provisioning server

V manuálech výrobce bývá obvykle sekce, která říká: vezměte csv, napište tam přihlašovací údaje-mac-adresu, naším speciálním skriptem vygenerujte soubory, dejte je na webový server Apache a bude to v pořádku.

V následující části manuálu se obvykle říká, že je možné také zašifrovat vygenerovaný konfigurační soubor.

Ale to je všechno klasika. Moderní přístup se smoothie a Twitterem říká, že je třeba vytvořit jednoduchý webový server, který nebude tak výkonný jako Apache, ale bude dělat jen jednu malou věc. Tvořit a poskytovat konfigurace na základě odkazu.

Zastavme se zde a připomeňme, že téměř všechny SIP telefony nyní mohou získat konfigurace přes http/https, takže jiné implementace (ftp, tftp, ftps) nebudeme zohledňovat. Každý telefon zná svou MAC adresu. Proto vytvoříme dva odkazy: jeden osobní — podle klíče zařízení, druhý obecný, který funguje na základě kombinace obecného tokenu a MAC adresy.

Také se nebudu zastavovat u zero-configu, tedy nastavení telefonu „od nuly“, tedy zastrčíte ho do sítě a on hop, fungoval. Ne, v mém scénáři, zastrčíte ho do sítě, provedete předběžné nastavení (nastavíte ho, aby získal konfiguraci ze serveru provisioningu), a pak pijete piňacoladu a přenastavujete telefon, jak je třeba přes provisioning. Rozdávat Option 66 — to je starost DHCP serveru.

Mimochodem, jsem už celkem unavený říkat „provisioning“, takže slovo se zkrátilo na „provision“, prosím, nekopněte mě do toho.

A ještě: náš provisioning server nemá UI, tedy uživatelské rozhraní. Možná, ale nejsem si jistý, protože to nepotřebuji. Zato existuje API pro ukládání/mazání nastavení, získání seznamu podporovaných dodavatelů, modelů, všechno popsáno podle standardů swagger specifikace.

Proč API, a ne UI? Protože už mám svůj telefonní systém, mám zdroj přihlašovacích údajů, kde mi stačí vzít tyto údaje, složit potřebný json a publikovat na provisioning serveru. A server provisioningu podle pravidel uvedených v json souboru dodá potřebnému zařízení jeho konfiguraci, nebo ji nedodá, pokud zařízení není to pravé, nebo neodpovídá kritériím uvedeným také v tomto jsonu.

Sonata — server pro provisioning SIP

Takhle vznikl tento microservice provisioning. Jmenuje se sonata, zdrojový kód je dostupný na GitHubu, také je k dispozici hotový docker image, příklad použití dockeru zde.

Klíčové funkce:

  • v každém případě omezený přístup k konfiguraci na dobu, výchozí nastavení 10 minut. Pokud chcete znovu zpřístupnit konfiguraci, znovu ji publikujte.

  • jediný formát pro všechny dodavatele, veškeré přizpůsobení je uloženo v sonata, posíláte standardizovaný json, nastavujete jakékoli dostupné zařízení.

  • Všechny vydané konfigurace zařízení jsou zaznamenávány, všechny problematické oblasti lze zkontrolovat v logu a vidět chyby.

  • Je možné použít jeden společný odkaz s tokenem, každý telefon dostane svou konfiguraci uvedením MAC adresy. Nebo osobní odkaz podle klíče.

  • API pro správu a vydávání konfigurací telefonům je rozděleno podle portů.

  • Testy. Pro mě bylo velmi důležité zafixovat formát vydávané konfigurace a pokrýt všechny běžné situace vydání konfigurace testy. Aby to všechno fungovalo přesně.

Nevýhody:

Zatím se v rámci sonata nepoužívá šifrování. Tedy, samozřejmě, můžete začít používat https, například pomocí nginx před sonata. Ale firemní metody zatím nebyly zapojeny. Proč? Projekt je ještě mladý, provedl svoje sotva první stovky zařízení. A samozřejmě sbírám nápady a zpětnou vazbu. Aby to bylo bezpečné, aby konfigurace nebyly zachyceny v síti, pravděpodobně je třeba zaměřit se na šifrovací klíče, tls a podobně, ale to bude pokračování.

Nedostatek UI. Možná, že je to zásadní nevýhoda pro koncového uživatele, ale pro systémového administrátora je spíše důležitá konzolová utilita než plnohodnotná aplikace. Vytvoření konzolové utility bylo v plánech, ale nejsem si jistý, zda je potřeba?

Jaký je výsledek?

Malý a jednoduchý webový server pro provision několika modelů telefonů s API pro správu.

Ještě jednou, jak to má fungovat?

  1. Instalujeme sonata.
  2. Vytvoříme json konfiguraci a publikujeme ji v sonata.
  3. Poté získáme od sonata odkaz pro provision.
  4. Tento odkaz poté uvedeme v telefonním přístroji.
  5. Přístroj načte konfiguraci.

V následném provozu pouze dva kroky:

  1. Vytvoříme json konfiguraci a publikujeme ji v sonata.
  2. Přístroj načte konfiguraci.

Jaké telefony jsou provisionovány?

Dodavatelé Grandstream, Fanvil, Yealink. Konfigurace v rámci dodavatele jsou více-méně shodné, ale mohou se lišit v závislosti na firmwaru – možná bude potřeba další testování.

Jaká pravidla lze nastavit?

Podle času. Můžete stanovit čas, do kdy bude konfigurace dostupná.
Podle MAC adresy. Při vydání konfigurace pomocí osobního odkazu bude také zkontrolována MAC adresa zařízení.
Podle IP. Podle IP adresy, odkud byla žádost odeslána.

Jak komunikovat se sonata?

Přes API, zasíláním http požadavků. API bude k dispozici ve vaší instalaci. Protože API podporuje specifikaci swagger, můžete využít online nástroj pro testovací požadavky na API.

Dobře, skvělé. Jak to vyzkoušet?

Nejjednodušší je spustit dockerový obraz založený na repozitáři sonata-sample. V repozitáři je instrukce k instalaci.

А если знаю node.js?

Pokud máte zkušenosti s JavaScriptem, rychle pochopíte, jak to tady funguje.

Bude se sonata vyvíjet?

Částečně jsem dosáhl svých cílů. Další vývoj je otázka mých úkolů v oblasti automatizace nastavení telefonů. Je také možnost rozšířit konfigurace pro nastavení tlačítek telefonů, přidat provisioning adresářů, možná ještě něco dalšího, napište do komentářů.

Shrnutí a poděkování

Budu rád za konstruktivní návrhy/námitky/komentáře a otázky, protože to může být něco, co jsem popsal nejasně.

Také děkuji všem kolegům, kdo mi pomáhali, radili, testovali a poskytli/darovali telefony pro testy. Opravu, k projektu se v různém měřítku připojilo mnoho lidí, s nimiž jsem mluvil v práci, na AsterConfv chatech a emailech. Děkuji za nápady a myšlenky.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster