Sonata - SIP server za pružanje usluga

Ne znam sa čime da uporedim obezbeđivanje. Možda sa mačkom? Čini se da je moguće i bez toga, ali sa njim je malo bolje. Pogotovo ako radi))

Formulacija problema:

  1. Želim da postavim SIP telefone brzo, jednostavno i bezbedno. Prilikom instaliranja telefona, a još više kada ga rekonfigurirate.
  2. Mnogi dobavljači imaju svoje konfiguracijske formate, vlastite uslužne programe za generiranje konfiguracija i vlastite načine zaštite konfiguracija. I ne želim da se bavim svima.
  3. Mnoga rješenja za obezbjeđivanje, a) su fokusirana na jednog dobavljača ili jedan telefonski sistem, b) prilično su glomazna za implementaciju, puno skripti, parametara, brrr...

Što se tiče tačke 3, napomenut ću da postoje odlični sistemi obezbjeđenja za FreePBX, za FusionPBX, za Kazoo, gdje su predlošci za telefone različitih proizvođača javno dostupni. Postoje komercijalna rješenja gdje također možete konfigurirati rad telefona različitih proizvođača u modulu za opskrbu, na primjer, Yeastar PBX.

Habré je također pun recepata o tome kako postaviti uređaje raznih proizvođača: puta, два. Ali kako kažu, svi sistemi imaju fatalnu manu. Tako da ćemo napraviti svoj vlastiti bicikl.

svoj format

Kako kažu u xkcd-u, ako ne želite da se bavite 14 formata - smisli 15. Stoga koristimo opća podešavanja za bilo koji telefon i pravimo vlastiti json konfiguracijski format.

Ovako nešto:

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

Dakle, u svakom telefonu morate konfigurirati lokalno vrijeme i SIP linije. Ovdje je sve jednostavno. Možete vidjeti više primjera ovdje.

obezbjeđivanje vašeg vlastitog servera

U priručnicima proizvođača obično postoji tačka u kojoj piše: uzmite csv, zapišite svoju login-password-mac-adresu, generirajte datoteke koristeći našu vlasničku skriptu, stavite ih pod Apache web server i sve će biti u redu.

Sljedeći paragraf priručnika vam obično govori da također možete šifrirati generiranu konfiguracijsku datoteku.

Ali sve su to klasici. Moderan pristup sa smoothiejima i Twitterom kaže da morate napraviti gotov web server koji neće biti moćan kao Apache, ali će raditi samo jednu malu stvar. Generirajte i pošaljite konfiguracije koristeći vezu.

Zaustavimo se ovdje i zapamtimo da skoro svi SIP telefoni sada mogu primati konfiguracije putem http/https, tako da ne razmatramo druge implementacije (ftp, tftp, ftps). Zatim, svaki telefon zna svoju MAC adresu. Stoga ćemo napraviti dvije veze: jednu ličnu - na osnovu ključa uređaja, drugu opću, koja radi koristeći kombinaciju zajedničkog tokena i MAC adrese.

Takođe, neću se zadržavati na zero-config, tj. postavljanje telefona od nule, tj. uključili ste ga u mrežu i počeo je raditi. Ne, u mom scenariju, priključite ga na mrežu, izvršite preliminarno podešavanje (podesite ga da prima konfiguraciju sa servera za proviziju), a zatim popijete pina coladu i ponovo konfigurišete telefon po potrebi kroz proviziju. Opcija distribucije 66 je odgovornost DHCP servera.

Inače, potpuno sam umoran od izgovaranja "provisioning", pa je riječ skraćena u "provision", molim vas nemojte me šutati.

I još nešto: naš server za proviziju nema UI, tj. korisnički interfejs. Možda, za sada, ali nisam siguran, jer... Ne treba mi. Ali postoji API za spremanje/brisanje postavki, dobivanje liste podržanih proizvođača, modela, sve je opisano prema kanonima specifikacije swaggera.

Zašto API, a ne UI? Jer Već imam svoj telefonski sistem, onda imam izvor vjerodajnica, gdje samo trebam uzeti ove podatke, kompajlirati potreban json i objaviti ga na serveru za proviziju. I server za proviziju, prema pravilima navedenim u json datoteci, dat će potrebnom uređaju njegovu konfiguraciju ili je neće dati ako uređaj nije ispravan ili ne ispunjava kriterije navedene u ovom json-u.

Sonata - SIP server za pružanje usluga

Ovako je ispao mikroservis za obezbjeđivanje. Called sonata, izvorni kod je dostupan na Githubu, postoji i spremna docker slika, primjer upotrebe dockera ovdje.

Ključne karakteristike:

  • u svakom slučaju, ograničen pristup konfiguraciji po vremenu, po defaultu 10 minuta. Ako želite da konfiguraciju ponovo učinite dostupnom, ponovo objavite konfiguraciju.

  • jedan format za sve dobavljače, sva podešavanja se uklanjaju u sonati, šaljete standardizovani json, konfigurišete svu dostupnu opremu.

  • sve konfiguracije izdate uređajima se evidentiraju, sva problematična područja se mogu vidjeti u dnevniku i mogu se vidjeti greške

  • Moguće je koristiti jedan zajednički link sa tokenom; svaki telefon prima svoju konfiguraciju navođenjem mac adrese. Ili lični link preko ključa.

  • API-ji za upravljanje (upravljanje) i obezbjeđivanje konfiguracija za telefone (provisioning) podijeljeni su po portovima

  • Testovi. Bilo mi je jako važno da popravim format izdane konfiguracije i pokrijem sve uobičajene situacije izdavanja konfiga testovima. Tako da sve ovo radi jasno.

Cons:

Do sada se šifriranje nije koristilo ni na koji način u Sonati. One. naravno možete početi koristiti https stavljanjem nginx ispred sonata na primjer. Ali vlasničke metode još nisu korištene. Zašto? Projekat je još mlad, lansirao je svojih prvih sto uređaja. I, naravno, prikupljam ideje i povratne informacije. Dalje, kako bi sve bilo sigurno, tako da se konfigovi ne bi mogli nanjušiti na mreži, vjerovatno se isplati pozabaviti se ključevima za šifriranje, tls-om i ježom s njima, ali ovo će biti nastavak.

Nedostatak korisničkog sučelja. Možda je ovo značajan nedostatak za krajnjeg korisnika, ali za sistemskog administratora, uslužni program konzole je važniji od punopravne aplikacije. Bilo je planova da se napravi uslužni program za konzolu, ali nisam siguran da li je potreban?

Šta je na kraju?

Mali i jednostavan web server za opskrbu nekoliko modela telefona s API-jem za upravljanje.

Još jednom, kako bi ovo trebalo da funkcioniše?

  1. Instaliranje sonate.
  2. Kreiramo json konfiguraciju i objavljujemo je u sonati.
  3. Zatim dobijamo vezu za obezbjeđivanje od sonate.
  4. Zatim ukazujemo na ovu vezu u telefonu.
  5. Uređaj učitava konfiguraciju

Postoje samo dva koraka u nastavku rada:

  1. Kreiramo json konfiguraciju i objavljujemo je u sonati
  2. Uređaj učitava konfiguraciju

Koji telefoni će biti promovisani?

Dobavljači Grandstream, Fanvil, Yealink. Konfiguracije unutar dobavljača su manje-više iste, ali se mogu razlikovati ovisno o firmveru - možda će biti potrebno dodatno testirati.

Koja pravila možete postaviti?

Vremenom. Možete odrediti vrijeme do kojeg će konfiguracija biti dostupna.
Po mac adresi. Prilikom slanja konfiguracije putem lične veze uređaja, provjerit će se i mac adresa.
By ip. Po IP adresi sa koje je zahtjev upućen.

Kako komunicirati sa sonatom?

Preko API-ja, pravljenje http zahtjeva. API će biti dostupan u vašoj instalaciji. Jer API podržava swagger specifikaciju, koju možete koristiti online utility za zahtjeve za testiranje API-ju.

OK, super. Sjajna stvar, kako bi bilo da probate?

Najlakši način je da postavite docker sliku zasnovanu na spremištu sonatni uzorak. Repozitorijum sadrži uputstva za instalaciju.

Šta ako znam node.js?

Ako imate iskustva u korištenju JavaScripta, brzo ćete shvatiti kako ovdje sve funkcionira.

Hoće li biti Sonata razvoja?

Djelomično sam ostvario svoje ciljeve. Dalji razvoj je stvar mojih zadataka na temu automatizacije podešavanja telefona. Postoji i mogućnost proširenja konfiguracija za konfigurisanje dugmadi telefona, dodavanje provizije adresara, možda nešto drugo, pišite u komentarima.

Sažetak i priznanja

Biće mi drago da imam konstruktivne sugestije/primedbe/komentare i pitanja, jer... Moguće je da je nešto nerazumljivo opisao.

Također izražavam zahvalnost svim mojim kolegama koji su pomogli, savjetovali, testirali i obezbijedili/donirali telefone za testiranje. U stvarnosti, mnogi ljudi sa kojima sam komunicirao na poslu su uključeni u projekat u različitom stepenu, AsterConf'e, u chatovima i e-mailovima. Hvala na idejama i razmišljanjima.

izvor: www.habr.com

Dodajte komentar