Sonata — serveri i provizionit SIP

Nuk e di se me çfarë ta krahasoj provisioning. Ndoshta me një mace? Në dukje, mund të bëhet edhe pa të, por me të është pak më mirë. Sidomos nëse ajo punon ))

Formulimi i problemit:

  1. Dua të konfiguroj telefonat SIP shpejt, lehtësisht, dhe sigurt. Gjatë instalimit të telefonit dhe sidomos gjatë rikonstruksionit të tij.
  2. Shumë ofrues kanë formatet e tyre të konfiguratave, utils për të gjeneruar konfiguratat e tyre, mënyra të tyre për të mbrojtur konfiguratat. Dhe nuk është shumë kënaqësi të merresh me secilin prej tyre.
  3. Shumë zgjidhje për provisioning, a) janë të orientuara ndaj një ofruesi ose një sistemi telefoni, b) realizohen mjaft të rëndë, shumë skripte, parametra, brrr


Për pikën 3, do të jap një koment, që ka sisteme të shkëlqyera provizioni për FreePBX, për FusionPBX, për Kazoo, ku ka modele për telefonat e ofruesve të ndryshëm të aksesueshme publikisht. Ka gjithashtu zgjidhje komerciale, ku gjithashtu mund të konfiguroni në modulin e provizionit funksionimin e telefonave nga prodhues të ndryshëm, për shembull, PBX Yeastar.

Në Habr gjithashtu ka shumë receta për si të konfigurosh paisjet e ofruesve të ndryshëm: një herë, dy herë. Por siç thonë, të gjitha sistemet kanë një mangësi 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 — mendo 15-tin. Prandaj, ne pĂ«rdorim cilĂ«simet e pĂ«rbashkĂ«ta pĂ«r çdo telefon dhe do tĂ« krijojmĂ« formatin tonĂ« json pĂ«r konfig.

Dikush si ky:

{
   "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ë konfiguroni orën lokale dhe linjat sip. Këtu gjithçka është e thjeshtë. Mund të shihni edhe shembuj këtu.

serverin tonë të provizionit

Në manualet e prodhuesve zakonisht ka një pikë ku thonë: merrni csv, shkruani atje emrin e përdoruesit-password-MAC-adresën, me skriptin tonë të markës krijoni skedarët, vendosni ata nën serverin e uebit Apache dhe do të jetë mirë.

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

Por kjo është e gjitha klasike. Qasja moderne me smoothie dhe twitter tregon se duhet të krijohet një server i gatshëm për web, i cili nuk do të jetë kaq i fuqishëm si Apache, por do të bëjë një gjë të vogël. Të formojë dhe të dorëzojë konfiguratat në link.

Këtu ndalemi dhe kujtojmë se pothuajse të gjithë telefonat SIP tani mund të marrin konfigurata përmes http/https, prandaj realizime të tjera (ftp, tftp, ftps) nuk shqyrtohen. Pastaj, çdo telefon e njeh adresën e tij MAC. Prandaj, do të krijojmë dy lidhje: një personale - nëpërmjet çelësit të pajisjes, tjetra e përgjithshme që punon me kombinimin e çelësit të përgjithshëm dhe adresës MAC.

Gjithashtu, nuk do të ndalem në zero-config, pra, konfigurimin e telefonit "nga fillimi", pra ju e vendosni atë në rrjet dhe ai papritmas fillon të punojë. Jo, në skenarin tim, ju e vendosni në rrjet, bëni konfigurimin paraprak (konfiguroni atë për të marrë konfigurimin nga serveri i provizionit), dhe pastaj pini një pinacolada dhe ri-konfiguroni telefonin siç duhet përmes provizionit. Të shpërndash Opsion 66 është përgjegjësia e serverit DHCP.

Për më tepër, jam vërtet i lodhur të them "provisioning", prandaj fjala u shkurtua në "provizion", mos më shqetësoni, ju lutem.

Dhe gjithashtu: serveri ynë i provizionit nuk ka UI, pra, ndërfaqe përdoruesi. Ndoshta për momentin, por nuk jam i sigurt, sepse nuk më nevojitet. Por ka një API për ruajtjen/fshirjen e konfigurimeve, marrjen e listës së ofruesve të mbështetur, modeleve, gjithçka e përshkruar sipas kanonëve të specifikimit swagger.

Pse API dhe jo UI? Sepse unë tashmë kam sistemin tim të telefonisë, kështu që kam një burim të kredencialeve, ku mjafton të marr këto të dhëna, të kompozoj json të nevojshëm dhe ta publikoj në serverin e provizionit. Dhe pastaj serveri i provizionit, sipas rregullave të përcaktuara në skedarin json, do t'i japë pajisjes përkatëse konfigurimin e saj ose nuk do ta japë, nëse pajisja nuk është e saktë ose nuk i përmbahet kriterieve, të cilat gjithashtu janë të përcaktuara në këtë json.

Sonata — serveri i provizionit SIP

Kështu që, ky është një mikro-shërbim provizionin. E quajtur sonata, kodi burimor është i disponueshëm në GitHub, ka gjithashtu një imazh docker të gatshëm, shembuj përdorimi të dockerit këtu.

Veçoritë kryesore:

  • nĂ« çdo rast, akses i kufizuar nĂ« konfigurim nĂ« kohĂ«, me default 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, tĂ« gjitha pĂ«rshtatjet janĂ« hequr nĂ« sonata, dĂ«rgoni njĂ« json tĂ« standardizuar, konfiguroni çdo pajisje tĂ« disponueshme.

  • tĂ« gjitha konfiguratat e lĂ«shuara ndaj pajisjeve regjistrohen, tĂ« gjitha vendet problematike mund tĂ« shqyrtohen nĂ« log dhe tĂ« shihen gabimet.

  • Ă«shtĂ« e mundur pĂ«rdorimi i njĂ« lidhjeje tĂ« vetme me token, çdo telefon merr konfigurimin e vet, duke treguar 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.

  • Teste. Ishte shumĂ« e rĂ«ndĂ«sishme pĂ«r mua tĂ« regjistroja formatin e konfigurimit qĂ« jepet dhe tĂ« mbulonim tĂ« gjitha situatat e zakonshme tĂ« dhĂ«nies sĂ« konfigurimit me teste. KĂ«shtu qĂ« gjithçka funksionon qartĂ«.

Disavantazhet:

Aktualisht nuk përdoret asnjë 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 mënyrat e markës deri tani nuk janë angazhuar. Pse? Projekti është ende i ri, ka provizionuar ndoshta një qind pajisje. Dhe sigurisht, po mblidhja ide, feedback. Më vonë, për të bërë gjithçka në mënyrë të sigurt, që konfigurimet të mos kenë mundësi të shihen në rrjet, ndoshta duhet të shqetësohemi për çelësat e enkriptimit, tls dhe të tjerë, por kjo do të jetë një vazhdim.

Mungesa e UI. Ndoshta, ky është një disavantazh i rëndësishëm për përdoruesin përfundimtar, por për administratorin e sistemit ndoshta është më e rëndësishme një utilitar konsolë se sa një aplikacion i plotë. Bëja një utilitar konsolë ishte në planet, por nuk jam i sigurt nëse është e nevojshme?

ÇfarĂ« doli pĂ«rfundimisht?

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

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

  1. Instalojmë sonata.
  2. Formojmë konfigurimin json dhe e publikojmë në sonata.
  3. Pastaj marrim nga sonata lidhjen për provizionim.
  4. Më pas këtë lidhje e vendosim në aparatin telefonik.
  5. Aparati merr konfigurimin

në përdorimin e mëpasshëm vetëm dy hapa:

  1. Formojmë konfigurimin json dhe e publikojmë në sonata.
  2. Aparati merr konfigurimin

Cilat telefona provizionohen?

VendorĂ«t Grandstream, Fanvil, Yealink. Konfigurimet brenda çfarĂ«do vendori janĂ« mĂ« shumĂ«-mĂ« pak tĂ« njĂ«jta, por mund tĂ« ndryshojnĂ« nĂ« varĂ«si tĂ« versionit tĂ« firmware — ndoshta do tĂ« jetĂ« e nevojshme tĂ« bĂ«het njĂ« testim shtesĂ«.

Cilat rregulla mund të përcaktohen?

Për kohën. Mund të tregoni një kohë deri në të cilën konfigurimi do të jetë i disponueshëm.
Për adresën mac. Kur jepet konfigurimi përmes një lidhjeje personale do të kontrollohet gjithashtu adresa mac.
Për ip. Sipër adresës ip nga e cila është bërë kërkesa.

Si të bashkëveproni me sonata?

Përmes API, duke bërë kërkesa http. API do të jetë në dispozicion në instaluar tuaj. Duke qenë se API mbështet specifikimin e swagger, mund të përdorni mjetin online për kërkesa testuese ndaj API.

Mirë, shkëlqyer. Një gjë interesante, si të provoj?

Më e lehta është të zhvilloni imazhin docker mbi bazën e depozitës sonata-sample. Në depozitë ka një udhëzues për instalimin.

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

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

Do të ketë zhvillim të sonata?

Pjesërisht unë arrita disa nga qëllimet e mia. Zhvillimi i ardhshëm është një çështje e detyrave të mia në lidhje me automatizimin e konfigurimit të telefonave. Ka ende mundësi për të zgjeruar konfigurimet për të përcaktuar butonat e telefonit, për të shtuar provizion adresash, ndoshta diçka tjetër, shkruani në komentet.

Përmbledhje dhe falënderime

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

Gjithashtu dĂ«shiroj tĂ« falĂ«nderoj tĂ« gjithĂ« kolegĂ«t, qĂ« ndihmuan, konsultuan, testuan, dhuruan telefonat pĂ«r prova. Realisht, shumĂ« njerĂ«z, me tĂ« cilĂ«t kam komunikuar nĂ« punĂ«, nĂ« AsterConf‘e, nĂ« biseda dhe email. Faleminderit pĂ«r idetĂ« dhe mendimet.

Burimi: habr.com

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