Neviem, s čím by som porovnal provisioning. Možno s mačkou? Môžeš to urobiť aj bez nej, ale s ňou je to o niečo lepšie. Najmä ak pracuje))
Vytvorenie problému:
- Chcem rýchlo, jednoducho a bezpečne konfigurovať SIP telefóny. Pri inštalácii telefónu a obzvlášť pri jeho prekonstrukcii.
- Mnohí dodávatelia majú svoje formáty konfigurácií, svoje nástroje na generovanie konfigurácií, svoje spôsoby ochrany konfigurácií. A nechce sa mi zaoberať každým z nich.
- Mnohé riešenia na provisioning a) sú zamerané na jedného dodávateľa alebo jeden telefónny systém, b) realizujú sa dosť rozšírene, veľa skriptov, parametrov, bléé…
K bodu 3 urobím komentár, že existujú výborné systémy provisioning , , , kde sú verejne dostupné šablóny pre telefóny rôznych dodávateľov. Existujú aj komerčné riešenia, kde je možné nastaviť v module provisioning fungovanie telefónov rôznych výrobcov, ako napríklad PBX Yeastar.
Na Habré je tiež množstvo receptov, ako nastaviť zariadenia rôznych dodávateľov: , . Ale ako sa hovorí, všetky systémy majú fatálny nedostatok. Preto si vytvoríme svoj vlastný bicykel.
svoj format
Ako sa hovorí v xkcd, ak nechceš rozumieť 14 formátom — . Preto používame spoločné nastavenia pre každý telefón a vytvoríme si vlastný json formát konfigurácie.
Približne 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 každom telefóne je potrebné nastaviť lokálny čas a sip linky. Tu je to jednoduché. Ďalšie príklady si môžete pozrieť .
svoj provisioning server
V manuáloch výrobcu je zvyčajne sekcia, kde sa hovorí: vezmite csv, zapíšte tam login-heslo-mac-adresu, naším špeciálnym skriptom vygenerujte súbory, uložte ich pod webový server Apache a bude to dobré.
V ďalšej časti manuálu sa zvyčajne hovorí, že môžete dokonca zašifrovať vygenerovaný súbor konfigurácie.
Ale to všetko je klasika. Moderný prístup so smoothies a Twitterom hovorí, že by sa mal vytvoriť hotový webový server, ktorý nebude tak mocný ako Apache, ale bude robiť iba jednu malú vec. Generovať a poskytovať konfigurácie prostredníctvom odkazu.
Tu sa zastavíme a spomenieme si, že takmer všetky SIP telefóny teraz môžu získať konfigurácie cez http/https, preto iné realizácie (ftp, tftp, ftps) neberieme do úvahy. Potom, každý telefón pozná svoju mac adresu. Preto urobíme dva odkazy: jeden osobný — podľa kľúča zariadenia, druhý spoločný, ktorý funguje na základe kombinácie spoločného tokenu a mac adresy.
Taktiež sa nebudem zaoberať zero-configom, t.j. nastavením telefónu „od nuly“, t.j. zapojili ste ho do siete a hneď funguje. Nie, v mojom scenári, zapojíte ho do siete, urobíte predbežné nastavenie (nastavíte ho na získanie konfigurácie zo servera provision), a potom pijete piňa coladu a prestavujete telefón tak, ako treba cez provision. Distribuovať Option 66 — to je starosť DHCP servera.
Mimochodom, už som sa unavil hovorením „provisioning“, preto sa slovo skrátilo na „provision“, prosím nezhadzujte ma.
A ešte: na našom provisioning serveri nie je užívateľské rozhranie, t.j. UI. Možno, zatiaľ, ale nie som si istý, pretože to nepotrebujem. Akurát je tu API na ukladanie/odstraňovanie nastavení, získavanie zoznamu podporovaných dodávateľov, modelov, všetko opísané podľa kanónu swagger špecifikácie.
Prečo API, a nie UI? Pretože už mám svoju telefónnu systém, mám zdroj prístupových údajov, odkadiaľ stačí zobrať tieto údaje, zložiť potrebný json a publikovať na provisioning serveri. A už provisioning server podľa pravidiel uvedených v json súbore poskytne požadovanému zariadeniu jeho konfiguráciu alebo poskytnutie odmietne, ak zariadenie nie je to, alebo nezodpovedá kritériám, uvedeným taktiež v tomto json.

Takýto mikroslužba provision sa podarila. Nazýva sa , zdrojový kód je dostupný na github, je tu tiež , príklad použitia dockera .
Kľúčové funkcie:
v každom prípade obmedzený prístup k konfigurácii po časovom limite, predvolené 10 minút. Ak chcete konfiguráciu sprístupniť znovu — publikujte konfiguráciu znova.
jeden formát pre všetkých dodávateľov, všetko prispôsobenie je zabudované v sonata, pošlete štandardizovaný json, nastavíte akékoľvek dostupné zariadenie.
všetky poskytované konfigurácie zariadeniam sú logované, všetky problémové miesta si môžete pozrieť v logu a vidieť chyby
Je možné používať jeden spoločný odkaz s tokenom, každý telefón dostane svoj vlastný konfiguráciu po zadaní mac-adresy. Alebo osobný odkaz podľa kľúča.
API na správu a poskytovanie konfigurácií telefónom sú rozdelene podľa portov.
Testy. Pre mňa bolo veľmi dôležité zafixovať formát vydávaného konfigura a pokryť všetky bežné situácie vydania konfigura testami. Aby to všetko fungovalo presne.
Nevýhody:
Zatiaľ nie je implementované šifrovanie v rámci sonata. T.j. samozrejme, môžete začať používať https, napríklad tým, že pred sonata nainštalujete nginx. Ale firmové metódy zatiaľ nie sú zapojené. Prečo? Projekt je ešte mladý, prevádzkuje svoje sotva prvé stovky zariadení. A samozrejme zbieram nápady, spätnú väzbu. Ďalej, aby to bolo bezpečné, aby konfigura nebolo možné odpočúvať v sieti, pravdepodobne by stálo za to zamyslieť sa nad šifrovacími kľúčmi, tls a podobným, ale to by bolo pokračovanie.
Nedostatok UI. Možno, že to je vážny nedostatok pre koncového používateľa, ale pre systémového administrátora je skôr dôležitá konzolová utilita než plnohodnotná aplikácia. Urobiť konzolovú utilitu bolo v plánoch, ale nie som si istý, či je to potrebné?
Aký je výsledok?
Malý a jednoduchý webový server na províziu niekoľkých modelov telefónov s API na správu.
Ešte raz, ako to má fungovať?
- Nainštalujeme sonata.
- Vytvoríme json-konfig a zverejníme ho v sonata.
- Následne dostaneme od sonata odkaz na províziu.
- Tento odkaz uvedieme v telefóne.
- Prístroj načíta konfiguráciu.
V ďalšej prevádzke sú len dva kroky:
- Vytvoríme json-konfig a zverejníme ho v sonata.
- Prístroj načíta konfiguráciu.
Aké telefóny sú províznuté?
Dodávatelia 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 - možno bude potrebné dodatočne otestovať.
Aké pravidlá je možné nastaviť?
Podľa času. Môžete uviesť čas, do ktorého bude konfigura dostupná.
Podľa mac-adresy. Pri vydávaní konfigurácie cez osobný odkaz sa bude tiež kontrolovať mac-adresa zariadenia.
Podľa ip. Podľa ip-adresy, odkiaľ bola vykonaná žiadosť.
Ako interagovať s sonata?
Cez API, vykonaním http požiadaviek. API bude dostupné vo vašej inštalácii. Keďže API podporuje swagger špecifikáciu, môžete využiť na testovacie požiadavky na API.
Ok, skvelé. Vec je zaujímavá, ako to vyskúšať?
Najjednoduchšie je nasadiť docker-obraz na základe repozitára . V repozitári je umiestnený návod na inštaláciu.
А если знаю node.js?
Ak máte skúsenosti s používaním JavaScriptu, rýchlo sa zorientujete, ako je tu všetko usporiadané.
Bude sa sonata ďalej vyvíjať?
Čiastočne som dosiahol svoje ciele. Ďalší rozvoj je otázkou mojich úloh v oblasti automatizácie nastavenia telefónov. Existuje tiež možnosť rozšíriť konfigurácie na nastavenie tlačidiel telefónu, pridať provízne adresáre, možno aj niečo iné, napíšte v komentároch.
Životopis a poďakovania
Rád prijmem konštruktívne návrhy/odporovania/komentáre a otázky, pretože môže byť, že niečo nie je dostatočne jasne popísané.
Taktiež vyjadrujem vďaku všetkým kolegom, ktorí pomáhali, radili, testovali, poskytli/darovali telefóny na testovanie. Naozaj, k projektu je zapojených na rôzne úrovne množstvo ľudí, s ktorými som komunikoval pri práci, na ‘e, v chatoch a e-mailoch. Ďakujem za nápady a myšlienky.
Zdroj: habr.com
