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:
- Želim brzo, jednostavno i sigurno podešavati SIP telefone. Pri instalaciji telefona, a naročito prilikom njegove rekonfiguracije.
- 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.
- 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 , , , 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: , . 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 — . 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 .
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.

Ovo je mikroservis provisioning koji je nastao. Zove se , izvorni kod dostupan je na github-u, također postoji , primjer korištenja dockera .
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?
- Instaliramo sonata.
- Formiramo json-konfiguraciju i objavljujemo je u sonata.
- Zatim dobivamo od sonate poveznicu za provisioning.
- Zatim tu poveznicu navedemo u telefonskom aparatu.
- Aparat preuzima konfiguraciju.
U daljnjoj upotrebi samo dva koraka:
- Formiramo json-konfiguraciju i objavljujemo je u sonata.
- 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 za testne zahtjeve prema API-u.
Ok, odlično. Stvar je super, kako probati?
Najlakše je pokrenuti docker sliku na temelju repozitorija . 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 u chatovima i emailovima. Hvala na idejama i mislima.
Izvor: habr.com
