Ne vem s čim primerjati provisioning. Morda s mačko? V bistvu gre tudi brez nje, a je z njo nekoliko bolje. Še posebej, če dela ))
Postavitev problema:
- Želim hitro, enostavno in varno nastaviti SIP telefone. Pri namestitvi telefona in še posebej pri njegovi prekonstrukciji.
- Mnogi dobavitelji imajo svoje formate konfiguracij, svoje pripomočke za generiranje konfiguracij in svoje načine zaščite konfiguracij. In se ne želim ukvarjati s vsakim posebej.
- Številne rešitve za provisioning so a) usmerjene na enega dobavitelja ali en telefon sistem, b) precej obsežno se izvajajo, kup skriptov, parametrov, brih…
Glede točke 3 bom dodal komentar, da obstajajo odlični sistemi za provisioning , , , kjer so v odprtem dostopu na voljo predloge za telefone različnih dobaviteljev. Obstajajo tudi komercialne rešitve, kjer lahko prav tako nastavite v modulu provisioning delovanje telefonov različnih proizvajalcev, na primer PABX Yeastar.
Na Habrju je tudi polno receptov, kako nastaviti naprave različnih dobaviteljev: , . A kot pravijo, ima vsaka sistem usoden pomanjkljivost. Zato bomo izdelali svoj kolo.
svoj format
Kot pravijo v xkcd, če nočeš razčiti 14 formatov — . Zato uporabljamo skupne nastavitve za vsak telefon in bomo ustvarili svoj json-format konfiguracije.
Približno takole:
{
"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"
}
]
}Torej, v vsakem telefonu je potrebno nastaviti lokalni čas in sip-linije. Tu je vse enostavno. Še primere si lahko pogledate .
svoj provisioning strežnik
V navodilih proizvajalca je običajno točka, kjer piše: vzemite csv, zabeležite uporabniško ime - geslo - mac-naslov, z našim skriptom generirajte datoteke, postavite jih pod spletni strežnik Apache in bo dobro.
V naslednji točki navodil ponavadi razložijo, da je možno tudi šifrirati ustvarjeno datoteko konfiguracije.
Ampak to je vse klasika. Sodobni pristop s smoothieji in twitterjem pravi, da je treba ustvariti pripravljen spletni strežnik, ki ne bo tako zmogljiv kot Apache, ampak bo počel le eno malo nalogo. Oblikovati in oddajati konfiguracije po povezavi.
Tuk se ustavimo in se spomnimo, da skoraj vsi SIP telefoni zdaj lahko pridobivajo konfiguracije po http/https, zato drugih izvedb (ftp, tftp, ftps) ne obravnavamo. Vsak telefon pozna svoj MAC naslov. Zato bomo ustvarili dve povezavi: eno osebno – po ključu naprave, in drugo splošno, ki deluje na osnovi skupnega žetona in MAC naslova.
Prav tako se ne bom ustavljal pri zero-config-u, tj. nastavitvi telefona 'z nule', tj. plug and play. Ne, v mojem scenariju ste telefon priključili v omrežje, opravili predhodne nastavitve (naredili, da pridobi konfiguracijo s strežnika), nato pa uživate v piña coladi in nastavljate telefon tako, kot mora biti, prek provision. Dodeljevanje Option 66 je naloga DHCP strežnika.
Mimogrede, povsem sem utrujen od besede 'provisioning', zato se je izraz skrajšal na 'provižn', prosim, ne brcnite me.
In še: naš provisionski strežnik nima uporabniškega vmesnika. Morda ga bo imel kdaj, ampak nisem prepričan, ker ga ne potrebujem. Ima pa API za shranjevanje/odstranjevanje nastavitev, pridobitev seznama podprtih dobaviteljev in modelov, vse je opisano po pravilih swagger specifikacije.
Zakaj API, ne UI? Ker že imam svoj telefonski sistem, imam vir prijavnih podatkov, od koder lahko te podatke vzamem, sestavim ustrezen JSON in ga objavim na provisionskem strežniku. Provisionski strežnik pa bo po pravilih, navedenih v JSON datoteki, dodelil ustrezni napravi njeno nastavitev ali je ne bo dodelil, če naprava ni prava ali ne izpolnjuje kriterijev, navedenih tudi v tem JSON-u.

Tako je nastal ta mikrostoritev provižn. Ime mu je , izvorna koda je dostopna na GitHubu, prav tako obstaja , primer uporabe Dockra .
Ključne značilnosti:
v vsakem primeru omejen dostop do konfiguracije po času, privzeto 10 minut. Če želite ponovno omogočiti dostop do konfiguracije - ponovno objavite konfiguracijo.
en format za vse dobavitelje, vse nastavitve so v sonati, pošljete standardiziran JSON in nastavite katerokoli razpoložljivo opremo.
vse dodeljene konfiguracije napravam se beležijo, vse težavne točke lahko pregledate v dnevniku in vidite napake.
možno je použiť jeden spoločný odkaz s tokenom, každý telefón dostane svoj konfiguráciu pri uvedení mac-adresy. Alebo osobitný odkaz na základe kľúča.
API na správu (management) a vydávanie konfigurácií telefónov (provisioning) sú rozdelené podľa portov.
Testy. Pre mňa bolo veľmi dôležité zaznamenať formát vydávanej konfigurácie a pokryť všetky bežné situácie vydania konfigurácie testami. Aby to celé jasne fungovalo.
Mane:
Zatiaľ nie je implementované šifrovanie v rámci sonaty. Môžete samozrejme začať používať https, napríklad prostredníctvom nginx pred sonatou. Ale tradičné metódy zatiaľ neboli zapojené. Prečo? Projekt je stále mladý, práve dokončil svoju prvú stovku zariadení. A samozrejme zbieram nápady, spätnú väzbu. Ďalej, aby sme to všetko zabezpečili, aby konfigurácie nebolo možné načítať v sieti, pravdepodobne bude treba zamyslieť sa nad šifrovacími kľúčmi, tls a podobnými, ale to bude pokračovanie.
Nedostatok UI. Možno je to významná nevýhoda pre koncového používateľa, ale pre systémového administrátora je skôr dôležitá konzolová utilita ako plnohodnotná aplikácia. Vytvoriť konzolovú utilitu bolo v pláne, ale nie som si istý, či je potrebná?
Kaj na koncu?
Malý a jednoduchý webový server na provisioning niekoľkých modelov telefónov s API na správu.
Ešte raz, ako to má fungovať?
- Nainštalujeme sonatu.
- Vytvoríme json-konfiguráciu a publikujeme ju v sonate.
- Potom dostaneme od sonaty odkaz na provisioning.
- Tento odkaz uvedieme v telefónnom zariadení.
- Zariadenie načíta konfiguráciu.
v ďalšej prevádzke len dva kroky:
- Vytvoríme json-konfiguráciu a publikujeme ju v sonate.
- Zariadenie načíta konfiguráciu.
Aké telefóny sa provizionujú?
Dodávatelia Grandstream, Fanvil, Yealink. Konfigurácie pre dodávateľa sú viac-menej rovnaké, ale môžu sa líšiť v závislosti od firmvéru – možno bude potrebné vykonať dodatočné testovanie.
Aké pravidlá je možné nastaviť?
Podľa času. Môžete určiť čas, do ktorého bude konfigurácia dostupná.
Podľa mac-adresy. Pri vydávaní konfigurácie prostredníctvom osobitného odkazu bude kontrolovaná aj mac-adresa zariadenia.
Podľa ip. Podľa ip-adresy, z ktorej bol vyhotovený dopyt.
Ako interagovať so sonatou?
Cez API, vykonávaním http dopytov. API bude dostupné vo vašej inštalácii. Pretože API podporuje swagger špecifikáciu, môžete využiť na testovacie dopyty k API.
Okej, skvelé. Vec je zaujímavá, ako to vyskúšať?
Najlažje je zagnati docker-podobo na podlagi repozitorija . V repozitoriju je navodila za namestitev.
А если знаю node.js?
Če imate izkušnje z uporabo JavaScripta, se boste hitro naučili, kako vse tukaj deluje.
Bo razvoj sonate potekal naprej?
Delno sem dosegel svoje cilje. Nadaljnji razvoj je vprašanje mojih nalog glede avtomatizacije nastavitve telefonov. Še vedno obstaja možnost razširitve konfiguracij za nastavitev gumbov na telefonu, dodajanja posredniških naslovov knjig, morda še kaj, pišite v komentarjih.
Življenjepis in zahvale
Vesel bom konstruktivnih predlogov/ugovorov/komentarjev in vprašanj, saj je lahko, da sem kaj nejasno opisal.
Prav tako izražam hvaležnost vsem kolegom, ki so pomagali, svetovali, testirali, posodili/podarili telefone za teste. Res je, da je pri projektu na različne načine sodelovalo mnogo ljudi, s katerimi sem komuniciral na delu, na ‘e, v klepetih in e-poštah. Hvala za ideje in misli.
Izvor: habr.com
