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