Sonata - server de furnizare SIP

Nu știu cu ce să compar aprovizionarea. Poate cu o pisică? Pare posibil fără el, dar cu el este puțin mai bine. Mai ales dacă funcționează))

Formularea problemei:

  1. Doresc să configurez telefoane SIP rapid, ușor și în siguranță. La instalarea unui telefon și cu atât mai mult la reconfigurarea lui.
  2. Mulți furnizori au propriile lor formate de configurare, propriile utilitare pentru generarea de configurații și propriile modalități de a proteja configurațiile. Și nu vreau să am de-a face cu toată lumea.
  3. Multe soluții de furnizare, a) sunt concentrate pe un singur furnizor sau pe un singur sistem de telefonie, b) sunt destul de greoaie de implementat, o mulțime de scripturi, parametri, brrr...

Referitor la punctul 3, voi face un comentariu că există sisteme excelente de aprovizionare pentru FreePBX, pentru FusionPBX, pentru Kazoo, unde șabloanele pentru telefoane de la diverși furnizori sunt disponibile public. Există soluții comerciale în care puteți configura și funcționarea telefoanelor de la diferiți producători în modulul de aprovizionare, de exemplu, Yeastar PBX.

Habré este, de asemenea, plin de rețete despre cum să configurați dispozitive de la diverși furnizori: timp, два. Dar, după cum se spune, toate sistemele au un defect fatal. Așa că ne vom face propria bicicletă.

propriul dvs. format

După cum se spune în xkcd, dacă nu doriți să vă ocupați de 14 formate - veni cu al 15-lea. Prin urmare, folosim setări generale pentru orice telefon și ne facem propriul format de configurare json.

Ceva de genul:

{
   "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"
      }
   ]
}

Deci, în orice telefon trebuie să configurați ora locală și liniile SIP. Totul este simplu aici. Puteți vedea mai multe exemple aici.

aprovizionarea propriului server

În manualele producătorului există de obicei un punct în care scrie: ia un csv, notează-ți adresa de autentificare-parola-mac-adresa, generează fișiere folosind scriptul nostru proprietar, pune-le sub serverul web Apache și totul va fi bine.

Următorul paragraf al manualului vă spune de obicei că puteți cripta și fișierul de configurare generat.

Dar toate acestea sunt clasice. Abordarea modernă cu smoothie-uri și Twitter spune că trebuie să faci un server web gata făcut, care nu va fi la fel de puternic ca Apache, dar va face doar un lucru mic. Generați și trimiteți configurații folosind un link.

Să ne oprim aici și să ne amintim că aproape toate telefoanele SIP pot primi acum configurații prin http/https, așa că nu luăm în considerare alte implementări (ftp, tftp, ftps). Apoi, fiecare telefon își cunoaște propria adresă MAC. Prin urmare, vom face două legături: una personală - bazată pe cheia dispozitivului, a doua generală, care funcționează folosind o combinație de un token comun și o adresă MAC.

De asemenea, nu mă voi opri pe zero-config, adică. configurarea telefonului de la zero, adică l-ai conectat la rețea și a început să funcționeze. Nu, în scenariul meu, îl conectați la rețea, faceți setarea preliminară (se setați să primească configurația de la serverul de aprovizionare), apoi beți pina colada și reconfigurați telefonul după cum este necesar prin provisioning. Distribuirea Opțiunii 66 este responsabilitatea serverului DHCP.

Apropo, m-am săturat să spun „aprovizionare”, așa că cuvântul a fost scurtat la „aprovizionare”, vă rog să nu mă loviți.

Și încă ceva: serverul nostru de aprovizionare nu are o interfață de utilizare, adică. interfața cu utilizatorul. Poate, deocamdată, dar nu sunt sigur, pentru că... Nu am nevoie de el. Dar există un API pentru salvarea/ștergerea setărilor, obținerea unei liste de furnizori acceptați, modele, totul este descris conform canoanelor specificației swagger.

De ce API și nu UI? Deoarece Am deja propriul sistem de telefonie, apoi am o sursă de acreditări, de unde trebuie doar să iau aceste date, să compilez json-ul necesar și să-l public pe serverul de aprovizionare. Iar serverul de aprovizionare, conform regulilor specificate în fișierul json, va oferi dispozitivului necesar configurația sa sau nu dacă dispozitivul nu este corect sau nu îndeplinește criteriile specificate și în acest json.

Sonata - server de furnizare SIP

Așa a rezultat microserviciul de furnizare. Chemat sonată, codul sursă este disponibil pe GitHub, există și imagine docker gata, exemplu de utilizare a dockerului aici.

Caracteristici cheie:

  • în orice caz, acces limitat la config în timp, implicit 10 minute. Dacă doriți să faceți configurația disponibilă din nou, republicați configurația din nou.

  • un singur format pentru toți vânzătorii, toate ajustările sunt eliminate în sonata, trimiteți json standardizat, configurați orice echipament disponibil.

  • toate configurațiile emise pentru dispozitive sunt înregistrate, toate zonele cu probleme pot fi vizualizate în jurnal și erorile pot fi văzute

  • Este posibil să utilizați o legătură comună cu un token; fiecare telefon primește propria sa configurație specificând adresa mac. Sau un link personal prin cheie.

  • API-urile pentru gestionarea (management) și furnizarea de configurații pe telefoane (provisionare) sunt împărțite pe porturi

  • Teste. A fost foarte important pentru mine să repar formatul configurației emise și să acopăr toate situațiile obișnuite de emitere a unei config cu teste. Pentru ca toate acestea să funcționeze clar.

Contra:

Până acum, criptarea nu este folosită în niciun fel în Sonata. Acestea. Desigur, puteți începe să utilizați https punând nginx în fața sonatei, de exemplu. Dar metodele brevetate nu au fost încă folosite. De ce? Proiectul este încă tânăr, și-a lansat prima sută de dispozitive. Și, bineînțeles, adun idei și feedback. În plus, pentru a face totul în siguranță, astfel încât configurațiile să nu poată fi adulmecate în rețea, probabil că merită să vă deranjați cu cheile de criptare, tls și ariciul cu ele, dar aceasta va fi o continuare.

Lipsa UI. Poate că acesta este un dezavantaj semnificativ pentru utilizatorul final, dar pentru un administrator de sistem, un utilitar de consolă este mai important decât o aplicație cu drepturi depline. Au existat planuri de a crea un utilitar de consolă, dar nu sunt sigur dacă este necesar?

Rezultatul?

Un server web mic și simplu pentru furnizarea mai multor modele de telefoane cu un API pentru administrare.

Încă o dată, cum ar trebui să funcționeze asta?

  1. Instalarea sonatei.
  2. Creăm o configurație json și o publicăm în Sonata.
  3. Apoi primim un link de aprovizionare de la Sonata.
  4. Apoi indicăm acest link în telefon.
  5. Dispozitivul încarcă configurația

Există doar doi pași în operarea ulterioară:

  1. Creăm o configurație json și o publicăm în Sonata
  2. Dispozitivul încarcă configurația

Ce telefoane vor fi promovate?

Furnizori Grandstream, Fanvil, Yealink. Configurațiile din cadrul furnizorului sunt mai mult sau mai puțin aceleași, dar pot diferi în funcție de firmware - poate fi necesar să se testeze suplimentar.

Ce reguli poti stabili?

Cu timpul. Puteți specifica timpul până la care configurația va fi disponibilă.
După adresa mac. Când trimiteți configurația prin linkul personal al dispozitivului, adresa mac va fi, de asemenea, verificată.
Prin ip. După adresa IP de unde a fost făcută cererea.

Cum să interacționezi cu sonata?

Prin API, efectuând solicitări http. API-ul va fi disponibil în instalarea dvs. Deoarece API-ul acceptă specificația swagger, pe care o puteți folosi utilitar online pentru solicitările de testare către API.

Bine, minunat. Chestii cool, ce zici să încerci?

Cel mai simplu mod este să implementați o imagine docker bazată pe un depozit sonata-mostra. Depozitul conține instrucțiuni de instalare.

Ce se întâmplă dacă știu node.js?

Dacă aveți experiență în utilizarea JavaScript, atunci vă veți da seama rapid cum funcționează totul aici.

Va exista o dezvoltare Sonata?

Mi-am atins parțial obiectivele. Dezvoltarea ulterioară este o problemă a sarcinilor mele pe tema automatizării configurării telefonului. Există, de asemenea, o oportunitate de a extinde configurațiile pentru a configura butoanele telefonului, pentru a adăuga furnizarea agendei de adrese, poate altceva, scrieți în comentarii.

Rezumat și mulțumiri

Voi fi bucuros să am sugestii/obiecții/comentarii și întrebări constructive, deoarece... Este posibil să fi descris ceva de neînțeles.

De asemenea, îmi exprim recunoștința tuturor colegilor mei care mi-au ajutat, au sfătuit, au testat și au furnizat/donat telefoane pentru teste. În realitate, mulți oameni cu care am comunicat la locul de muncă sunt implicați în proiect în diferite grade, AsterConf'e, în chat-uri și e-mailuri. Mulțumesc pentru idei și gânduri.

Sursa: www.habr.com

Adauga un comentariu