Sonata - SIP voorsiening bediener

Ek weet nie waarmee om voorsiening te vergelyk nie. Miskien met 'n kat? Dit lyk moontlik daarsonder, maar daarmee is dit 'n bietjie beter. Veral as dit werk))

Formulering van die probleem:

  1. Ek wil SIP-fone vinnig, maklik en veilig opstel. Wanneer 'n foon geïnstalleer word, en nog meer wanneer dit herkonfigureer word.
  2. Baie verskaffers het hul eie konfigurasieformate, hul eie nutsprogramme om konfigurasies te genereer, en hul eie maniere om konfigurasies te beskerm. En ek wil nie regtig met almal deal nie.
  3. Baie voorsieningsoplossings, a) is gefokus op een verkoper of een telefoonstelsel, b) is redelik omslagtig om te implementeer, baie skrifte, parameters, brrr...

Wat punt 3 betref, sal ek 'n opmerking maak dat daar uitstekende voorsieningstelsels is vir FreePBX, vir FusionPBX, vir Kazoo, waar sjablone vir fone van verskeie verskaffers publiek beskikbaar is. Daar is kommersiële oplossings waar jy ook die werking van fone van verskillende vervaardigers in die voorsieningsmodule kan instel, byvoorbeeld Yeastar PBX.

Habré is ook vol resepte oor hoe om toestelle van verskeie verskaffers op te stel: tyd, два. Maar soos hulle sê, alle stelsels het 'n noodlottige fout. So ons sal ons eie fiets maak.

jou eie formaat

Soos hulle in xkcd sê, as jy nie 14 formate wil hanteer nie - kom vorendag met die 15de. Daarom gebruik ons ​​algemene instellings vir enige foon en maak ons ​​eie json config-formaat.

Iets soos hierdie:

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

Dus, in enige foon moet jy plaaslike tyd en SIP-lyne konfigureer. Alles is eenvoudig hier. Jy kan meer voorbeelde sien hier.

jou eie bedienervoorsiening

In die vervaardiger se handleidings is daar gewoonlik 'n punt waar dit sê: neem 'n csv, skryf jou login-wagwoord-mac-adres neer, genereer lêers deur ons eie skrip te gebruik, plaas dit onder die Apache-webbediener en alles sal reg wees.

Die volgende paragraaf van die handleiding vertel jou gewoonlik dat jy ook die gegenereerde konfigurasielêer kan enkripteer.

Maar dit is alles klassieke. Die moderne benadering met smoothies en Twitter sê dat jy 'n klaargemaakte webbediener moet maak wat nie so kragtig soos Apache sal wees nie, maar net een klein ding sal doen. Genereer en stuur konfigurasies met behulp van 'n skakel.

Kom ons stop hier en onthou dat byna alle SIP-fone nou konfigurasies via http/https kan ontvang, so ons oorweeg nie ander implementerings (ftp, tftp, ftps) nie. Dan ken elke foon sy eie MAC-adres. Daarom sal ons twee skakels maak: een persoonlik - gebaseer op die toestelsleutel, die tweede algemene, wat werk met 'n kombinasie van 'n algemene teken en 'n MAC-adres.

Ek sal ook nie stilstaan ​​by zero-config nie, m.a.w. die foon van nuuts af op te stel, d.w.s. jy het dit by die netwerk ingeprop en dit het begin werk. Nee, in my scenario prop jy dit by die netwerk in, doen die voorlopige opstelling (stel dit op om die konfigurasie van die voorsieningsbediener te ontvang), en drink dan pina colada en herkonfigureer die foon soos nodig deur die voorsiening. Die verspreiding van Opsie 66 is die verantwoordelikheid van die DHCP-bediener.

Terloops, ek is heeltemal moeg om te sê "voorsiening", so die woord is verkort na "voorsiening", moet my asseblief nie skop nie.

En nog een ding: ons voorsieningsbediener het nie 'n UI nie, d.w.s. gebruikerskoppelvlak. Miskien, vir nou, maar nie seker nie, want... Ek het dit nie nodig nie. Maar daar is 'n API om instellings te stoor / uit te vee, om 'n lys van ondersteunde verskaffers, modelle te kry, alles word beskryf volgens die kanons van die swagger-spesifikasie.

Hoekom API en nie UI nie? Omdat Ek het reeds my eie telefoonstelsel, dan het ek 'n bron van geloofsbriewe, waar ek net hierdie data moet neem, die nodige json saamstel en dit op die voorsieningsbediener publiseer. En die voorsieningsbediener, volgens die reëls gespesifiseer in die json-lêer, sal die vereiste toestel sy konfigurasie gee of nie as die toestel nie korrek is nie of nie voldoen aan die kriteria wat ook in hierdie json gespesifiseer word nie.

Sonata - SIP voorsiening bediener

Dit is hoe die voorsieningsmikrodiens uitgedraai het. Gebel sonate, die bronkode is beskikbaar op GitHub, daar is ook gereed docker-beeld, Docker gebruik voorbeeld hier.

Sleutel kenmerke:

  • in elk geval, beperkte toegang tot die konfigurasie teen tyd, by verstek 10 minute. As jy die konfigurasie weer beskikbaar wil stel, publiseer die konfigurasie weer.

  • een formaat vir alle verskaffers, alle aanpassings word in sonate verwyder, jy stuur gestandaardiseerde json, stel enige beskikbare toerusting in.

  • alle konfigurasies wat aan toestelle uitgereik is, word aangeteken, alle probleemareas kan in die log bekyk word en foute kan gesien word

  • Dit is moontlik om een ​​algemene skakel met 'n teken te gebruik; elke foon ontvang sy eie konfigurasie deur die mac-adres te spesifiseer. Of 'n persoonlike skakel via sleutel.

  • API's vir bestuur (bestuur) en voorsiening van konfigurasies aan fone (voorsiening) word gedeel deur poorte

  • Toetse. Dit was vir my baie belangrik om die formaat van die uitgereikte konfigurasie reg te stel en al die gewone situasies van die uitreiking van 'n konfigurasie met toetse te dek. Sodat dit alles duidelik werk.

Nadele:

Tot dusver word enkripsie op geen manier binne Sonata gebruik nie. Dié. jy kan natuurlik https begin gebruik deur byvoorbeeld nginx voor sonate te plaas. Maar eie metodes is nog nie gebruik nie. Hoekom? Die projek is nog jonk, dit het sy eerste honderd toestelle bekend gestel. En natuurlik samel ek idees en terugvoer in. Verder, om alles veilig te maak, sodat die konfigurasies nie op die netwerk gesnuif kan word nie, is dit waarskynlik die moeite werd om te pla met enkripsiesleutels, tls en die reier daarmee, maar dit sal 'n voortsetting wees.

Gebrek aan UI. Miskien is dit 'n beduidende nadeel vir die eindgebruiker, maar vir 'n stelseladministrateur is 'n konsolehulpmiddel belangriker as 'n volwaardige toepassing. Daar was planne om 'n konsole-hulpmiddel te maak, maar ek is nie seker of dit nodig is nie?

Die resultaat?

'n Klein en eenvoudige webbediener vir die voorsiening van verskeie telefoonmodelle met 'n API vir bestuur.

Weereens, hoe is dit veronderstel om te werk?

  1. Sonate installeer.
  2. Ons skep 'n json-konfigurasie en publiseer dit in sonate.
  3. Dan ontvang ons 'n voorsieningskakel van sonate.
  4. Dan dui ons hierdie skakel in die telefoon aan.
  5. Die toestel laai tans die konfigurasie

Daar is slegs twee stappe in die daaropvolgende operasie:

  1. Ons skep 'n json-konfigurasie en publiseer dit in sonate
  2. Die toestel laai tans die konfigurasie

Watter fone sal bevorder word?

Verkopers Grandstream, Fanvil, Yealink. Die konfigurasies binne die verskaffer is min of meer dieselfde, maar kan verskil afhangende van die firmware - dit kan nodig wees om addisioneel te toets.

Watter reëls kan jy stel?

Met tyd. U kan die tyd spesifiseer totdat die konfigurasie beskikbaar sal wees.
Deur mac-adres. Wanneer die konfigurasie via die toestel se persoonlike skakel ingedien word, sal die Mac-adres ook nagegaan word.
Deur ip. Volgens IP-adres van waar die versoek gedoen is.

Hoe om met sonate om te gaan?

Via API, maak http-versoeke. Die API sal beskikbaar wees in jou installasie. Omdat Die API ondersteun die swagger-spesifikasie, wat u kan gebruik aanlyn nut vir toetsversoeke aan die API.

Regso. Cool goed, wat daarvan om dit te probeer?

Die maklikste manier is om 'n docker-beeld op grond van 'n bewaarplek te implementeer sonate-monster. Die bewaarplek bevat installasie-instruksies.

Wat as ek node.js ken?

As jy ondervinding het met die gebruik van JavaScript, sal jy vinnig uitvind hoe alles hier werk.

Sal daar 'n Sonata-ontwikkeling wees?

Ek het my doelwitte gedeeltelik bereik. Verdere ontwikkeling is 'n kwessie van my take oor die onderwerp van outomatisering van telefoonopstelling. Daar is ook 'n geleentheid om die konfigurasies uit te brei om telefoonknoppies op te stel, adresboekvoorsiening by te voeg, miskien iets anders, skryf in die kommentaar.

Opsomming en erkennings

Ek sal bly wees om konstruktiewe voorstelle/besware/opmerkings en vrae te hê, want... Dit kan goed wees dat hy iets onbegryplik beskryf het.

Ek spreek ook my dank uit teenoor al my kollegas wat gehelp, geadviseer, getoets en fone verskaf/geskenk het vir toetse. In werklikheid is baie mense met wie ek by die werk gekommunikeer het in verskillende mate betrokke by die projek, AsterConf'e, in geselsies en e-posse. Dankie vir die idees en gedagtes.

Bron: will.com

Voeg 'n opmerking