Sonata - server na poskytovanie SIP

Neviem s čím porovnať dotácie. Možno s mačkou? Zdá sa, že bez neho je to možné, ale s ním je to o niečo lepšie. Najmä ak to funguje

Formulácia problému:

  1. Chcem nastaviť SIP telefóny rýchlo, jednoducho a bezpečne. Pri inštalácii telefónu a ešte viac pri jeho rekonfigurácii.
  2. Mnoho predajcov má svoje vlastné konfiguračné formáty, svoje vlastné nástroje na generovanie konfigurácií, svoje vlastné spôsoby ochrany konfigurácií. A nechcem to riešiť s každým.
  3. Mnohé zriaďovacie riešenia sú a) zamerané na jedného predajcu alebo jeden telefónny systém, b) dosť ťažkopádne na implementáciu, množstvo skriptov, parametrov, br-r...

K bodu 3 pripomeniem, že existujú vynikajúce systémy poskytovania prostriedkov pre FreePBX, pre FusionPBX, pre Kazoo, kde sú vo verejnej doméne šablóny pre telefóny rôznych predajcov. Existujú komerčné riešenia, kde môžete v module poskytovania nakonfigurovať aj prácu telefónov od rôznych výrobcov, napríklad Yeastar PBX.

Habré je tiež plné receptov na nastavenie zariadení od rôznych predajcov: čas, два. Ale ako sa hovorí, všetky systémy majú fatálnu chybu. Poďme si teda vyrobiť bicykel.

vlastný formát

Ako hovorí xkcd, ak sa nechcete zaoberať 14 formátmi - prísť s 15. Preto používame všeobecné nastavenia pre akýkoľvek telefón a vytvárame si vlastný konfiguračný formát json.

Asi takto:

{
   "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ždom telefóne musíte nastaviť miestny čas, sip-linky. Všetko je tu jednoduché. Je možné vidieť viac príkladov tu.

váš server je poskytnutý

Manuály od výrobcov majú väčšinou odsek, ktorý hovorí: zober csv, zapíš si tam prihlasovacie heslo-mac-adresu, vygeneruj súbory naším proprietárnym skriptom, daj ich pod webový server Apache a bude to v poriadku.

Ďalší odsek príručky vám zvyčajne povie, čo ešte môžete urobiť a zašifrovať vygenerovaný konfiguračný súbor.

Ale to všetko je klasické. Moderným smoothie a twitterovým prístupom je vytvoriť hotový webový server, ktorý nie je taký výkonný ako Apache a robí len jednu maličkosť. Generujte a odosielajte konfigurácie podľa referencie.

Zastavme sa tu a pripomeňme si, že takmer všetky telefóny SIP môžu teraz získať konfiguráciu cez http/https, takže neuvažujeme o iných implementáciách (ftp, tftp, ftps). Potom každý telefón pozná svoju vlastnú MAC adresu. Preto urobíme dva odkazy: jeden je osobný - podľa kľúča zariadenia, druhý je všeobecný, ktorý funguje na základe prepojenia spoločného tokenu a adresy maku.

Taktiež sa nebudem pozastavovať nad zero-config, t.j. nastavenie telefónu od začiatku, t.j. zapojil si ho do siete a on zarobil. Nie, v mojom scenári ste ho pripojili k sieti, urobili predbežnú konfiguráciu (nakonfigurovali ste ho tak, aby prijímal konfiguráciu zo servera poskytovania) a potom ste vypili pinocolade a prekonfigurovali telefón tak, ako by mal prostredníctvom poskytovania. Rozdávanie možnosti 66 závisí od servera DHCP.

Mimochodom, už ma úplne nebaví hovoriť „poskytovanie“, takže slovo bolo zredukované na „poskytovanie“, prosím, nekopajte nohami.

A ešte niečo: náš proxy server nemá UI, t.j. používateľské rozhranie. Ešte možno, ale nie som si istý, pretože. ja nepotrebujem. Existuje však API na ukladanie / mazanie nastavení, získanie zoznamu podporovaných predajcov, modelov, všetko je popísané podľa kánonov špecifikácie swagger.

Prečo API a nie používateľské rozhranie? Pretože Už mám svoj vlastný telefónny systém, potom mám zdroj poverení, kde stačí vziať tieto údaje, zostaviť potrebný súbor json a zverejniť ho na serveri poskytovania. A server je už provizórny, podľa pravidiel špecifikovaných v súbore json vydá svoju konfiguráciu požadovanému zariadeniu alebo ju nevydá, ak zariadenie nie je správne alebo nespĺňa kritériá špecifikované aj v tomto súbore json.

Sonata - server na poskytovanie SIP

Tu sa ukázalo takéto poskytovanie mikroslužieb. volal sonáta, zdrojový kód je dostupný na githube, je tam tiež hotový obrázok dockera, príklad použitia docker tu.

Kľúčové vlastnosti:

  • v každom prípade obmedzený prístup ku konfigurácii časom, štandardne 10 minút. Ak chcete konfiguráciu znova sprístupniť, znova ju znova publikujte.

  • jeden formát pre všetkých predajcov, všetky prispôsobenia sa odstránia v sonáte, odošlete štandardizovaný súbor json, nakonfigurujete akékoľvek dostupné vybavenie.

  • všetky vydané konfigurácie pre zariadenia sú zaprotokolované, všetky problémové oblasti je možné zobraziť v protokole a zobraziť chyby

  • je možné použiť jeden spoločný odkaz s tokenom, každý telefón dostane svoju vlastnú konfiguráciu zadaním mac-adresy. Alebo osobný odkaz kľúčom.

  • API pre správu (správu) a vydávanie konfigurácií do telefónov (provisioning) sú rozdelené podľa portov

  • Testy. Pre mňa bolo veľmi dôležité opraviť formát vydanej konfigurácie a pokryť všetky bežné situácie vydávania konfigurácie testami. Aby to všetko fungovalo.

Nevýhody:

Doteraz sa v rámci sonáty nepoužíva žiadne šifrovanie. Tie. môžete samozrejme začať používať https tak, že napríklad vložíte nginx pred sonátu. Ale značkové metódy ešte nie sú zahrnuté. prečo? Projekt je stále mladý, práve spustil svoju prvú stovku zariadení. A, samozrejme, zbieram nápady a spätnú väzbu. Ďalej, aby bolo všetko v bezpečí, aby sa konfigurácie nedali preniknúť do siete, pravdepodobne stojí za to zmiasť sa v šifrovacích kľúčoch, tls a ich ježkoch, ale to bude pokračovať.

Nedostatok používateľského rozhrania. Možno je to značná nevýhoda pre koncového používateľa, ale pre správcu systému je konzolová utilita dôležitejšia ako plnohodnotná aplikácia. Boli plány na vytvorenie konzolového nástroja, ale nie som si istý, či je to potrebné?

Výsledok?

Malý a jednoduchý webový server na poskytovanie niekoľkých modelov telefónov s rozhraním API na správu.

Ešte raz, ako to má fungovať?

  1. Nainštalujte sonátu.
  2. Vytvoríme konfiguráciu json a zverejníme ju do sonáty.
  3. Potom dostaneme odkaz na poskytnutie zo sonáty.
  4. Potom tento odkaz uvedieme v telefónnom prístroji.
  5. Zariadenie sprísňuje konfiguráciu

v ďalšej prevádzke iba dva kroky:

  1. Vytvoríme konfiguráciu json a zverejníme ju do sonáty
  2. Zariadenie sprísňuje konfiguráciu

Aké telefóny sa propagujú?

Predajcovia Grandstream, Fanvil, Yealink. Konfigurácie v rámci dodávateľa sú viac-menej rovnaké, ale môžu sa líšiť v závislosti od firmvéru - môže byť potrebné dodatočne otestovať.

Aké pravidlá možno nastaviť?

Časom. Môžete určiť čas, dokedy bude konfigurácia dostupná.
Podľa mac adresy. Pri nahrávaní konfigurácie cez osobný odkaz zariadenia sa skontroluje aj mac-adresa.
cez IP. Podľa IP adresy, z ktorej bola žiadosť podaná.

Ako interagovať so sonátou?

Prostredníctvom API, vytváranie http požiadaviek. Rozhranie API bude dostupné vo vašej inštalácii. Pretože Rozhranie API podporuje špecifikáciu swagger, ktorú môžete použiť online utilita pre testovacie požiadavky API.

OK skvele. Vec je v pohode, ako to skúsiť?

Najjednoduchší spôsob nasadenia obrazu dockera na základe úložiska sonátová ukážka. Úložisko obsahuje pokyny na inštaláciu.

Čo ak poznám node.js?

Ak máte skúsenosti s používaním JavaScriptu, tak rýchlo prídete na to, ako tu všetko funguje.

Bude sa rozvíjať sonáta?

Svoje ciele som čiastočne dosiahol. Ďalší vývoj je vecou mojich úloh na tému automatizácie nastavení telefónu. Existuje tiež možnosť rozšíriť konfigurácie na prispôsobenie tlačidiel telefónu, pridať adresáre zriaďovania, možno niečo iné, napíšte do komentárov.

Zhrnutie a poďakovanie

Budem rád za konštruktívne návrhy / námietky / pripomienky a otázky, pretože Môže to byť niečo nejasne opísané.

Ďakujem aj všetkým kolegom, ktorí pomohli, poradili, otestovali, poskytli / darovali telefóny na testy. V skutočnosti sa na projekte v rôznej miere podieľalo veľa ľudí, s ktorými som sa v práci rozprával, ďalej AsterConf'e, v chatoch a e-mailoch. Ďakujem za nápady a myšlienky.

Zdroj: hab.com

Pridať komentár