Sonata – SIP-i varustamise server

Ma ei tea, millega varundust võrrelda. Äkki kassiga? Tundub, et see on ilma selleta võimalik, kuid sellega on see natuke parem. Eriti kui see töötab))

Probleemi sõnastus:

  1. Soovin seadistada SIP-telefone kiiresti, lihtsalt ja turvaliselt. Telefoni paigaldamisel ja veelgi enam ümberseadistamisel.
  2. Paljudel müüjatel on oma konfiguratsioonivormingud, oma utiliidid konfiguratsioonide loomiseks ja oma viisid konfiguratsioonide kaitsmiseks. Ja ma ei taha tegelikult kõigiga suhelda.
  3. Paljud varustamislahendused, a) on keskendunud ühele müüjale või ühele telefonisüsteemile, b) on üsna tülikad rakendada, palju skripte, parameetreid, brrr...

Seoses punktiga 3 kommenteerin, et on olemas suurepärased varustamissüsteemid FreePBX jaoks, FusionPBX jaoks, Kazoo jaoks, kus on avalikult saadaval erinevate tarnijate telefonide mallid. On kommertslahendusi, kus provisjonimoodulis saab seadistada ka erinevate tootjate telefonide tööd, näiteks Yeastar PBX.

Habré on ka täis retsepte erinevate tootjate seadmete seadistamiseks: aeg, два. Kuid nagu öeldakse, on kõigil süsteemidel saatuslik viga. Nii et me teeme oma ratta.

teie enda formaat

Nagu xkcd-s öeldakse, kui te ei soovi tegeleda 14 vorminguga - tule välja 15. Seetõttu kasutame iga telefoni jaoks üldsätteid ja teeme oma json-konfiguratsioonivormingu.

Midagi sellist:

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

Seega peate igas telefonis konfigureerima kohaliku aja ja SIP-liinid. Siin on kõik lihtne. Näete rohkem näiteid siin.

teie enda serveri pakkumine

Tootja juhendites on tavaliselt punkt, kus on kirjas: võta csv, kirjuta üles oma login-password-mac-aadress, genereeri failid meie patenteeritud skripti abil, pane need Apache veebiserveri alla ja kõik on korras.

Kasutusjuhendi järgmine lõik ütleb tavaliselt, et saate ka loodud konfiguratsioonifaili krüpteerida.

Kuid need kõik on klassika. Moodne lähenemine smuutide ja Twitteriga ütleb, et tuleb teha valmis veebiserver, mis ei oleks nii võimas kui Apache, vaid teeb vaid ühe pisiasja. Looge ja saatke konfiguratsioone lingi abil.

Peatume siin ja pidage meeles, et peaaegu kõik SIP-telefonid saavad nüüd konfiguratsioone vastu võtta http/https kaudu, seega me ei kaalu muid rakendusi (ftp, tftp, ftps). Seejärel teab iga telefon oma MAC-aadressi. Seetõttu teeme kaks linki: ühe isikliku - seadme võtme alusel, teise üldise, mis töötab ühise loa ja MAC-aadressi kombinatsiooni kasutades.

Samuti ei hakka ma pikemalt peatuma zero-configil, st. telefoni nullist seadistamine, st. ühendasite selle võrku ja see hakkas tööle. Ei, minu stsenaariumi kohaselt ühendate selle võrku, teete eelseadistuse (seadistate selle konfiguratsiooni vastuvõtmiseks varustamisserverist) ja joote seejärel pina coladat ja konfigureerite telefoni vajaduse korral varustamise kaudu. Jaotamisvaliku 66 eest vastutab DHCP-server.

Muide, ma olen täiesti väsinud ütlemast "provisioning", nii et sõna lühendati sõnaks "varumine", palun ärge lööge mind.

Ja veel üks asi: meie varustamisserveril puudub kasutajaliides, st. kasutajaliides. Võib-olla praegu, aga pole kindel, sest... Ma ei vaja seda. Kuid seadete salvestamiseks/kustutamiseks, toetatud tarnijate, mudelite loendi hankimiseks on olemas API, kõike kirjeldatakse vastavalt swaggeri spetsifikatsiooni kaanonitele.

Miks API ja mitte kasutajaliides? Sest Mul on juba oma telefonisüsteem, siis on volituste allikas, kust ma lihtsalt pean need andmed võtma, vajaliku jsoni koostama ja provisjoniserveris avaldama. Ja varuserver vastavalt json-failis määratud reeglitele annab nõutavale seadmele oma konfiguratsiooni või ei anna seda, kui seade pole õige või ei vasta selles json-is määratud kriteeriumidele.

Sonata – SIP-i varustamise server

Nii kujunes varustamise mikroteenus. Helistas sonaat, lähtekood on saadaval GitHubis, seal on ka valmis dokkimispilt, doki kasutamise näide siin.

Põhijooned:

  • igal juhul piiratud juurdepääs konfiguratsioonile ajaliselt, vaikimisi 10 minutit. Kui soovite konfiguratsiooni uuesti kättesaadavaks teha, avaldage konfiguratsioon uuesti.

  • üks vorming kõigi tarnijate jaoks, kõik kohandused eemaldatakse sonaadist, saadate standardiseeritud json-i, konfigureerite kõik saadaolevad seadmed.

  • kõik seadmetele väljastatud konfiguratsioonid logitakse, logis on näha kõik probleemsed kohad ja vead on näha

  • Tokeniga on võimalik kasutada ühte ühist linki, iga telefon saab oma konfiguratsiooni, määrates Mac-aadressi. Või isiklik link võtme kaudu.

  • API-d haldamiseks (haldus) ja telefonide konfiguratsioonide ettevalmistamiseks (provisioning) on ​​jagatud portide kaupa

  • Testid. Minu jaoks oli väga oluline parandada väljaantud konfiguratsiooni vormingut ja katta kõik tavapärased konfiguratsiooni väljastamise olukorrad testidega. Et see kõik toimiks selgelt.

miinuseid:

Seni pole Sonata sees krüptimist mitte mingil moel kasutatud. Need. võid muidugi https-i kasutama hakata, pannes nginxi näiteks sonaadi ette. Kuid patenteeritud meetodeid pole veel kasutatud. Miks? Projekt on veel noor, see on käivitanud oma esimesed sada seadet. Ja loomulikult kogun ideid ja tagasisidet. Edasi, et kõik oleks turvaline, et konfigusid võrgus nuuskida ei saaks, tasub ilmselt krüpteerimisvõtmete, tls-i ja nendega siiliga jännata, aga sellest saab jätk.

UI puudumine. Võib-olla on see lõppkasutaja jaoks märkimisväärne puudus, kuid süsteemiadministraatori jaoks on konsooli utiliit olulisem kui täisväärtuslik rakendus. Plaanis oli teha konsooliutiliit, kuid ma pole kindel, kas seda on vaja?

Ja tulemus?

Väike ja lihtne veebiserver mitme telefonimudeli varundamiseks koos API haldusega.

Veel kord, kuidas see peaks töötama?

  1. Sonaadi paigaldamine.
  2. Loome jsoni konfiguratsiooni ja avaldame selle sonaadina.
  3. Seejärel saame sonaadilt varustamislingi.
  4. Seejärel näitame telefonis selle lingi.
  5. Seade laadib konfiguratsiooni

Järgnevas toimingus on ainult kaks sammu:

  1. Loome jsoni konfiguratsiooni ja avaldame selle sonaadina
  2. Seade laadib konfiguratsiooni

Milliseid telefone reklaamitakse?

Müüjad Grandstream, Fanvil, Yealink. Tarnijasisesed konfiguratsioonid on enam-vähem samad, kuid võivad olenevalt püsivarast erineda – võib osutuda vajalikuks täiendavalt testida.

Milliseid reegleid saate kehtestada?

Aja järgi. Saate määrata aja, kuni konfiguratsioon on saadaval.
Mac-aadressi järgi. Kui esitate konfiguratsiooni seadme isikliku lingi kaudu, kontrollitakse ka Mac-aadressi.
IP järgi. IP-aadressi järgi, kust päring tehti.

Kuidas Sonataga suhelda?

API kaudu http-päringute tegemine. API on teie installis saadaval. Sest API toetab swaggeri spetsifikatsiooni, mida saate kasutada Interneti-utiliit API testitaotluste jaoks.

OK, suurepärane. Lahe värk, aga prooviks?

Lihtsaim viis on juurutada hoidlal põhinev dockeri kujutis sonaat-näidis. Hoidlas on installijuhised.

Mis siis, kui ma tean node.js'i?

Kui teil on JavaScripti kasutamise kogemus, saate kiiresti aru, kuidas kõik siin töötab.

Kas tuleb Sonata arendus?

Osaliselt saavutasin oma eesmärgid. Edasine arendus on minu ülesannete küsimus telefoni seadistamise automatiseerimise teemal. Samuti on võimalus laiendada konfiguratsioone telefoni nuppude seadistamiseks, aadressiraamatu varustamise lisamiseks, võib-olla midagi muud, kirjutage kommentaaridesse.

Kokkuvõte ja tunnustused

Mul on hea meel konstruktiivsete ettepanekute/vastuväidete/kommentaaride ja küsimuste üle, sest... Võib juhtuda, et ta kirjeldas midagi arusaamatult.

Samuti tänan kõiki oma kolleege, kes aitasid, nõustasid, testisid ja testide jaoks telefone pakkusid/annetasid. Tegelikult on paljud inimesed, kellega tööl suhtlesin, projektiga erineval määral kaasatud, AsterConf'e, vestlustes ja meilides. Aitäh ideede ja mõtete eest.

Allikas: www.habr.com

Lisa kommentaar