Sonata - Servidor de subministrament SIP

No sé amb què comparar l'aprovisionament. Potser amb un gat? Sembla possible sense ell, però amb ell és una mica millor. Sobretot si funciona))

Formulació del problema:

  1. Vull configurar els telèfons SIP de manera ràpida, senzilla i segura. Quan instal·leu un telèfon, i més encara quan el torneu a configurar.
  2. Molts venedors tenen els seus propis formats de configuració, les seves pròpies utilitats per generar configuracions i les seves pròpies maneres de protegir les configuracions. I realment no vull tractar amb tothom.
  3. Moltes solucions d'aprovisionament, a) es centren en un proveïdor o en un sistema telefònic, b) són bastant feixugues d'implementar, molts scripts, paràmetres, brrr...

Pel que fa al punt 3, comentaré que hi ha excel·lents sistemes d'aprovisionament per a FreePBX, per FusionPBX, per Kazoo, on les plantilles per a telèfons de diversos proveïdors estan disponibles públicament. Hi ha solucions comercials on també es pot configurar el funcionament de telèfons de diferents fabricants al mòdul d'aprovisionament, per exemple, Yeastar PBX.

Habré també està ple de receptes sobre com configurar dispositius de diversos proveïdors: temps, два. Però com diuen, tots els sistemes tenen un defecte fatal. Així que farem la nostra pròpia bicicleta.

el teu propi format

Com diuen a xkcd, si no voleu tractar amb 14 formats - venir amb el 15. Per tant, fem servir la configuració general per a qualsevol telèfon i fem el nostre propi format de configuració json.

Alguna cosa com això:

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

Per tant, en qualsevol telèfon cal configurar l'hora local i les línies SIP. Aquí tot és senzill. Podeu veure més exemples aquí.

aprovisionament del vostre propi servidor

Als manuals del fabricant sol haver-hi un punt on diu: agafeu un csv, anoteu la vostra adreça d'inici de sessió-contrasenya-mac, genereu fitxers amb el nostre script propietari, poseu-los al servidor web Apache i tot anirà bé.

El següent paràgraf del manual normalment us indica que també podeu xifrar el fitxer de configuració generat.

Però tots aquests són clàssics. L'enfocament modern amb batuts i Twitter diu que cal fer un servidor web ja fet que no serà tan potent com Apache, però només farà una petita cosa. Genereu i envieu configuracions mitjançant un enllaç.

Aturem-nos aquí i recordem que gairebé tots els telèfons SIP ara poden rebre configuracions mitjançant http/https, de manera que no estem considerant altres implementacions (ftp, tftp, ftps). Aleshores, cada telèfon coneix la seva pròpia adreça MAC. Per tant, farem dos enllaços: un personal, basat en la clau del dispositiu, el segon general, que funciona mitjançant una combinació d'un testimoni comú i una adreça MAC.

A més, no em detendré en zero-config, és a dir. configurar el telèfon des de zero, és a dir. el vas connectar a la xarxa i va començar a funcionar. No, en el meu escenari, el connecteu a la xarxa, feu la configuració preliminar (configureu-lo per rebre la configuració del servidor d'aprovisionament) i després beu pina colada i torneu a configurar el telèfon segons sigui necessari mitjançant l'aprovisionament. La distribució de l'opció 66 és responsabilitat del servidor DHCP.

Per cert, estic completament cansat de dir "aprovisionament", així que la paraula es va escurçar a "provisió", si us plau, no em peteu.

I una cosa més: el nostre servidor d'aprovisionament no té una interfície d'usuari, és a dir. interfície d'usuari. Potser, de moment, però no estic segur, perquè... No ho necessito. Però hi ha una API per desar/suprimir la configuració, obtenir una llista de proveïdors compatibles, models, tot es descriu segons els cànons de l'especificació de swagger.

Per què API i no IU? Perquè Ja tinc el meu propi sistema telefònic, llavors tinc una font de credencials, on només necessito agafar aquestes dades, compilar el json necessari i publicar-lo al servidor de subministrament. I el servidor de subministrament, segons les regles especificades al fitxer json, donarà la seva configuració al dispositiu requerit o no li donarà si el dispositiu no és correcte o no compleix els criteris també especificats en aquest json.

Sonata - Servidor de subministrament SIP

Així va resultar el microservei de subministrament. Va trucar sonata, el codi font està disponible a GitHub, també n'hi ha imatge docker a punt, exemple d'ús de Docker aquí.

Característiques clau:

  • en tot cas, accés limitat a la configuració per temps, per defecte 10 minuts. Si voleu que la configuració torni a estar disponible, torneu a publicar la configuració.

  • un format per a tots els venedors, tots els ajustos s'eliminen a la sonata, envieu json estandarditzat, configureu qualsevol equip disponible.

  • es registren totes les configuracions emeses als dispositius, es poden veure totes les àrees problemàtiques al registre i es poden veure els errors

  • És possible utilitzar un enllaç comú amb un testimoni; cada telèfon rep la seva pròpia configuració especificant l'adreça Mac. O un enllaç personal mitjançant clau.

  • Les API per a la gestió (gestió) i el subministrament de configuracions als telèfons (provisionament) es divideixen per ports

  • Proves. Va ser molt important per a mi arreglar el format de la configuració emesa i cobrir totes les situacions habituals d'emissió d'una configuració amb proves. Perquè tot això funcioni clarament.

Contres:

Fins ara, el xifratge no s'utilitza de cap manera a Sonata. Aquells. Per descomptat, podeu començar a utilitzar https posant nginx davant de la sonata, per exemple. Però encara no s'han utilitzat mètodes propietaris. Per què? El projecte encara és jove, ha llançat els seus primers cent dispositius. I, per descomptat, recullo idees i comentaris. A més, per tal de fer-ho tot segur, de manera que no es puguin ensumar les configuracions a la xarxa, probablement val la pena preocupar-se amb les claus de xifratge, els tls i l'eriçó amb elles, però això serà una continuació.

Manca d'IU. Potser això és un desavantatge important per a l'usuari final, però per a un administrador del sistema, una utilitat de consola és més important que una aplicació completa. Hi havia plans per fer una utilitat de consola, però no estic segur de si és necessària?

El resultat?

Un servidor web petit i senzill per subministrar diversos models de telèfon amb una API per a la gestió.

Una vegada més, com hauria de funcionar això?

  1. Instal·lació de la sonata.
  2. Creem una configuració json i la publiquem a sonata.
  3. Aleshores rebem un enllaç de subministrament de sonata.
  4. Aleshores us indiquem aquest enllaç al telèfon.
  5. El dispositiu està carregant la configuració

Només hi ha dos passos en l'operació posterior:

  1. Creem una configuració json i la publiquem a sonata
  2. El dispositiu està carregant la configuració

Quins telèfons es promocionaran?

Proveïdors Grandstream, Fanvil, Yealink. Les configuracions del venedor són més o menys les mateixes, però poden diferir segons el microprogramari; pot ser que calgui provar-ho addicionalment.

Quines regles pots establir?

Per temps. Podeu especificar el temps fins al qual la configuració estarà disponible.
Per adreça mac. Quan envieu la configuració mitjançant l'enllaç personal del dispositiu, també es comprovarà l'adreça Mac.
Per ip. Per adreça IP des d'on s'ha fet la sol·licitud.

Com interactuar amb la sonata?

Mitjançant l'API, fent sol·licituds http. L'API estarà disponible a la vostra instal·lació. Perquè L'API admet l'especificació swagger, que podeu utilitzar utilitat en línia per a sol·licituds de prova a l'API.

D'acord perfecte. Coses genials, què tal provar-ho?

La manera més senzilla és desplegar una imatge Docker basada en un dipòsit sonata-mostra. El repositori conté instruccions d'instal·lació.

Què passa si conec node.js?

Si teniu experiència amb JavaScript, descobrireu ràpidament com funciona tot aquí.

Hi haurà un desenvolupament de Sonata?

He aconseguit parcialment els meus objectius. El desenvolupament posterior és una qüestió de les meves tasques sobre el tema de l'automatització de la configuració del telèfon. També hi ha l'oportunitat d'ampliar les configuracions per configurar els botons del telèfon, afegir el subministrament de la llibreta d'adreces, potser una altra cosa, escriviu als comentaris.

Resum i agraïments

Estaré encantat de rebre suggeriments/objeccions/comentaris i preguntes constructives, perquè... Pot ser que hagi descrit alguna cosa de manera incomprensible.

També expresso el meu agraïment a tots els meus companys que van ajudar, assessorar, provar i proporcionar/donar telèfons per a proves. En realitat, moltes persones amb qui em vaig comunicar a la feina estan implicades en el projecte en diferents graus, AsterConf'e, en xats i correus electrònics. Gràcies per les idees i pensaments.

Font: www.habr.com

Afegeix comentari