Nu știu cu ce să compar provisioning-ul. Poate cu o pisică? Pare că se poate și fără ea, dar cu ea e puțin mai bine. Mai ales dacă lucrează. ))
Formularea problemei:
- Vreau să configur SIP-telefoanele rapid, simplu, în siguranță. La instalarea telefonului și, cu atât mai mult, la reconfigurarea acestuia.
- Multe companii au propriile formate de configurare, propriile utilitare pentru generarea configurațiilor, propriile metode de protecție a configurărilor. Și nu prea am chef să mă ocup de fiecare în parte.
- Multe soluții de provisioning, a) sunt orientate la un singur furnizor sau un singur sistem telefonic, b) sunt implementate destul de voluminos, cu o mulțime de scripturi, parametri, br-r…
Pe punctul 3 vreau să comentez că există sisteme excelente de provisioning , , , unde sunt disponibile public șabloane pentru telefoane de la diverși furnizori. Există soluții comerciale, unde de asemenea se poate configura în modul de provisioning pentru telefoane de la diferiți producători, de exemplu, centralele Yeastar.
Pe Habr sunt și multe rețete despre cum să configurezi aparatele de la diverși furnizori: , . Dar, după cum se spune, toate sistemele au un dezavantaj fatal. Așa că ne vom construi propriul nostru vehicul.
propriul nostru format
După cum spune xkcd, dacă nu vrei să te ocupi cu 14 formate — . Așa că vom folosi setări generale pentru orice telefon și vom crea propriul nostru format JSON pentru configurare.
Aproximativ așa:
{
"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.ro",
"sip_name": "sip102",
"sip_user": "sip102",
"sip_password": "4321",
"sip_auth": "sip102"
}
]
}Așadar, în orice telefon este necesar să fie configurat timpul local, liniile SIP. Aici e simplu. Alte exemple pot fi consultate .
pe serverul nostru de provisioning
În manualele producătorului există de obicei un punct care spune: luați un csv, scrieți acolo login-parola-adresa MAC, folosiți scriptul nostru proprietar pentru a genera fișierele și puneți-le sub serverul web Apache și totul va fi bine.
În următorul punct din manual se discută de obicei și despre criptarea fișierului de configurare generat.
Dar asta este totul clasic. Apropierea modernă cu smoothie-uri și Twitter spune că trebuie să facem un server web gata, care nu va fi la fel de puternic ca Apache, ci va face un singur lucru mic. Să formeze și să ofere configurații prin link.
Aici ne oprim și ne amintim că aproape toate telefoanele SIP pot primi acum configurații prin http/https, așa că nu vom lua în considerare alte implementări (ftp, tftp, ftps). Apoi, fiecare telefon știe adresa sa MAC. Prin urmare, vom face două linkuri: unul personal - pe baza cheii dispozitivului, și al doilea general, care funcționează pe baza unei combinații de token comun și adresă MAC.
De asemenea, nu voi insista asupra zero-config, adică configurarea telefonului "de la zero", adică l-ați conectat la rețea și a funcționat imediat. Nu, în scenariul meu, l-ați conectat la rețea, ați făcut o configurare prealabilă (l-ați setat să primească configurația de la serverul de provisioning) și apoi beți un pinacolada și reconfigurați telefonul așa cum trebuie prin provisioning. A oferi Option 66 este responsabilitatea serverului DHCP.
Apropo, m-am săturat să spun „provisioning”, așa că cuvântul s-a redus la „provizionare”, vă rog să nu mă atacati.
Și încă ceva: serverul nostru de provisioning nu are UI, adică interfață de utilizator. Poate că va avea, dar nu sunt sigur, deoarece nu am nevoie de ea. Totuși, există API pentru salvarea/ștergerea setărilor, obținerea unei liste a furnizorilor și modelelor acceptate, totul este descris conform specificațiilor swagger.
De ce API și nu UI? Deoarece am deja propriul meu sistem telefonic, am o sursă de acreditive de unde pot lua aceste date, compune json-ul necesar și publica pe serverul de provisioning. Iar serverul de provisioning, conform regulilor specificate în fișierul json, va oferi dispozitivului dorit configurația sa sau nu o va oferi, dacă dispozitivul nu este cel corect sau nu se conformează criteriilor specificate și în acest json.

Asta este microsserviciul de provisioning pe care l-am creat. Se numește , codul sursă este disponibil pe GitHub, de asemenea există , un exemplu de utilizare a Docker-ului .
Caracteristici cheie:
în orice caz, accesul la configurație este limitat în timp, în mod implicit 10 minute. Dacă doriți să faceți din nou configurația disponibilă - republicați configurația din nou.
un singur format pentru toți furnizorii, întreaga ajustare a fost eliminată în sonata, trimiteți un json standardizat, configurați orice echipament disponibil.
toate configurațiile emise dispozitivelor sunt înregistrate, toate problemele pot fi vizualizate în jurnal și pot fi văzute erorile
Este posibil să folosiți un singur link comun cu token, fiecare telefon primind propia configurație, specificând adresa MAC. Sau un link personalizat pe baza key-ului.
API-ul pentru gestionare și livrarea configurațiilor către telefoane este separat pe porturi.
Teste. A fost foarte important pentru mine să fixez formatul livrării configurației și să acopăr toate situațiile obișnuite de livrare a configurației cu teste. Pentru ca totul să funcționeze corect.
Dezavantaje:
Încă nu se folosește criptarea în cadrul sonata. Adică, desigur, puteți începe să folosiți https, prin instalarea, de exemplu, a nginx-ului înainte de sonata. Dar metodele proprii nu au fost încă implementate. De ce? Proiectul este încă tânăr, a livrat abia prima sută de dispozitive. Și, desigur, adun idei și feedback. Apoi, pentru a face totul sigur, astfel încât configurațiile să nu poată fi interceptate în rețea, probabil că merită să ne concentrăm asupra cheilor de criptare, TLS și alte măsuri, dar aceasta va fi o continuare.
Lipsa UI. Poate că acesta este un dezavantaj semnificativ pentru utilizatorul final, dar pentru un administrator de sistem, o unealtă de linie de comandă este mai importantă decât o aplicație completă. A fost în planuri să fac o unelte de linie de comandă, dar nu sunt sigur dacă este necesară?
Ce înseamnă în final?
Un server web mic și simplu pentru provisioning-ul mai multor modele de telefoane, cu API pentru gestionare.
Încă o dată, cum ar trebui să funcționeze?
- Instalăm sonata.
- Formăm configurația JSON și o publicăm în sonata.
- Apoi primim de la sonata un link pentru provisioning.
- Apoi, acest link îl indicăm în telefonul aparatelor.
- Aparatul preia configurația.
În utilizarea ulterioară, doar două pași:
- Formăm configurația JSON și o publicăm în sonata.
- Aparatul preia configurația.
Ce telefoane sunt provisionate?
Furnizorii sunt Grandstream, Fanvil, Yealink. Configurațiile pentru furnizor sunt mai mult sau mai puțin identice, dar pot diferi în funcție de firmware - este posibil să fie necesare teste suplimentare.
Ce reguli pot fi setate?
În funcție de timp. Puteți specifica timpul până la care configurația va fi disponibilă.
În funcție de adresa MAC. Atunci când livrați configurația printr-un link personalizat, adresa MAC va fi de asemenea verificată.
În funcție de IP. În funcție de adresa IP de la care s-a făcut cererea.
Cum să interacționez cu sonata?
Prin API, făcând cereri HTTP. API-ul va fi disponibil în instalarea dumneavoastră. Deoarece API-ul suportă specificația swagger, puteți beneficia de pentru cereri de testare către API.
Ok, excelent. Lucru interesant, cum pot încerca?
Cel mai simplu este să desfaci o imagine Docker bazată pe un depozit . În depozit se află instrucțiuni pentru instalare.
А если знаю node.js?
Dacă ai experiență în utilizarea JavaScript, vei înțelege rapid cum este organizat totul aici.
Va continua să se dezvolte sonata?
Parțial, mi-am atins obiectivele. Continuarea dezvoltării este o întrebare legată de sarcinile mele în domeniul automatizării configurării telefoanelor. Există, de asemenea, posibilitatea de a extinde configurațiile pentru setarea butoanelor telefonului, de a adăuga adrese de provisionare pentru cărți de lucru, poate și alte lucruri; vă rog să scrieți în comentarii.
Rezumat și mulțumiri
Voi fi bucuros să primesc propuneri/obiecții/comentarii și întrebări constructive, deoarece este posibil să fie ceva ce nu am explicat clar.
De asemenea, îmi exprim recunoștința tuturor colegilor care m-au ajutat, consultat, testat și care au oferit/donat telefoane pentru teste. În realitate, la proiect au contribuit în diverse măsuri mulți oameni cu care am comunicat la lucru, în ‘e, în chaturi și emailuri. Mulțumesc pentru idei și gânduri.
Sursa: habr.com
