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.75224.0.1.75: se trata de IP de multidifusi贸n (para multidifusi贸n) "reservada" para servidores SIP.
ver
networksorcery.com/Enp/protocol/sip.htm224.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.

SUSCRIBIRSE Ejemplo2019/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/MikoServerPnPPara 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