Sonata - strežnik za zagotavljanje SIP

Ne vem, s čim naj primerjam oskrbo. Mogoče z mačko? Zdi se, da je mogoče brez njega, vendar je z njim malo bolje. Še posebej, če deluje))

Formulacija problema:

  1. Želim hitro, enostavno in varno nastaviti SIP telefone. Pri namestitvi telefona, še bolj pa pri ponovni konfiguraciji.
  2. Številni prodajalci imajo svoje formate konfiguracij, lastne pripomočke za generiranje konfiguracij in lastne načine zaščite konfiguracij. In res nočem imeti opravka z vsemi.
  3. Številne rešitve za zagotavljanje, a) so osredotočene na enega prodajalca ali en telefonski sistem, b) so precej okorne za implementacijo, veliko skript, parametrov, brrr...

Glede točke 3 bom podal pripombo, da obstajajo odlični sistemi zagotavljanja za FreePBX, za FusionPBX, za Kazoo, kjer so javno dostopne predloge za telefone različnih proizvajalcev. Obstajajo komercialne rešitve, kjer lahko v modulu za zagotavljanje nastavite tudi delovanje telefonov različnih proizvajalcev, na primer Yeastar PBX.

Habré je tudi poln receptov za nastavitev naprav različnih proizvajalcev: čas, два. A kot pravijo, imajo vsi sistemi usodno napako. Torej bomo naredili svoje kolo.

svoj format

Kot pravijo v xkcd, če se ne želite ukvarjati s 14 formati - priti do 15. Zato uporabljamo splošne nastavitve za kateri koli telefon in naredimo lastno konfiguracijsko obliko json.

Nekaj ​​podobnega:

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

Torej, v katerem koli telefonu morate konfigurirati lokalni čas in linije SIP. Tukaj je vse preprosto. Več primerov si lahko ogledate tukaj.

lastno zagotavljanje strežnika

V priročnikih proizvajalca je običajno točka, kjer piše: vzemite csv, zapišite svojo prijavo-geslo-mac-naslov, ustvarite datoteke z našo lastniško skripto, jih postavite pod spletni strežnik Apache in vse bo v redu.

Naslednji odstavek priročnika običajno pove, da lahko ustvarjeno konfiguracijsko datoteko tudi šifrirate.

Ampak to so vse klasike. Sodoben pristop s smoothiji in Twitterjem pravi, da je treba narediti že pripravljen spletni strežnik, ki ne bo tako zmogljiv kot Apache, ampak bo delal samo eno malenkost. Ustvarite in pošljite konfiguracije s povezavo.

Ustavimo se tukaj in ne pozabimo, da lahko skoraj vsi telefoni SIP zdaj prejemajo konfiguracije prek http/https, zato ne razmišljamo o drugih izvedbah (ftp, tftp, ftps). Nato vsak telefon pozna svoj naslov MAC. Zato bomo naredili dve povezavi: eno osebno - na podlagi ključa naprave, drugo splošno, ki deluje s kombinacijo skupnega žetona in naslova MAC.

Prav tako se ne bom ukvarjal z zero-config, tj. nastavitev telefona iz nič, tj. priključil si ga v omrežje in je začel delovati. Ne, v mojem primeru ga priključite na omrežje, opravite predhodno nastavitev (nastavite ga tako, da prejme konfiguracijo s strežnika za zagotavljanje), nato pa popijete pina colado in po potrebi znova konfigurirate telefon prek zagotavljanja. Za distribucijo možnosti 66 je odgovoren strežnik DHCP.

Mimogrede, popolnoma sem utrujen od besed "oskrba", zato je bila beseda skrajšana na "oskrba", prosim, ne brcajte me.

In še nekaj: naš strežnik za zagotavljanje nima uporabniškega vmesnika, tj. Uporabniški vmesnik. Zaenkrat mogoče, vendar nisem prepričan, ker ... Ne potrebujem ga. Obstaja pa API za shranjevanje/brisanje nastavitev, pridobivanje seznama podprtih prodajalcev, modelov, vse je opisano v skladu s kanoni specifikacije swagger.

Zakaj API in ne UI? Ker Že imam svoj telefonski sistem, potem imam vir poverilnic, kjer moram samo vzeti te podatke, sestaviti potreben json in ga objaviti na strežniku za zagotavljanje. Strežnik za oskrbo bo v skladu s pravili, določenimi v datoteki json, dal zahtevani napravi njeno konfiguracijo ali ne, če naprava ni pravilna ali ne izpolnjuje meril, prav tako navedenih v tem json.

Sonata - strežnik za zagotavljanje SIP

Tako se je izkazala mikrostoritev za zagotavljanje. Poklican sonata, izvorna koda je na voljo na GitHubu, obstaja tudi pripravljena slika dockerja, primer uporabe dockerja tukaj.

Ključne funkcije:

  • v vsakem primeru omejen dostop do konfiguracije po času, privzeto 10 minut. Če želite, da je konfiguracija znova na voljo, ponovno objavite konfiguracijo.

  • en format za vse prodajalce, vse prilagoditve so odstranjene v sonati, pošljete standardiziran json, konfigurirate morebitno razpoložljivo opremo.

  • beležijo se vse konfiguracije, izdane napravam, vsa problematična področja si lahko ogledate v dnevniku in vidite napake

  • Možna je uporaba ene skupne povezave z žetonom; vsak telefon prejme svojo konfiguracijo z navedbo naslova mac. Ali osebna povezava preko ključa.

  • API-ji za upravljanje (management) in zagotavljanje konfiguracij telefonom (provisioning) so razdeljeni po vratih

  • Testi. Zame je bilo zelo pomembno popraviti format izdane konfiguracije in s testi pokriti vse običajne situacije izdajanja konfiguracije. Tako, da vse to deluje jasno.

Cons:

Zaenkrat se šifriranje znotraj Sonate ne uporablja na noben način. Tisti. seveda lahko začnete uporabljati https tako, da na primer postavite nginx pred sonato. Toda lastniške metode še niso bile uporabljene. Zakaj? Projekt je še mlad, lansiral je svojih prvih sto naprav. In seveda zbiram ideje in povratne informacije. Dalje, da bo vse varno, da se konfigov ne da prevohati po omrežju, se verjetno splača pomučiti s šifrirnimi ključi, tls in ježkom z njimi, ampak to bo nadaljevanje.

Pomanjkanje uporabniškega vmesnika. Morda je to pomembna pomanjkljivost za končnega uporabnika, toda za sistemskega skrbnika je konzolni pripomoček pomembnejši od polnopravne aplikacije. Obstajali so načrti za izdelavo pripomočka za konzolo, vendar nisem prepričan, ali je potreben?

Kakšen je rezultat?

Majhen in preprost spletni strežnik za zagotavljanje več modelov telefonov z API-jem za upravljanje.

Še enkrat, kako naj bi to delovalo?

  1. Namestitev sonate.
  2. Ustvarimo konfiguracijo json in jo objavimo v sonati.
  3. Nato od sonate prejmemo povezavo za zagotavljanje.
  4. Nato to povezavo navedemo v telefonu.
  5. Naprava nalaga konfiguracijo

V nadaljnjem delovanju sta samo dva koraka:

  1. Ustvarimo konfiguracijo json in jo objavimo v sonati
  2. Naprava nalaga konfiguracijo

Kateri telefoni bodo promovirani?

Prodajalci Grandstream, Fanvil, Yealink. Konfiguracije znotraj prodajalca so bolj ali manj enake, vendar se lahko razlikujejo glede na vdelano programsko opremo - morda bo treba dodatno testirati.

Kakšna pravila lahko postavite?

Po času. Določite lahko čas, do katerega bo konfiguracija na voljo.
Po mac naslovu. Pri pošiljanju konfiguracije prek osebne povezave naprave bo preverjen tudi naslov mac.
Po ip. Po naslovu IP, s katerega je bila vložena zahteva.

Kako komunicirati s sonato?

Prek API-ja, izdelava zahtev http. API bo na voljo v vaši namestitvi. Ker API podpira specifikacijo swagger, lahko uporabite spletni pripomoček za testne zahteve za API.

OK super. Super stvar, kaj če poskusiš?

Najlažji način je razmestitev docker slike, ki temelji na repozitoriju sonata-vzorec. Repozitorij vsebuje navodila za namestitev.

Kaj pa, če poznam node.js?

Če imate izkušnje z uporabo JavaScripta, boste hitro ugotovili, kako vse tukaj deluje.

Bo prišlo do razvoja Sonate?

Svoje cilje sem delno dosegel. Nadaljnji razvoj je stvar mojih nalog na temo avtomatske nastavitve telefona. Obstaja tudi možnost razširitve konfiguracij za konfiguracijo telefonskih gumbov, dodajanje oskrbe imenika, morda kaj drugega, napišite v komentarje.

Povzetek in zahvale

Vesela bom konstruktivnih predlogov/nasprotovanja/komentarjev in vprašanj, ker... Lahko se zgodi, da je opisal kaj nerazumljivo.

Zahvaljujem se tudi vsem sodelavcem, ki so pomagali, svetovali, testirali in posredovali/donirali telefone za testiranje. V resnici je veliko ljudi, s katerimi sem komuniciral v službi, v različni meri vključenih v projekt, AsterConf'e, v klepetih in e-pošti. Hvala za ideje in misli.

Vir: www.habr.com

Dodaj komentar