Sonata — SIP provisioning server

Ne znam s čime da uporedim provisioning. Možda sa mačkom? Čini se da može i bez nje, ali s njom je malo bolje. Pogotovo ako ona radi ))

Postavljanje problema:

  1. Želim brzo, jednostavno i sigurno podešavati SIP telefone. Pri instalaciji telefona, a naročito prilikom njegove rekonfiguracije.
  2. Mnogi proizvođači imaju svoje formate konfiguracija, svoje alate za generisanje konfiguracija, svoje načine zaštite konfiguracija. A ne žele mi se previše gnjaviti s svakim.
  3. Mnoga rešenja za provisioning, a) orijentisana su na jednog proizvođača ili jedan telefonski sistem, b) dovoljno su glomazno realizovana, gomila skripti, parametara, br-r...

Po tački 3 napraviću komentar da postoje odlični sistemi provižna za FreePBX, za FusionPBX, za Kazoo, gde su javno dostupni šabloni za telefone različitih proizvođača. Postoje komercijalna rešenja, gde se takođe može podesiti u modulu provižna rad telefona različitih proizvođača, na primer, ACB Yeastar.

Na Habr-u takođe ima puno recepata kako podesiti uređaje različitih proizvođača: jednom, dvaput. Ali kao što se kaže, sve sisteme imaju fatalne nedostatke. Zato ćemo napraviti svoj bicikl.

svoj format

Kao što se kaže u xkcd, ne želiš da se baviš s 14 formata — izmisli 15-ti. Zato koristimo zajedničke postavke za bilo koji telefon i napravit ćemo svoj json-format konfiguracije.

Otprilike ovakav:

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

Dakle, u bilo kojem telefonu je potrebno podesiti lokalno vreme, sip-linije. Tu je sve jednostavno. Još primere možete pogledati ovdje.

svoj server provižna

U uputstvima proizvođača obično postoji tačka gde se govori: uzmite csv, upišite logine-lozinke-mac-adresu, našim firmiranim skriptom generišite fajlove, stavite ih pod webserver Apache i biće dobro.

U sledećoj tački uputstva obično se objašnjava da se može i enkriptovati generisani fajl konfiguracije.

Ali to je sve klasika. Savremeni pristup sa smutijima i Twitterom sugeriše da treba napraviti gotov webserver, koji neće biti tako moćan kao Apache, već će raditi samo jednu malu stvar. Formirati i davati konfiguracije po linku.

Ovdje ćemo se zaustaviti i prisjetiti se da gotovo svi SIP telefoni sada mogu dobiti konfiguracije putem http/https, stoga ne razmatramo druge realizacije (ftp, tftp, ftps). Svaki telefon poznaje svoju MAC adresu. Stoga ćemo napraviti dvije veze: jednu osobnu — prema ključi uređaja, a drugu zajedničku, koja radi na temelju zajedničkog tokena i MAC adrese.

Također se neću zadržavati na zero-config-u, tj. postavci telefona „s nule“, tj. jednostavno ga priključite u mrežu i on odmah funkcioniše. Ne, u mom scenariju, priključite ga u mrežu, izvršite preliminarnu konfiguraciju (postavite da prima konfiguraciju s provisioning servera), a zatim pijete piña colada i ponovo postavljate telefon kako treba putem provisiona. Pružanje opcije 66 — briga DHCP servera.

Usput, potpuno sam iscrpljen govoreći „provisioning“, pa se riječ skratila na „provision“, molim vas, ne udarajte me nogama.

I još to: naš provisioning server nema UI, tj. korisničkog sučelja. Možda jednog dana, ali nisam siguran, jer mi nije potreban. Ipak, postoje API za spremanje/brisanje postavki, dobivanje popisa podržanih dobavljača, modela, sve je opisano prema standardima swagger specifikacije.

Zašto API, a ne UI? Budući da već imam svoj telefonski sustav, imam izvor vjerodajnica, gdje mi je dovoljno uzeti te podatke, sastaviti potrebni json i objaviti na provisioning serveru. A server provisioning prema pravilima navedenim u json datoteci izdat će potrebnom uređaju njegovu konfiguraciju ili je neće izdati, ako uređaj nije ispravan ili ne ispunjava kriterije navedene također u ovom json-u.

Sonata — SIP provisioning server

Ovo je mikroservis provisioning koji je nastao. Zove se sonata, izvorni kod dostupan je na github-u, također postoji gotova docker slika, primjer korištenja dockera ovdje.

Ključne značajke:

  • u svakom slučaju ograničen pristup konfiguraciji prema vremenu, prema zadanoj postavci 10 minuta. Ako želite ponovno učiniti konfiguraciju dostupnom — ponovo objavite konfiguraciju.

  • jedan format za sve dobavljače, sva prilagodba je uklonjena u sonata, šaljete standardizirani json, konfigurirate svu dostupnu opremu.

  • sve izdate konfiguracije uređajima se bilježe, sva problematična mjesta mogu se pregledati u registru i vidjeti greške.

  • može se koristiti jedna zajednička poveznica s tokenom, svaki telefon dobiva svoju konfiguraciju navodeći mac-adresu. Ili osobnu poveznicu po ključu.

  • API za upravljanje (management) i isporuku konfiguracija telefonima (provisioning) odvojeni su po portovima.

  • Testovi. Za mene je bilo jako važno fiksirati format isporučene konfiguracije i pokriti sve uobičajene situacije isporuke konfiguracije testovima. Da bi to sve radilo kako treba.

Mane:

Trenutno se ne koristi enkripcija u okviru sonata. Možete, naravno, početi koristiti https, postavljanjem, na primjer, nginxa ispred sonate. Međutim, vlasničke metode još uvijek nisu aktivirane. Zašto? Projekt je još mlad, zapravo je pružio jedva prvu stotinu uređaja. I, naravno, sakupljam ideje, povratne informacije. Dalje, kako bi sve bilo sigurno, da se konfiguracije ne mogu presresti u mreži, vjerojatno bi trebali razmisliti o enkripcijskim ključevima, tls-u i tome slično, ali to će biti nastavak.

Nedostatak UI. Možda je to značajan minus za krajnjeg korisnika, ali za sistem administratorsa važnija je konzolna alatka nego potpuno razvijena aplikacija. Izraditi konzolnu alatku bilo je u planu, ali nisam siguran da li je potrebna?

Što na kraju?

Mali i jednostavni web poslužitelj za provisioning nekoliko modela telefona s API-jem za upravljanje.

Još jednom, kako to treba raditi?

  1. Instaliramo sonata.
  2. Formiramo json-konfiguraciju i objavljujemo je u sonata.
  3. Zatim dobivamo od sonate poveznicu za provisioning.
  4. Zatim tu poveznicu navedemo u telefonskom aparatu.
  5. Aparat preuzima konfiguraciju.

U daljnjoj upotrebi samo dva koraka:

  1. Formiramo json-konfiguraciju i objavljujemo je u sonata.
  2. Aparat preuzima konfiguraciju.

Koji telefoni se provisioniraju?

Proizvođači Grandstream, Fanvil, Yealink. Konfiguracije unutar proizvođača su više-manje jednake, ali mogu se razlikovati ovisno o firmwareu — možda će biti potrebno dodatno testirati.

Koja pravila se mogu postaviti?

Prema vremenu. Možete odrediti vrijeme do kojeg će konfiguracija biti dostupna.
Prema mac-adresi. Prilikom isporuke konfiguracije putem osobne poveznice, također će biti provjerena mac-adresa uređaja.
Prema ip-u. Prema ip-adresi s koje je napravljen zahtjev.

Kako komunicirati s sonata?

Putem API-a, šaljući http zahtjeve. API će biti dostupan u vašoj instalaciji. Budući da API podržava swagger specifikaciju, možete iskoristiti online alat za testne zahtjeve prema API-u.

Ok, odlično. Stvar je super, kako probati?

Najlakše je pokrenuti docker sliku na temelju repozitorija sonata-sample. U repozitoriju se nalazi uputstvo za instalaciju.

А если знаю node.js?

Ako imate iskustva s korištenjem JavaScript-a, brzo ćete shvatiti kako sve ovdje funkcionira.

Hoće li biti daljnjeg razvoja sonate?

Djelomično sam postigao svoje ciljeve. Daljnji razvoj je pitanje mojih zadataka vezanih uz automatizaciju podešavanja telefona. Postoji još mogućnost proširenja konfiguracija za podešavanje tipki telefona, dodavanje provizijskih adresara, možda još nešto, javite u komentarima.

Životopis i zahvalnice

Bit ću zahvalan na konstruktivnim prijedlozima / prigovorima / komentarima i pitanjima, jer može biti da sam nešto nejasno opisao.

Također se zahvaljujem svim kolegama koji su pomagali, savjetovali, testirali, te pružili / poklonili telefone za testiranje. Stvarno, na projektu je u različitom obimu sudjelovalo mnogo ljudi s kojima sam komunicirao na poslu, u AsterConfu chatovima i emailovima. Hvala na idejama i mislima.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster