Sonata - server pro poskytování SIP

Nevím s čím porovnat provize. Třeba s kočkou? Zdá se to možné i bez něj, ale s ním je to o něco lepší. Hlavně když to funguje))

Formulace problému:

  1. Chci nastavit SIP telefony rychle, snadno a bezpečně. Při instalaci telefonu a ještě více při jeho rekonfiguraci.
  2. Mnoho dodavatelů má své vlastní konfigurační formáty, vlastní nástroje pro generování konfigurací a své vlastní způsoby ochrany konfigurací. A opravdu nechci řešit všechny.
  3. Mnoho zřizovacích řešení, a) je zaměřeno na jednoho dodavatele nebo jeden telefonní systém, b) je poměrně těžkopádné na implementaci, spousta skriptů, parametrů, brrr...

Pokud jde o bod 3, uvedu poznámku, že existují vynikající systémy zřizování pro FreePBX, pro FusionPBX, pro Kazoo, kde jsou veřejně dostupné šablony pro telefony od různých výrobců. Existují komerční řešení, kde lze v modulu zřizování konfigurovat i provoz telefonů různých výrobců, například Yeastar PBX.

Habré je také plné receptů, jak nastavit zařízení od různých výrobců: čas, два. Ale jak se říká, všechny systémy mají fatální chybu. Takže si vyrobíme vlastní kolo.

svůj vlastní formát

Jak se říká v xkcd, pokud se nechcete zabývat 14 formáty - přijít s 15. Proto používáme obecná nastavení pro jakýkoli telefon a vytváříme vlastní konfigurační formát json.

Něco takového:

{
   "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že v každém telefonu musíte nakonfigurovat místní čas a linky SIP. Všechno je zde jednoduché. Můžete vidět více příkladů zde.

poskytování vlastního serveru

V manuálech výrobců je obvykle bod, kde se říká: vezměte csv, zapište si přihlašovací-heslo-mac-adresu, vygenerujte soubory pomocí našeho proprietárního skriptu, vložte je pod webový server Apache a vše bude v pořádku.

Následující odstavec manuálu vám obvykle říká, že vygenerovaný konfigurační soubor můžete také zašifrovat.

Ale to jsou všechno klasiky. Moderní přístup se smoothies a Twitterem říká, že je potřeba udělat hotový webový server, který nebude tak výkonný jako Apache, ale udělá jen jednu maličkost. Vygenerujte a odešlete konfigurace pomocí odkazu.

Zde se zastavme a připomeňme si, že téměř všechny SIP telefony nyní mohou přijímat konfigurace přes http/https, takže neuvažujeme o jiných implementacích (ftp, tftp, ftps). Každý telefon pak zná svou vlastní MAC adresu. Uděláme proto dva odkazy: jeden osobní – na základě klíče zařízení, druhý obecný, který funguje pomocí kombinace společného tokenu a MAC adresy.

Také se nebudu zdržovat zero-config, tzn. nastavení telefonu od nuly, tzn. připojil jsi to k síti a začalo to fungovat. Ne, v mém scénáři jej zapojíte do sítě, provedete předběžné nastavení (nastavíte jej tak, aby přijímal konfiguraci z prováděcího serveru), a pak vypijete pina colada a překonfigurujete telefon podle potřeby prostřednictvím zřizování. Za distribuci volby 66 odpovídá server DHCP.

Mimochodem, už mě úplně nebaví říkat „provisioning“, takže slovo bylo zkráceno na „provisioning“, prosím, nekopejte mě.

A ještě jedna věc: náš zajišťovací server nemá uživatelské rozhraní, tzn. uživatelské rozhraní. Zatím možná, ale nejsem si jistý, protože... Nepotřebuji to. Ale existuje API pro ukládání/mazání nastavení, získání seznamu podporovaných prodejců, modelů, vše je popsáno podle kánonů specifikace swagger.

Proč API a ne UI? Protože Už mám svůj vlastní telefonní systém, pak mám zdroj přihlašovacích údajů, kam stačí vzít tato data, zkompilovat potřebné json a publikovat je na zajišťovacím serveru. A zřizovací server podle pravidel specifikovaných v souboru json poskytne požadovanému zařízení jeho konfiguraci nebo ji neposkytne, pokud zařízení není správné nebo nesplňuje kritéria specifikovaná také v tomto json.

Sonata - server pro poskytování SIP

Takto dopadla provizorní mikroslužba. Volal sonáta, zdrojový kód je dostupný na GitHubu, tam je také připravený obrázek dockeru, příklad použití dockeru zde.

Klíčové vlastnosti:

  • v každém případě omezený přístup ke konfiguraci časem, standardně 10 minut. Pokud chcete konfiguraci znovu zpřístupnit, znovu konfiguraci znovu publikujte.

  • jeden formát pro všechny dodavatele, všechny úpravy jsou odstraněny v sonátě, posíláte standardizovaný json, konfigurujete jakékoli dostupné vybavení.

  • všechny konfigurace vydané pro zařízení jsou protokolovány, všechny problémové oblasti lze zobrazit v protokolu a lze vidět chyby

  • Je možné použít jeden společný odkaz s tokenem, každý telefon obdrží svou vlastní konfiguraci zadáním mac adresy. Nebo osobní odkaz přes klíč.

  • API pro správu (správu) a poskytování konfigurací do telefonů (provisioning) jsou rozdělena podle portů

  • Testy. Bylo pro mě velmi důležité opravit formát vydávané konfigurace a pokrýt všechny obvyklé situace vydávání konfigurace pomocí testů. Aby to všechno fungovalo jasně.

nevýhody:

V rámci Sonaty se zatím šifrování nijak nepoužívá. Tito. můžete samozřejmě začít používat https tak, že dáte nginx například před sonátu. Ale proprietární metody ještě nebyly použity. Proč? Projekt je stále mladý, uvedl na trh prvních sto zařízení. A samozřejmě sbírám nápady a zpětnou vazbu. Dále, aby bylo vše bezpečné, aby se konfigurace nedaly čichat na síti, asi se vyplatí potrápit se s šifrovacími klíči, tls a hedgehog s nimi, ale to bude na pokračování.

Nedostatek uživatelského rozhraní. Možná je to značná nevýhoda pro koncového uživatele, ale pro správce systému je konzolová utilita důležitější než plnohodnotná aplikace. Byly plány na vytvoření konzolového nástroje, ale nejsem si jistý, zda je potřeba?

Výsledek?

Malý a jednoduchý webový server pro poskytování několika modelů telefonů s rozhraním API pro správu.

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

  1. Instalace sonáty.
  2. Vytvoříme konfiguraci json a publikujeme ji v sonátě.
  3. Poté obdržíme odkaz na poskytování ze sonáty.
  4. Poté tento odkaz uvedeme v telefonu.
  5. Zařízení načítá konfiguraci

V následné operaci jsou pouze dva kroky:

  1. Vytvoříme konfiguraci json a publikujeme ji v sonátě
  2. Zařízení načítá konfiguraci

Které telefony budou propagovány?

Prodejci Grandstream, Fanvil, Yealink. Konfigurace v rámci dodavatele jsou víceméně stejné, ale mohou se lišit v závislosti na firmwaru - může být nutné provést dodatečné testování.

Jaká pravidla můžete nastavit?

Časem. Můžete určit dobu, do které bude konfigurace dostupná.
Podle mac adresy. Při odesílání konfigurace prostřednictvím osobního odkazu zařízení bude také zkontrolována mac adresa.
Podle IP. Podle IP adresy, ze které byl požadavek podán.

Jak komunikovat se Sonatou?

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

OK skvěle. Skvělé věci, co takhle to zkusit?

Nejjednodušší způsob je nasadit image dockeru na základě úložiště sonáta-ukázka. Úložiště obsahuje pokyny k instalaci.

Co když znám node.js?

Pokud máte zkušenosti s používáním JavaScriptu, pak rychle zjistíte, jak zde vše funguje.

Bude vývoj Sonata?

Cíle jsem částečně splnil. Další vývoj je věcí mých úkolů na téma automatizace nastavení telefonu. Je zde také možnost rozšířit konfigurace o konfiguraci tlačítek telefonu, přidat zřizování adresáře, možná něco jiného, ​​napište do komentářů.

Shrnutí a poděkování

Budu rád za konstruktivní návrhy/námitky/připomínky a dotazy, protože... Klidně se může stát, že něco popsal nesrozumitelně.

Děkuji také všem svým kolegům, kteří pomohli, poradili, testovali a poskytli/darovali telefony na testy. Ve skutečnosti je do projektu v různé míře zapojeno mnoho lidí, se kterými jsem v práci komunikoval, AsterConf'e, v chatech a e-mailech. Díky za nápady a myšlenky.

Zdroj: www.habr.com

Přidat komentář