Sonata: servidor de aprovisionamiento SIP

No sé con qué comparar el aprovisionamiento. Tal vez con un gato? Parece posible sin él, pero con él un poco mejor. Especialmente si funciona))


Declaración del problema:


  1. Quiero configurar tel√©fonos SIP de forma r√°pida, sencilla y segura. Al instalar el tel√©fono, y m√°s a√ļn al volver a configurarlo.
  2. Muchos proveedores tienen sus propios formatos de configuración, sus utilidades para generar configuraciones, sus propias formas de proteger las configuraciones. Pero realmente no quiero tratar con todos.
  3. Muchas soluciones de aprovisionamiento, a) se centran en un proveedor o un sistema telefónico, b) son bastante engorrosos de implementar, un montón de scripts, parámetros, br ...

En el punto 3, har√© un comentario de que existen excelentes sistemas para FreePBX , FusionPBX , Kazoo , donde hay plantillas disponibles p√ļblicamente para tel√©fonos de varios proveedores. Existen soluciones comerciales en las que tambi√©n es posible configurar en el m√≥dulo la operaci√≥n de tel√©fonos de diferentes fabricantes, por ejemplo, PBX Yeastar.


En Habré también está lleno de recetas cómo configurar dispositivos de varios proveedores: uno , dos . Pero como dicen, todos los sistemas tienen un defecto fatal. Así que haz tu bicicleta.


formato propio


Como dicen en xkcd, no quiero lidiar con 14 formatos, piense en el 15 . Por lo tanto, utilizamos la configuración general para cualquier teléfono y hacemos nuestra propia configuración en formato json.


Algo como esto:


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

Entonces, en cualquier teléfono, debe configurar la hora local, líneas de sorbos. Todo es simple aquí. Más ejemplos se pueden encontrar aquí .


servidor propio


En los manuales del fabricante, generalmente hay un punto en el que dice: tome csv, escriba all√≠ la direcci√≥n de acceso-contrase√Īa-poppy, genere archivos con el script de nuestra compa√Ī√≠a, p√≥ngalos en el servidor web Apache y estar√° bien.


El siguiente párrafo del manual generalmente le dice qué más puede cifrar el archivo de configuración generado.


Pero todo esto es un cl√°sico. El enfoque moderno con smoothies y twitter dice que necesita hacer un servidor web listo que no sea tan poderoso como Apache, pero que solo haga una peque√Īa cosa. Forma y da configuraciones por referencia.


Aqu√≠ nos detenemos y recordamos que casi todos los tel√©fonos SIP ahora pueden recibir configuraciones a trav√©s de http / https, por lo que no consideramos otras implementaciones (ftp, tftp, ftps). Luego, cada tel√©fono conoce su propia direcci√≥n de amapola. Por lo tanto, haremos dos enlaces: uno personal: en la clave del dispositivo, el segundo general, que funciona en un token com√ļn y una direcci√≥n de amapola.


Adem√°s, no me detendr√© en la configuraci√≥n cero, es decir configurar el tel√©fono desde cero, es decir Lo metiste en la red y gan√≥ un salto. No, en mi caso, lo atascaste en la red, hiciste una configuraci√≥n preliminar (la configuraste para recibir la configuraci√≥n del servidor), y luego bebiste un poco de chocolate y reconfiguraste el tel√©fono seg√ļn sea necesario a trav√©s del servicio. La opci√≥n de distribuci√≥n 66 es asunto del servidor DHCP.


Por cierto, estoy completamente torturado al decir "aprovisionamiento", por lo que la palabra se redujo a "aprovisionamiento", no patees, por favor, con los pies.


Y una cosa más: nuestro servidor no tiene interfaz de usuario, es decir interfaz de usuario Quizás por ahora, pero no estoy seguro, porque No necesito Pero hay una API para guardar / eliminar configuraciones, obtener una lista de proveedores compatibles, modelos, todo se describe de acuerdo con los cánones de la especificación de swagger.


¬ŅPor qu√© una API, no una interfaz de usuario? Porque Ya tengo mi propio sistema telef√≥nico, entonces, tengo una fuente de credenciales, donde solo necesito tomar esta informaci√≥n, componer el json necesario y publicarlo en el servidor. Y ya el servidor es seguro de acuerdo con las reglas especificadas en el archivo json, entregar√° la configuraci√≥n al dispositivo necesario o no dar√° informaci√≥n si el dispositivo est√° equivocado, o no cumple con los criterios especificados en este json.



Aquí está tal provisión de microservicio. Se llama sonata , el código fuente está disponible en el github, también hay una imagen acoplada lista para usar, un ejemplo del uso de acoplador aquí .


Características clave:


  • en cualquier caso, acceso limitado a la configuraci√≥n a tiempo, por defecto 10 minutos. Si desea que la configuraci√≥n vuelva a estar disponible, vuelva a publicar la configuraci√≥n nuevamente.


  • un formato para todos los proveedores, todos los ajustes se eliminan en sonata, env√≠a json estandarizado, configura cualquier equipo disponible.


  • todas las configuraciones emitidas para los dispositivos se registran, todas las √°reas problem√°ticas se pueden ver en el registro y ver errores


  • es posible usar un enlace com√ļn con token, cada tel√©fono recibe su propia configuraci√≥n especificando la direcci√≥n mac. O un enlace personal en clave.


  • Las API para administraci√≥n y aprovisionamiento se dividen en puertos


  • Pruebas Fue muy importante para m√≠ arreglar el formato de la configuraci√≥n emitida y cubrir todas las situaciones habituales de emisi√≥n de la configuraci√≥n con pruebas. Para que todo funcione con claridad.



Contras:


Hasta ahora, el cifrado de sonata no se ha utilizado. Es decir Por supuesto, puede comenzar a usar https poniendo nginx, por ejemplo, antes de sonata. Pero aqu√≠ est√°n los m√©todos patentados que a√ļn no est√°n involucrados. Por qu√© El proyecto a√ļn es joven, casi volc√≥ sus primeros cien dispositivos. Y, por supuesto, colecciono ideas, comentarios. Adem√°s, para que todo sea seguro de modo que las configuraciones no se puedan rastrear en la red, probablemente valga la pena molestarse con claves de cifrado, tls y un erizo con ellas, pero esto ser√° una continuaci√≥n.


Falta de IU. Quiz√°s este sea un inconveniente significativo para el usuario final, pero para el administrador del sistema, la utilidad de la consola es m√°s importante que una aplicaci√≥n completa. ¬ŅHab√≠a planes para hacer una utilidad de consola, pero no estoy seguro de si es necesaria?


Cual es el resultado?


Servidor web peque√Īo y simple para aprovisionar varios modelos de tel√©fonos con API para administraci√≥n.


Una vez m√°s, ¬Ņc√≥mo deber√≠a funcionar esto?


  1. Instala sonata.
  2. Formamos json-config y lo publicamos en sonata.
  3. Luego recibimos un enlace de sonata para el aprovisionamiento.
  4. Luego indicamos este enlace en el teléfono.
  5. El dispositivo ajusta la configuración

solo hay dos pasos en la operación posterior:


  1. Formamos una configuración json y la publicamos en sonata
  2. El dispositivo ajusta la configuración

¬ŅQu√© tipo de tel√©fonos se cargan?


Vendedores Grandstream, Fanvil, Yealink. Las configuraciones dentro del proveedor son m√°s o menos iguales, pero pueden diferir seg√ļn el firmware; puede ser necesario realizar pruebas adicionales.


¬ŅQu√© reglas se pueden establecer?


Por tiempo Puede especificar el tiempo hasta el cual la configuración estará disponible.
Por dirección mac. Cuando envía la configuración a través del enlace personal del dispositivo, también se verificará la dirección mac.
Por ip. Por dirección IP, desde donde se realizó la solicitud.


¬ŅC√≥mo interactuar con sonata?


A través de la API, realizando solicitudes http. La API estará disponible en su instalación. Porque Debido a que la API admite la especificación de swagger, puede usar la utilidad en línea para solicitudes de prueba a la API.


Ok, genial Cosa genial, ¬Ņc√≥mo intentarlo?


La forma más fácil es implementar una imagen acoplable basada en el repositorio de muestras sonata . El repositorio contiene instrucciones de instalación.


¬ŅY si conozco node.js?


Si tiene experiencia en el uso de JavaScript, descubrirá rápidamente cómo funciona todo aquí.


¬ŅSe desarrollar√° la sonata?


Logré parcialmente mis objetivos. El desarrollo adicional es una cuestión de mis tareas sobre el tema de la automatización de la configuración del teléfono. Todavía existe la oportunidad de expandir las configuraciones para personalizar los botones del teléfono, agregar las funciones de la libreta de direcciones, tal vez algo más, escribir en los comentarios.


Resumen y agradecimientos


Estaré encantado de sugerencias constructivas / objeciones / comentarios y preguntas, como bien puede ser algo incomprensiblemente descrito.


También agradezco a todos los colegas que ayudaron, aconsejaron, evaluaron, proporcionaron / donaron teléfonos para las pruebas. En realidad, muchas personas con las que hablé en el trabajo, en salas de chat y correos electrónicos participaron en el proyecto de manera diferente. Gracias por las ideas y pensamientos.

Source: https://habr.com/ru/post/445350/


All Articles