Sonata - Servidor de aprovisionamento SIP

Non sei con que comparar o aprovisionamento. Quizais cun gato? Parece posible sen el, pero con el é un pouco mellor. Especialmente se funciona))

Formulación do problema:

  1. Quero configurar teléfonos SIP de forma rápida, sinxela e segura. Ao instalar un teléfono, e máis aínda ao reconfiguralo.
  2. Moitos provedores teñen os seus propios formatos de configuración, as súas propias utilidades para xerar configuracións e as súas propias formas de protexer as configuracións. E realmente non quero tratar con todos.
  3. Moitas solucións de aprovisionamento, a) están enfocadas nun provedor ou nun sistema telefónico, b) son bastante complicadas de implementar, moitos scripts, parámetros, brrr...

Respecto do punto 3, comentarei que existen excelentes sistemas de aprovisionamento para FreePBX, para FusionPBX, para Kazoo, onde os modelos para teléfonos de varios provedores están dispoñibles publicamente. Existen solucións comerciais nas que tamén se pode configurar o funcionamento de teléfonos de diferentes fabricantes no módulo de aprovisionamento, por exemplo, Yeastar PBX.

Habré tamén está cheo de receitas sobre como configurar dispositivos de varios provedores: tempo, два. Pero como din, todos os sistemas teñen un fallo fatal. Así que faremos a nosa propia bicicleta.

o seu propio formato

Como din en xkcd, se non queres tratar con 14 formatos - veña co 15. Polo tanto, usamos a configuración xeral para calquera teléfono e creamos o noso propio formato de configuración json.

Algo coma isto:

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

Polo tanto, en calquera teléfono cómpre configurar a hora local e as liñas SIP. Aquí todo é sinxelo. Podes ver máis exemplos aquí.

aprovisionamento do seu propio servidor

Nos manuais do fabricante adoita haber un punto no que di: colle un csv, anota o teu enderezo de inicio de sesión-contrasinal-mac, xera ficheiros usando o noso script propietario, colócaos no servidor web Apache e todo estará ben.

O seguinte parágrafo do manual normalmente indica que tamén pode cifrar o ficheiro de configuración xerado.

Pero estes son todos clásicos. O enfoque moderno con batidos e Twitter di que cómpre facer un servidor web preparado que non sexa tan poderoso como Apache, pero que só fará unha pequena cousa. Xera e envía configuracións mediante unha ligazón.

Detémonos aquí e lembremos que case todos os teléfonos SIP agora poden recibir configuracións a través de http/https, polo que non estamos considerando outras implementacións (ftp, tftp, ftps). Entón, cada teléfono coñece o seu propio enderezo MAC. Polo tanto, faremos dúas ligazóns: unha persoal - baseada na clave do dispositivo, a segunda xeral, que funciona usando unha combinación dun token común e un enderezo MAC.

Ademais, non vou determe en zero-config, é dicir. configurar o teléfono desde cero, é dicir. enchufaches á rede e comezou a funcionar. Non, no meu escenario, conéctao á rede, fai a configuración preliminar (configura para recibir a configuración do servidor de aprovisionamento) e despois bebe piña colada e reconfigura o teléfono segundo sexa necesario a través do aprovisionamento. A distribución da opción 66 é responsabilidade do servidor DHCP.

Por certo, estou completamente canso de dicir "aprovisionamento", polo que a palabra acurtouse a "aprovisionamento", por favor, non me patees.

E unha cousa máis: o noso servidor de aprovisionamento non ten unha IU, é dicir. interface de usuario. Quizais, de momento, pero non estou seguro, porque... Non o necesito. Pero hai unha API para gardar/eliminar a configuración, obter unha lista de provedores compatibles, modelos, todo se describe segundo os canons da especificación swagger.

Por que a API e non a IU? Porque Xa teño o meu propio sistema telefónico, entón teño unha fonte de credenciais, onde só teño que coller estes datos, compilar o json necesario e publicalo no servidor de aprovisionamento. E o servidor de aprovisionamento, segundo as regras especificadas no ficheiro json, dará ao dispositivo necesario a súa configuración ou non lle dará se o dispositivo non é correcto ou non cumpre os criterios tamén especificados neste json.

Sonata - Servidor de aprovisionamento SIP

Así quedou o microservizo de aprovisionamento. Chamado sonata, o código fonte está dispoñible en GitHub, tamén o hai imaxe docker lista, exemplo de uso do docker aquí.

Características principais:

  • en todo caso, acceso limitado á configuración por tempo, por defecto 10 minutos. Se queres facer a configuración dispoñible de novo, volva publicar a configuración.

  • un formato para todos os provedores, todos os axustes son eliminados en sonata, envías json estandarizado, configura calquera equipo dispoñible.

  • todas as configuracións emitidas para os dispositivos están rexistradas, todas as áreas problemáticas pódense ver no rexistro e os erros poden verse

  • É posible usar unha ligazón común cun token; cada teléfono recibe a súa propia configuración especificando o enderezo mac. Ou unha ligazón persoal mediante clave.

  • As API para xestión (xestión) e aprovisionamento de configuracións para teléfonos (aprovisionamento) divídense por portos

  • Probas. Foi moi importante para min corrixir o formato da configuración emitida e cubrir todas as situacións habituais de emitir unha configuración con probas. Para que todo isto funcione con claridade.

Contras:

Ata agora, o cifrado non se usa de ningún xeito dentro de Sonata. Eses. Por suposto, podes comezar a usar https poñendo nginx diante da sonata, por exemplo. Pero aínda non se utilizaron métodos propietarios. Por que? O proxecto aínda é novo, lanzou os seus primeiros cen dispositivos. E, por suposto, recompilo ideas e comentarios. Ademais, para que todo sexa seguro, para que non se poidan detectar as configuracións na rede, probablemente paga a pena preocuparse coas claves de cifrado, os tls e o ourizo con elas, pero esta será unha continuación.

Falta de IU. Quizais esta sexa unha desvantaxe significativa para o usuario final, pero para un administrador do sistema, unha utilidade de consola é máis importante que unha aplicación completa. Había plans para facer unha utilidade de consola, pero non estou seguro de se é necesaria?

O resultado?

Un servidor web pequeno e sinxelo para aprovisionar varios modelos de teléfono cunha API de xestión.

Unha vez máis, como se supón que funciona?

  1. Instalación de sonata.
  2. Creamos unha configuración json e publicámola en sonata.
  3. Despois recibimos un enlace de aprovisionamento de sonata.
  4. Despois indicamos esta ligazón no teléfono.
  5. O dispositivo está cargando a configuración

Só hai dous pasos na operación posterior:

  1. Creamos unha configuración json e publicámola en sonata
  2. O dispositivo está cargando a configuración

Que teléfonos se promocionarán?

Vendedores Grandstream, Fanvil, Yealink. As configuracións do vendedor son máis ou menos iguais, pero poden diferir segundo o firmware; pode ser necesario probar adicionalmente.

Que regras podes establecer?

Polo tempo. Podes especificar o tempo ata o que estará dispoñible a configuración.
Por enderezo mac. Ao enviar a configuración a través da ligazón persoal do dispositivo, tamén se comprobará o enderezo Mac.
Por ip. Por enderezo IP desde onde se realizou a solicitude.

Como interactuar coa sonata?

A través da API, realizando solicitudes http. A API estará dispoñible na túa instalación. Porque A API admite a especificación swagger, podes usala utilidade en liña para solicitudes de proba á API.

OK, xenial. Cousas xeniais, que tal probalas?

O xeito máis sinxelo é despregar unha imaxe docker baseada nun repositorio sonata-mostra. O repositorio contén instrucións de instalación.

E se coñezo node.js?

Se tes experiencia usando JavaScript, descubrirás rapidamente como funciona todo aquí.

Haberá un desenvolvemento da Sonata?

Conseguín parcialmente os meus obxectivos. O desenvolvemento posterior é unha cuestión das miñas tarefas sobre o tema da automatización da configuración do teléfono. Tamén hai unha oportunidade de expandir as configuracións para configurar os botóns do teléfono, engadir o aprovisionamento da axenda de enderezos, quizais outra cousa, escriba nos comentarios.

Resumo e agradecementos

Estarei encantado de ter suxestións/obxeccións/comentarios e preguntas construtivas, porque... Ben pode ser que describise algo incomprensible.

Tamén expreso o meu agradecemento a todos os meus compañeiros que axudaron, aconsellaron, probaron e proporcionaron/doaron teléfonos para as probas. En realidade, moitas persoas coas que me comuniquei no traballo están implicadas no proxecto en distintos graos, AsterConf'e, en chats e correos electrónicos. Grazas polas ideas e pensamentos.

Fonte: www.habr.com

Engadir un comentario