Sonata — SIP provisioneerimise server

Ma ei tea, millega võrrelda provisioning'ut. Võib-olla kassiga? Näib, et saab ka ilma, aga natuke parem on koos temaga. Eriti kui ta töötab))

Probleemi seadmine:

  1. Soovin kiiresti, lihtsalt ja turvaliselt SIP-telefone seadistada. Telefonide installimisel ja veelgi enam, nende taaskonfigureerimisel.
  2. Paljudel teenusepakkujatel on oma konfiguratsiooniformaadid, oma tööriistad konfiguratsioonide genereerimiseks, oma viise konfiguratsioonide kaitsmiseks. Igaühega tutvuda ei tahaks.
  3. Paljud provisioning lahendused, a) on suunatud ühe teenusepakkuja või ühe telefonisüsteemi, b) on piisavalt kohmakalt ellu viidud, hunnik skripte, parameetreid, brr…

Punkti 3 kohta teen kommentaari, et on suurepäraseid provisioning süsteeme FreePBX jaoks, FusionPBX jaoks, Kazoo jaoks, kus avatud ligipääsuga on olemas mallid erinevate teenusepakkujate telefonidele. On ka kaubanduslikke lahendusi, kus saab samuti seadistada telefoni töötamist erinevate tootjate modulis, näiteks Yeastar telefonijaamadel.

Habr päevikutes on samuti palju retsepte, kuidas seadistada erinevate teenusepakkujate seadmeid: kord, kaks. Kuid nagu öeldakse, on kõigil süsteemidel fataalne puudus. Seega loome oma jalgratta.

oma formaat

Nagu öeldakse xkcd-s, kui sa ei taha tegeleda 14 formaadiga — leiuta 15.Seetõttu kasutame ühtseid seadeid igasuguste telefonide jaoks ja loome enda json-formaadis konfiguratsiooni.

Umbes selline:

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

Nii et igas telefonis on oluline seadistada kohalik aeg, sip-liinid. Siin on kõik lihtne. Ka teisi näiteid on võimalik vaadata. siit.

oma proviisiooniserver.

Tootja juhendites on tavaliselt punkt, kus öeldakse: võtke csv, kirjutage sinna kasutajanimi-parool-maci-aadress, meie spetsiaalse skripti abil genereerige failid, hoidke need Apache veebiserveri alla, ja kõik läheb hästi.

Juhendi järgmises punktis räägitakse tavaliselt, et genereeritud konfiguratsioonifaili on võimalik ka krüpteerida.

Kuid see on kõik klassika. Kaasaegne lähenemine smuutide ja Twitteriga ütleb, et tuleb luua valmidusserver, mis ei ole nii võimas kui Apache, vaid teeb ainult üht väikest tööd. Formeerib ja edastab konfidenet lingi kaudu.

Siin peatume ja meenutame, et peaaegu kõik SIP-telefonid saavad nüüd HTTP/HTTPS kaudu konfigureerimise, seega teisi rakendusi (FTP, TFTP, FTPS) me ei käsitle. Iga telefon tunneb oma MAC-aadressi. Seetõttu teeme kaks linki: üks isiklik, seadme võtme järgi, teine üldine, mis töötab kombinatsiooni üldise tokeni ja MAC-aadressiga.

Samuti ei jää ma peatuma zero-config'i, st telefoni seadistamisel 'nullist', st te lihtsalt ühendate selle võrku ja hop, see töötab. Ei, minu stsenaariumis ühendate selle võrku, teete eelneva seadistuse (seadistate selle, et saada konfiguraatsiooni proviisiooni serverilt), ja seejärel joote piñacoladat ja seadistate telefoni vastavalt vajadusele läbi proviisjoni. Option 66 jagamine on DHCP-serveri ülesanne.

Muide, ma olen täiesti väsinud ütlemast 'provisioning', seega lühendasin sõna 'proviisjoniks', palun ärge koputage mind jalaga.

Ja veel: meie serveri proviisoril puudub kasutajaliides. Võib-olla kunagi on see olemas, kuid ei ole kindel, sest mul pole seda vaja. Siiski on olemas API seadeid salvestamiseks/kustutamiseks, toetatavate tootjate ja mudelite nimekirja saamiseks, kõik on kirjeldatud swagger spetsifikatsiooni kohaselt.

Miks API, mitte UI? Kuna mul on oma telefonisüsteem, on mul olemas akreditiivide allikas, kust piisab, kui need andmed võtta, vajalik JSON kokku panna ja avaldada proviisori serveris. Ja proviisori server väljastab määratletud reeglite kohaselt JSON-failis seadmele vajaliku konfiguratsiooni või mitte, kui seade pole õige või ei vasta ka selle JSON-iga määratletud kriteeriumidele.

Sonata — SIP provisioneerimise server

Nii et selline proviisori mikroteenus on välja kujunenud. Kasutatakse nimega sonata, allika kood on saadaval GitHubis, samuti on olemas valmis Docker-pilt, näide Docker'i kasutamisest siit.

Põhifunktsioonid:

  • igaühel on igal juhul piiratud juurdepääs konfiguratsioonile ajaliselt, vaikimisi 10 minutit. Kui soovite konfiguratsiooni uuesti kättesaadavaks teha — avaldage konfigureerimine uuesti.

  • üks formaat kõigile tarnijatele, kõik seadistamine on viidud sonatasse, saadetav on standardiseeritud JSON, seadista igasugune saadaval olev varustus.

  • kõik seadmetele antud konfiguratsioonid logitakse, kõik probleemsed kohad on logis nähtavad ja vead saab üle vaadata.

  • võimalik on kasutada ühte üldist linki koos tokeniga, iga telefon saab oma konfiguratsiooni, märkides MAC-aadressi. Või isiklik link key järgi.

  • API haldamiseks ja telefonide konfiguratsioonide väljastamiseks (provisioning) on jagatud portide kaupa.

  • Testid. Minu jaoks oli väga oluline fikseerida väljastatud konfiguratsiooni formaat ja katta kõik tavalised olukorrad konfiguratsiooni väljastamise testidega. Et see kõik töötaks selgelt.

Miinused:

Hetkel ei ole sonata raames krüpteerimist kasutusel. St, loomulikult, saate alustada https kasutamist, paigaldades näiteks nginx'i sonata ette. Kuid originaalmeetodid pole veel rakendatud. Miks? Projekt on veel noor, valmistades ette oma esimest sada seadet. Loomulikult kogun ideid ja tagasisidet. Edasi, et kõik oleks ohutu, et konfiguratsioone ei saaks võrgus nuhkida, tasub ilmselt tegeleda krüptimisvõtmete, TLS-i ja muude sõltuvustega, kuid see tuleb hiljem.

UI puudumine. See võib olla kaugeltki suur miinus lõppkasutajale, kuid süsteemiadministraatori jaoks on pigem oluline konsoolirakendus kui täieõiguslik rakendus. Konsoolirakenduse loomine oli plaanis, kuid pole kindel, kas see on vajalik?

Mis on lõpptulemus?

Väike ja lihtne veebiserver mitme telefonimudeli konfigureerimiseks API-ga haldamiseks.

Korrake, kuidas see peaks töötama?

  1. Installime sonata.
  2. Koonname json-konfiguratsiooni ja avaldame selle sonatas.
  3. Siis saame sonatalt proviisorilinki.
  4. Seejärel sisestame selle lingi telefoniseadmestikku.
  5. Seade tõmbab konfiguratsiooni.

Hiljem kasutamisel on ainult kaks sammu:

  1. Koostame json-konfiguratsiooni ja avaldame selle sonatas.
  2. Seade tõmbab konfiguratsiooni.

Millised telefonid toetavad?

Tootjad Grandstream, Fanvil, Yealink. Konfiguratsioonid on tootjate vahel enam-vähem sarnased, kuid võivad erinevate tarkvaraversioonide tõttu erineda — võib osutuda vajalikuks lisatestidega katsetada.

Milliseid reegleid saab seada?

Kuna aeg. Saate määrata aja, mille jooksul konfiguratsioon on saadaval.
MAC-aadressi põhjal. Isikliku lingi kaudu konfi edastamisel kontrollitakse ka MAC-aadressi.
IP-aadressi põhjal. IP-aadressilt, kust päring tehti.

Kuidas suhelda sonataga?

API kaudu, tehes HTTP-päringuid. API on teie instantsis saadaval. Kuna API toetab swagger spetsifikatsiooni, siis saab kasutada veebitööriista API testpäringute jaoks.

Okei, suurepärane. Asi tundub põnev, kuidas proovida?

Lihtsaim on käivitada Docker-pilt, mis põhineb hoidlas sonata-sample. Hoidlas on installimise juhend.

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

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

Kas sonata areneb edasi?

Olen osaliselt saavutanud oma eesmärgid. Edasiareng sõltub minu ülesannetest telefonide seadistamise automatiseerimise valdkonnas. On veel võimalus laiendada seadistusi telefoni nuppude seadistamiseks, lisada aadressiraamatute proviisiooni, võib-olla veel midagi — kirjutage kommentaarides.

Kokkuvõte ja tänukirjad

Olen avatud konstruktiivsetele ettepanekutele/vastuväidetele/kommentaaridele ja küsimustele, kuna võib-olla olen midagi ebaselgelt kirjeldanud.

Samuti tänan kõiki kolleege, kes aitasid, nõustasid, testisid, andsid/kingivad testimiseks telefone. Tõeliselt on projekti olnud kaasatud paljusid inimesi, kellega olen oma töös suhelnud, ilma AsterConfe, vestlustes ja e-kirjades. Aitäh ideede ja mõtete eest.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster