Askozia C贸mo funciona Autoprovisioning Plug & Play

Al desarrollar Askozia PBX, nos enfrentamos a la tarea de configurar autom谩ticamente los tel茅fonos y resolverlos a nuestra manera.

Autoprovisioning Plug & Play (PnP), esta tecnolog铆a es compatible con muchos fabricantes: Yealink, Snom, Fanvil.

Las principales ventajas de la configuraci贸n autom谩tica del tel茅fono:

  • Facilita la configuraci贸n inicial : no es necesario ir a la interfaz web de cada dispositivo. Es suficiente para indicar la correspondencia de la direcci贸n MAC del dispositivo y la cuenta en el servidor de autoajuste.
  • Simplifica el soporte : realmente es m谩s f谩cil si necesita cambiar la configuraci贸n del dispositivo. Controlamos la configuraci贸n nuevamente en el servidor
  • Es posible reducir la configuraci贸n al conjunto de c贸digos de estrella "* 911 * <SIP_ACC>"; en algunos casos, esta funci贸n simplemente no est谩 disponible. No todos los trabajadores de oficina podr谩n configurar un tel茅fono IP, pero marcar una combinaci贸n de n煤meros es una tarea simple.

Describamos c贸mo funciona Autoprovisioning Plug & Play. Al final del art铆culo, un enlace al c贸digo fuente de un peque帽o script PHP que implementa la funcionalidad del servidor PnP.

Estudio de caso


Tuvimos un caso interesante cuando presentamos la telefon铆a a uno de nuestros clientes. El principal problema era que el cliente estaba en otra ciudad. Al mismo tiempo, uno de los requisitos era que despu茅s de desempacar el paquete con los tel茅fonos y enchufarlos a la red, la telefon铆a deber铆a funcionar de inmediato.

El problema se resolvi贸 de manera relativamente simple. El cliente ha reservado una serie de direcciones IP para nosotros. Instalamos el equipo en nuestra oficina y lo empacamos en una caja y lo enviamos por mensajer铆a.

Usando la configuraci贸n autom谩tica del dispositivo, la tarea se volver铆a mucho m谩s simple.

Esquema PnP simplificado


El tel茅fono al comienzo del trabajo env铆a una solicitud de suscripci贸n SIP SUSCRIBIR a la direcci贸n 224.0.1.75 IP de multidifusi贸n.
Leer m谩s sobre 224.0.1.75
224.0.1.75: se trata de IP de multidifusi贸n (para multidifusi贸n) "reservada" para servidores SIP.
ver networksorcery.com/Enp/protocol/sip.htm
224.0.1.75 SIP, Protocolo de inicio de sesi贸n (todos los servidores).

En respuesta, espera recibir una respuesta de NOTIFICACI脫N con instrucciones de configuraci贸n.

imagen

SUSCRIBIRSE Ejemplo
2019/09/02 09:26:41.543856 172.16.32.148:5059 -> 224.0.1.75:5060 SUBSCRIBE sip:MAC0015657322ff@224.0.1.75 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 1 SUBSCRIBE Contact: <sip:MAC0015657322ff@172.16.32.148:5059> Max-Forwards: 70 User-Agent: Yealink SIP-T21P 34.72.14.6 Expires: 0 Event: ua-profile;profile-type="device";vendor="Yealink";model="T21D";version="34.72.14.6" Accept: application/url Content-Length: 0 


Los titulares m谩s importantes e interesantes.


  • De : la direcci贸n de amapola del dispositivo es 0015657322ff
  • Evento : describe exhaustivamente el dispositivo, el fabricante, el modelo y la versi贸n de firmware
  • Contacto - direcci贸n del dispositivo
  • Call-ID : este encabezado es interesante al configurar dispositivos DECT desde Yealink, transfiere el identificador de l铆nea (n煤mero de serie del tubo), delimitador " _ "

Una vez que el servidor PnP ha recibido dicha solicitud, debe responder

NOTIFY ejemplo
 2019/09/02 09:26:41.550125 172.16.32.153:57593 -> 172.16.32.148:5059 NOTIFY sip:172.16.32.148:5059 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 Max-Forwards: 20 Contact: <sip:172.16.32.148:5059;transport=UDP;handler=dum> From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 3 NOTIFY Content-Type: application/url Subscription-State: terminated;reason=timeout Event: ua-profile;profile-type="device";vendor="MIKO";model="MikoServerPnP";version="1.8" Content-Length: 40 http://172.16.32.153:84/0015657322ff.cfg 


En un mensaje de NOTIFICACI脫N, la informaci贸n m谩s valiosa se encuentra en el cuerpo del mensaje. Como regla general, en el cuerpo debe pasar un enlace para obtener el archivo de configuraci贸n:

 http://172.16.32.153:84/0015657322ff.cfg 

Si varios servidores PnP se ejecutan en la red, entonces qui茅n es el primero que responder谩 al dispositivo lo configurar谩.

El tel茅fono, al recibir NOTIFY, intenta cumplir con la solicitud en la direcci贸n especificada.

Ejemplo de solicitud y respuesta del servidor
 # curl -i http://172.16.32.153:84/0015657322ff.cfg HTTP/1.0 200 OK Content-type: text/plain Date: Mon, 02 Sep 2019 06:52:23 GMT Connection: close Accept-Ranges: bytes Last-Modified: Mon, 02 Sep 2019 06:25:02 GMT Content-length: 769 #!version:1.0.0.1 account.1.enable = 1 account.1.label = PnP (203) ... 


Un ejemplo de implementaci贸n del servidor est谩 disponible en github https://github.com/boffart/MikoServerPnP

Para que este servidor PnP funcione, debe:

  • PHP 7.1.9
  • Tomas de php
  • BusyBox v1.26.2
  • Las solicitudes de difusi贸n deben estar permitidas en la red

Caracter铆sticas del servidor PnP


  • Escucha las solicitudes enviadas a la direcci贸n ' 224.0.1.75:5060 '
  • Cuando se inicia, se inicia el servidor web ( busybox httpd )
  • Le permite crear una configuraci贸n de tel茅fono simplificada
  • Le permite enviar a Yealink NOTIFICAR para reiniciar

El uso de un servidor PnP le permite usar "Enlaces 煤nicos".


Supongamos que le damos el archivo por el enlace:

 http://172.16.32.153:84/0015657322ff.cfg 

El enlace directo habitual al archivo. Obviamente, esto NO es seguro. Conociendo la direcci贸n MAC del tel茅fono y la direcci贸n del servidor, puede intentar obtener una configuraci贸n con inicios de sesi贸n y contrase帽as.

Cuando se trabaja con un servidor PnP, es posible proporcionar un enlace 煤nico para cada solicitud de SUSCRIPCI脫N:

 http://172.16.32.153:84/?mac=0015657322ff&hash=0a67f5290 

Un ejemplo de una f贸rmula para calcular un hash:

 hash = md5(MAC + DATE + PID) 

PID es el ID de proceso del servidor PnP. Solo la ra铆z puede reconocerlo.
Elegir tal hash es pr谩cticamente imposible.

Si se produce una apelaci贸n a trav茅s de un enlace no v谩lido, entonces prohibimos la plaga.

Reiniciar Yealink NOTIFICAR significa sin autorizaci贸n


Si, si, sin autorizaci贸n .
No pude cerrar el dispositivo desde la versi贸n actual del firmware desde esta posibilidad.

Solo ejecuta el comando

 php -f MikoServerPnP.php socket_client_notify <IP_PBX> <PORT_SIP_PBX> <IP_PHONE> <PORT_PHONE> 

Y el tel茅fono se reiniciar谩. Al colgar dicho comando en cron puede lograr un efecto aterrador. Por supuesto, esto es posible si conocemos la direcci贸n IP y el puerto SIP del tel茅fono.

Un ejemplo de funci贸n PHP para enviar NOTIFICAR
  public static function socket_client_notify($ip_pbx, $port_pbx, $ip_phone, $port_phone):void { $phone_user = 'autoprovision_user'; $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $msg = "NOTIFY sip:{$phone_user}@{$ip_phone}:{$port_phone};ob SIP/2.0\r\n". "Via: SIP/2.0/UDP {$ip_pbx}:{$port_pbx};branch=z9hG4bK12fd4e5c;rport\r\n". "Max-Forwards: 70\r\n". "From: \"asterisk\" <sip:asterisk@{$ip_pbx}>;tag=as54cd2be9\r\n". "To: <sip:{$phone_user}@{$ip_phone}:{$port_phone};ob>\r\n". "Contact: <sip:asterisk@{$ip_pbx}:{$port_pbx}>\r\n". "Call-ID: 4afab6ce2bff0be11a4af41064340242@{$ip_pbx}:{$port_pbx}\r\n". "CSeq: 102 NOTIFY\r\n". "User-Agent: mikopbx\r\n". "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE\r\n". "Supported: replaces, timer\r\n". "Subscription-State: terminated\r\n". "Event: check-sync;reboot=true\r\n". "Content-Length: 0\r\n\n"; $len = strlen($msg); socket_sendto($sock, $msg, $len, 0, $ip_phone, $port_phone); socket_close($sock); } 


Configuraci贸n del servidor PnP


Ubicado en settings / settings.json

 { "url": "http://<pbx_host>:<http_port>/", "http_port": 84, "pbx_host": "172.16.32.153", "pbx_sip_port": "5060", "vm_extension": "*001", "feature_transfer": "**" } 

Lista blanca de MAC


Se puede describir en settings / mac_white.conf . Separador - avance de l铆nea.

Lista negra de MAC


Se puede describir en settings / mac_black.conf . Separador - avance de l铆nea.

Archivos de configuraci贸n del tel茅fono


Debe colocarse en el directorio configs .
Usando el servidor PnP, puede crear las configuraciones m谩s simples para Yeakink y Snom:

 php -f MikoServerPnP.php mk_config SIP_ACCAUNT SECRET MAC 

Materiales utiles


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


All Articles