Sonata — Serveri i provisioning pĂ«r SIP

Nuk e di me çfarë ta krahasoj provisioning. Mund të jetë si me macen? Mund të jesh pa të, por është pak më mirë me të. Sidomos nëse funksionon ))

Vendosja e problemit:

  1. Dua të konfiguroj telefonat SIP shpejt, lehtë, në mënyrë të sigurt. Gjatë instalimit të telefonit dhe sidomos gjatë rikonfigurimit të tij.
  2. Shumë shitës kanë formate të tyre të konfiguarimeve, utilitetet e tyre për të gjeneruar konfiguraime, mënyrat e tyre të mbrojtjes së konfigurave. Dhe nuk është shumë këndshme të merresh me secilin prej tyre.
  3. Shumë zgjidhje për provisioning, a) janë të orientuara ndaj një shitësi ose një sistemi të telefonisë, b) implementohen mjaft ngatërruar, me një grusht skripta, parametra, brrr...

Për pikën 3 do të jap një koment, se ka sisteme të shkëlqyera provisioning për FreePBX, për FusionPBX, për Kazoo, ku në akses të hapur ka shabllone për telefonat e shitësve të ndryshëm. Ka zgjidhje komerciale, ku gjithashtu mund të konfigurohet në modulin e provisioning për të punuar telefonat e prodhuesve të ndryshëm, për shembull, sistemet telefonike Yeastar.

Në Habr gjithashtu ka shumë receta si të konfigurohen pajisjet e shitësve të ndryshëm: një, dy. Por siç thonë, të gjitha sistemet kanë një të meta fatale. Prandaj do të bëjmë biçikletën tonë.

formatin tonë

Siç thotĂ« nĂ« xkcd, nĂ«se nuk dĂ«shiron tĂ« merresh me 14 formate — shkruaj 15-in. Prandaj ne pĂ«rdorim cilĂ«simet e zakonshme pĂ«r çdo telefon dhe do tĂ« bĂ«jmĂ« formatin tonĂ« json pĂ«r konfig.

Për shembull diçka e tillë:

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

Pra, në çdo telefon është e nevojshme të konfigurohet koha lokale, linjat sip. Këtu është shumë e thjeshtë. Mund të shikosh edhe shembuj këtu.

serverin tonë të provisioning

Në manualet e prodhuesit zakonisht ka një pikë, ku thuhet: merrni csv, shkruani aty emrin e përdoruesit, fjalëkalimin, adresën MAC, me skriptin tonë provojeni gjeneroni skedarët, vendosini nën serverin web Apache dhe do të jetë mirë.

Në pikën tjetër të manualit zakonisht flitet se gjithashtu mund të enkriptohet skedari i konfiguruar të gjeneruar.

Por këtë arsye, është klasik. Qasja moderne me smoothie dhe Twitter thotë se duhet të krijosh një server web që nuk është aq i fuqishëm sa Apache, por do të bëjë vetëm një punë të vogël. Të formojë dhe të dorëzojë konfigurime përmes lidhjes.

TĂ« ndalemi kĂ«tu dhe tĂ« kujtojmĂ« se pothuajse tĂ« gjithĂ« telefonĂ«t SIP tani mund tĂ« marrin konfigurime pĂ«rmes http/https, prandaj ne nuk shqyrtojmĂ« realizime tĂ« tjera (ftp, tftp, ftps). Pas kĂ«saj, çdo telefon e di adresĂ«n e tij mac. Prandaj, ne do tĂ« bĂ«jmĂ« dy lidhje: njĂ« personale — pĂ«rmes çelĂ«sit tĂ« pajisjes, dhe e dyta Ă«shtĂ« e pĂ«rgjithshme, e cila funksionon pĂ«rmes njĂ« tokeni tĂ« pĂ«rbashkĂ«t dhe adresĂ«s mac.

Po ashtu, nuk do të ndalem në zero-config, dmth. konfigurimi i telefonit "nga e para", dmth. ju e futni atë në rrjet dhe ai fillon të funksionojë. Jo, në skenarin tim, ju e futni në rrjet, bëni një konfigurim paraprak (e konfiguroni të marrë konfigurimin nga serveri i provizionimit), dhe pastaj pini një piña colada dhe e rikonfiguroni telefonin siç duhet përmes provizionimit. Shpërndarja e Opsionit 66 është përgjegjësi e serverit DHCP.

Për herë të parë, po ndjehem i lodhura duke thënë "provisioning", prandaj fjala u shkurtua në "provizion", ju lutem mos më goditni me këmbë.

Dhe gjithashtu: serveri ynë i provizionit nuk ka UI, dmth. ndërfaqe për përdoruesit. Ndoshta, për momentin, por nuk jam i sigurt, pasi nuk më nevojitet. Në vend të kësaj, ka një API për ruajtjen/fshirjen e konfigurimeve, marrjen e listës së ofruesve të mbështetur, modeleve, gjithçka është e përshkruar sipas kanoneve të specifikimit swagger.

Pse API dhe jo UI? Sepse unë tashmë kam sistemin tim telefonik, kështu që kam burimin e kredencialeve, ku mjafton të marr këto të dhëna, të kompozoj json-in e nevojshëm dhe ta publikoj në serverin e provizionit. Dhe, serveri i provizionimit në përputhje me rregullat e caktuara në skedarin json, do të japë pajisjes përkatëse konfigurimin e saj ose nuk do ta japë, nëse pajisja nuk është ajo, ose nuk përputhet me kriteret e përcaktuara gjithashtu në këtë json.

Sonata — Serveri i provisioning pĂ«r SIP

Ja si doli ky mikroshërbim provizion. Quhet sonata, kodi burimor është në dispozicion në GitHub, gjithashtu ka një imazh të plotë docker, një shembull i përdorimit të docker-it këtu.

Karakteristikat kryesore:

  • nĂ« çdo rast, qasje e kufizuar nĂ« konfigurim pĂ«rkohĂ«sisht, me defolt 10 minuta. NĂ«se dĂ«shironi ta bĂ«ni pĂ«rsĂ«ri konfigurimin tĂ« disponueshĂ«m — ribotoni konfigurimin pĂ«rsĂ«ri.

  • njĂ« format pĂ«r tĂ« gjithĂ« ofruesit, gjithĂ« pĂ«rshtatja Ă«shtĂ« hequr nĂ« sonata, dĂ«rgon njĂ« json tĂ« standardizuar, rregullon çdo pajisje tĂ« disponueshme.

  • TĂ« gjitha konfigurimet e dhĂ«na pajisjeve regjistrohen, tĂ« gjitha vendet problematike mund tĂ« shihen nĂ« log dhe tĂ« shihen gabimet.

  • ËshtĂ« e mundur pĂ«rdorimi i njĂ« lidhjeje tĂ« pĂ«rgjithshme me token, çdo telefon merr konfigurimin e vet duke specifikuar adresĂ«n mac. Ose njĂ« lidhje personale sipas çelĂ«sit.

  • API pĂ«r menaxhimin dhe dhĂ«nien e konfigurimeve pĂ«r telefonat Ă«shtĂ« ndarĂ« sipas porteve.

  • Testet. PĂ«r mua ishte shumĂ« e rĂ«ndĂ«sishme tĂ« dokumentoja formatin e dhĂ«nĂ« tĂ« konfigurimit dhe tĂ« mbuloja tĂ« gjitha situatat e zakonshme tĂ« dhĂ«nies sĂ« konfigurimin me teste. QĂ« tĂ« funksionojĂ« gjithçka qartĂ«.

Disavantazhet:

Derimë tani, nuk po përdoret ndonjë enkriptim në kuadër të sonata. Domethënë, sigurisht, mund të filloni të përdorni https duke vendosur, për shembull, nginx para sonata. Por metodat e markës ende nuk janë angazhuar. Pse? Projekti është ende i ri, ka provizionuar sa më pak se njëqind pajisje. Dhe, sigurisht, jam duke mbledhur ide, reagime. Më pas, për të bërë gjithçka të sigurt, që konfigurimet të mos mund të përgjohet në rrjet, ndoshta është e nevojshme të merremi me çelësat e enkriptimit, tls dhe të tjera, por kjo do të jetë një vazhdim.

Mungesa e UI. Mund të jetë një disavantazh i rëndësishëm për përdoruesin final, por për administratorin e sistemit është më e rëndësishme një utilitar konsol që një aplikacion i plotë. Të krijoj një utilitar konsol ishte në planet, por nuk jam i sigurt nëse ajo është e nevojshme.

ÇfarĂ« nĂ« pĂ«rfundim?

Një server i vogël dhe i thjeshtë web për provizionimin e disa modeleve të telefonave me API për menaxhim.

Përsëri, si duhet të funksionojë kjo?

  1. Instalojmë sonata.
  2. Formojmë json-konfigurimin dhe e publikojmë atë në sonata.
  3. Pastaj marrim nga sonata lidhjen për provizionimin.
  4. Më pas e specifikojmë këtë lidhje në aparatin telefonik.
  5. Aparati tërheq konfigurimin.

Në përdorimin e mëvonshëm vetëm dy hapa:

  1. Formojmë json-konfigurimin dhe e publikojmë atë në sonata.
  2. Aparati tërheq konfigurimin.

Cilat telefona provizionohen?

Furnizuesit Grandstream, Fanvil, Yealink. Konfigurimet nĂ« kuadĂ«r tĂ« furnizuesit janĂ« mĂ« shumĂ«-mĂ« pak tĂ« njĂ«jta, por mund tĂ« ndryshojnĂ« nĂ« varĂ«si tĂ« shĂ«mbujve — ndoshta do tĂ« jetĂ« e nevojshme tĂ« testoni pĂ«rbashkĂ«.

Cilat rregulla mund të përcaktohen?

Sipër kohe. Ju mund të përcaktoni kohën deri në të cilën konfigurimi do të jetë i aksesueshëm.
Sipër adresës mac. Kur jepet konfigurimi me lidhje personale, adresa mac gjithashtu do të kontrollohet për pajisjet.
Sipër ip. Sipër adresës IP, nga e cila është bërë kërkesa.

Si të ndërveprojmë me sonata?

Përmes API, duke bërë kërkesa http. API do të jetë i disponueshëm në instalimin tuaj. Duke qenë se API mbështet specifikimin swagger, mund të përdorni një mjet online për kërkesat testuese ndaj API-së.

Ok, shkëlqyeshëm. Si mund ta provoj atë?

Më lehtë është të çelni imazhin docker mbi bazën e depozitës sonata-sample. Në depozitë ndodhet një udhëzues për instalimin.

А ДслО Đ·ĐœĐ°ŃŽ node.js?

Nëse keni përvojë në përdorimin e JavaScript, do të kuptoni shpejt si funksionon gjithçka këtu.

A do të ketë zhvillim të sonata-s?

Pjesërisht kam arritur qëllimet e mia. Zhvillimi në vazhdim është një çështje për detyrat e mia lidhur me automatizimin e konfigurimit të telefonave. Ka gjithashtu mundësi për të zgjeruar konfigurimet për rregullimin e butonave të telefonit, për të shtuar adresat e provizionit të librit të adresave, ndoshta edhe diçka tjetër, shkruani në komentet.

Përmbledhje dhe falënderime

Do të jem i lumtur për propozime / kundërshtime / komente dhe pyetje, sepse mund të ketë diçka që nuk kam përshkruar qartë.

Gjithashtu, shpreh falënderime për të gjithë kolegët që ndihmuan, konsultuan, testuan, ofruan / dhuruan telefonat për testime. Realisht, shumë njerëz me të cilët kam biseduar për punë, në AsterConfnë çatat dhe emailet. Faleminderit për idetë dhe mendimet.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster