Sonata - Serveri i sigurimit të SIP

Nuk di me çfarë të krahasoj sigurimin. Ndoshta me një mace? Duket e mundur pa të, por me të është pak më mirë. Sidomos nëse funksionon))

Formulimi i problemit:

  1. Dua të konfiguroj telefonat SIP shpejt, lehtë dhe në mënyrë të sigurt. Kur instaloni një telefon, dhe aq më tepër kur e rikonfiguroni atë.
  2. Shumë shitës kanë formatet e tyre të konfigurimit, shërbimet e tyre për gjenerimin e konfigurimeve dhe mënyrat e tyre të mbrojtjes së konfigurimeve. Dhe nuk dua të merrem me të gjithë.
  3. Shumë zgjidhje siguruese, a) janë të fokusuara në një shitës ose një sistem telefonik, b) janë mjaft të vështira për t'u zbatuar, shumë skripta, parametra, brrr...

Lidhur me pikën 3, do të bëj një koment se ka sisteme të shkëlqyera provizionimi për FreePBX, për FusionPBX, për Kazoo, ku shabllonet për telefonat nga shitës të ndryshëm janë të disponueshëm publikisht. Ekzistojnë zgjidhje komerciale ku mund të konfiguroni gjithashtu funksionimin e telefonave nga prodhues të ndryshëm në modulin e furnizimit, për shembull, Yeastar PBX.

Habré është gjithashtu plot me receta se si të vendosni pajisje nga shitës të ndryshëm: kohë, два. Por siç thonë ata, të gjitha sistemet kanë një të metë fatale. Kështu që ne do të bëjmë biçikletën tonë.

formatin tuaj

Siç thonë ata në xkcd, nëse nuk doni të merreni me 14 formate - të dalë me 15. Prandaj, ne përdorim cilësimet e përgjithshme për çdo telefon dhe krijojmë formatin tonë të konfigurimit json.

Diçka si kjo:

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

Pra, në çdo telefon ju duhet të konfiguroni kohën lokale dhe linjat SIP. Gjithçka është e thjeshtë këtu. Mund të shihni më shumë shembuj këtu.

sigurimin e serverit tuaj

Në manualet e prodhuesit zakonisht ka një pikë ku thotë: merrni një csv, shkruani hyrjen-fjalëkalimin-adresën tuaj mac, gjeneroni skedarë duke përdorur skriptin tonë të pronarit, vendosini nën serverin e internetit Apache dhe gjithçka do të jetë mirë.

Paragrafi tjetër i manualit zakonisht ju tregon se mund të kriptoni gjithashtu skedarin e konfigurimit të krijuar.

Por të gjitha këto janë klasike. Qasja moderne me smoothies dhe Twitter thotë se ju duhet të bëni një ueb server të gatshëm që nuk do të jetë aq i fuqishëm sa Apache, por do të bëjë vetëm një gjë të vogël. Gjeneroni dhe dërgoni konfigurime duke përdorur një lidhje.

Le të ndalemi këtu dhe të kujtojmë se pothuajse të gjithë telefonat SIP tani mund të marrin konfigurime përmes http/https, kështu që ne nuk po shqyrtojmë zbatime të tjera (ftp, tftp, ftps). Pastaj, çdo telefon e di adresën e vet MAC. Prandaj, ne do të bëjmë dy lidhje: një personale - bazuar në çelësin e pajisjes, e dyta e përgjithshme, e cila funksionon duke përdorur një kombinim të një token të përbashkët dhe një adrese MAC.

Gjithashtu, nuk do të ndalem në konfigurimin zero, d.m.th. konfigurimi i telefonit nga e para, d.m.th. e fute në rrjet dhe filloi të funksiononte. Jo, në skenarin tim, ju e lidhni atë në rrjet, bëni konfigurimin paraprak (e konfiguroni për të marrë konfigurimin nga serveri provizionues) dhe më pas pini pina colada dhe rikonfiguroni telefonin sipas nevojës përmes ofrimit. Shpërndarja e opsionit 66 është përgjegjësi e serverit DHCP.

Meqë ra fjala, jam lodhur fare duke thënë "sigurim", kështu që fjala u shkurtua në "sigurim", ju lutem mos më shkelmoni.

Dhe një gjë tjetër: serveri ynë provizionues nuk ka një UI, d.m.th. ndërfaqja e përdoruesit. Ndoshta, tani për tani, por jo i sigurt, sepse ... Nuk kam nevojë për të. Por ekziston një API për ruajtjen/fshirjen e cilësimeve, marrjen e një liste të shitësve të mbështetur, modeleve, gjithçka përshkruhet sipas kanuneve të specifikimit të swagger.

Pse API dhe jo UI? Sepse Unë tashmë kam sistemin tim telefonik, pastaj kam një burim kredencialesh, ku më duhet vetëm të marr këto të dhëna, të përpiloj json-in e nevojshëm dhe ta publikoj në serverin e furnizimit. Dhe serveri provizionues, sipas rregullave të specifikuara në skedarin json, do t'i japë pajisjes së kërkuar konfigurimin ose jo nëse pajisja nuk është e saktë ose nuk i plotëson kriteret e specifikuara gjithashtu në këtë json.

Sonata - Serveri i sigurimit të SIP

Kështu doli mikroshërbimi i ofrimit. I thirrur sonatë, kodi burimor është i disponueshëm në GitHub, gjithashtu ekziston imazh i gatshëm doker, shembull i përdorimit të dokerit këtu.

Karakteristikat kryesore:

  • në çdo rast, aksesi i kufizuar në konfigurim sipas kohës, si parazgjedhje 10 minuta. Nëse dëshironi ta bëni konfigurimin sërish të disponueshëm, ripublikoni konfigurimin përsëri.

  • një format për të gjithë shitësit, të gjitha rregullimet hiqen në sonata, dërgoni json të standardizuar, konfiguroni çdo pajisje të disponueshme.

  • të gjitha konfigurimet e dhëna për pajisjet regjistrohen, të gjitha zonat problematike mund të shihen në regjistër dhe gabimet mund të shihen

  • Është e mundur të përdoret një lidhje e përbashkët me një shenjë; çdo telefon merr konfigurimin e tij duke specifikuar adresën mac. Ose një lidhje personale nëpërmjet çelësit.

  • API-të për menaxhimin (menaxhimin) dhe sigurimin e konfigurimeve për telefonat (sigurimi) ndahen sipas porteve

  • Testet. Ishte shumë e rëndësishme për mua të rregulloja formatin e konfigurimit të lëshuar dhe të mbuloja të gjitha situatat e zakonshme të lëshimit të një konfigurimi me teste. Kështu që e gjithë kjo të funksionojë qartë.

Cons:

Deri më tani, enkriptimi nuk është përdorur në asnjë mënyrë brenda Sonata. Ato. sigurisht që mund të filloni të përdorni https duke vendosur nginx përpara sonatës për shembull. Por metodat e pronarit nuk janë përdorur ende. Pse? Projekti është ende i ri, ka lançuar njëqind pajisjet e tij të para. Dhe, sigurisht, mbledh ide dhe reagime. Më tej, për të bërë gjithçka të sigurt, në mënyrë që konfigurimet të mos nuhaten në rrjet, ndoshta ia vlen të shqetësoheni me çelësat e enkriptimit, tls dhe iriqin me to, 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 një administrator të sistemit, një mjet i konsolës është më i rëndësishëm sesa një aplikacion i plotë. Kishte plane për të krijuar një program konsolë, por nuk jam i sigurt nëse është i nevojshëm?

Rezultati?

Një server i vogël dhe i thjeshtë në internet për sigurimin e disa modeleve të telefonit me një API për menaxhim.

Edhe një herë, si duhet të funksionojë kjo?

  1. Instalimi i sonatës.
  2. Ne krijojmë një konfigurim json dhe e publikojmë në sonatë.
  3. Pastaj marrim një lidhje siguruese nga sonata.
  4. Pastaj ne tregojmë këtë lidhje në telefon.
  5. Pajisja po ngarkon konfigurimin

Ekzistojnë vetëm dy hapa në funksionimin e mëvonshëm:

  1. Ne krijojmë një konfigurim json dhe e publikojmë në sonatë
  2. Pajisja po ngarkon konfigurimin

Cilët telefona do të promovohen?

Shitësit Grandstream, Fanvil, Yealink. Konfigurimet brenda shitësit janë pak a shumë të njëjta, por mund të ndryshojnë në varësi të firmuerit - mund të jetë e nevojshme të provoni shtesë.

Çfarë rregullash mund të vendosni?

Nga koha. Ju mund të specifikoni kohën deri në të cilën konfigurimi do të jetë i disponueshëm.
Me adresë mac. Kur dorëzoni konfigurimin përmes lidhjes personale të pajisjes, do të kontrollohet edhe adresa mac.
Me ip. Me adresë IP nga ku është bërë kërkesa.

Si të ndërveproni me Sonata?

Nëpërmjet API, duke bërë kërkesa http. API do të jetë i disponueshëm në instalimin tuaj. Sepse API mbështet specifikimin swagger, mund ta përdorni shërbim online për kërkesat e testimit në API.

Ok shkëlqyeshëm. Gjëra fantastike, si thua ta provosh?

Mënyra më e lehtë është të vendosni një imazh docker bazuar në një depo sonatë-kampion. Depoja përmban udhëzime instalimi.

Po sikur të njoh node.js?

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

A do të ketë një zhvillim Sonata?

Pjesërisht i kam arritur qëllimet e mia. Zhvillimi i mëtejshëm është një çështje e detyrave të mia në temën e automatizimit të konfigurimit të telefonit. Ekziston gjithashtu një mundësi për të zgjeruar konfigurimet për të konfiguruar butonat e telefonit, për të shtuar sigurimin e librit të adresave, ndoshta diçka tjetër, shkruani në komente.

Përmbledhje dhe mirënjohje

Do të jem i lumtur të kem sugjerime/kundërshtime/komente dhe pyetje konstruktive, sepse... Mund të jetë që ai përshkroi diçka në mënyrë të pakuptueshme.

Gjithashtu shpreh mirënjohjen time për të gjithë kolegët e mi që ndihmuan, këshilluan, testuan dhe siguruan/dhuruan telefona për analiza. Në realitet, shumë njerëz me të cilët kam komunikuar në punë janë të përfshirë në projekt në shkallë të ndryshme, AsterConf'e, në biseda dhe email. Faleminderit për idetë dhe mendimet.

Burimi: www.habr.com

Shto një koment