Zoo VoIP — Aprovisionamiento

Introducción

Una vez, la dirección aprobó un experimento para implementar telefonía IP en nuestra oficina. Dado que mi experiencia en este campo era mínima, la tarea despertó un gran interés en mí y me sumergí en el estudio de diversos aspectos del tema. Al final de mi inmersión, decidí compartir los conocimientos adquiridos, con la esperanza de que a alguien le resulten útiles. Así que...

Datos de entrada

Se eligió e implementó Asterisk como la central telefónica IP. El parque de teléfonos consiste en dispositivos Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 y Dlink DPH-150S(E)/F3, Yealink T19 y T21. Esta variedad se debe a que, en el marco del experimento, se tomó la decisión de probar un poco de todo para formar una opinión sobre la relación precio/calidad/comodidad.

Tarea

Simplificar y unificar al máximo el proceso de configuración de nuevos dispositivos. Todos los teléfonos deben estar sincronizados en el tiempo, tener una agenda telefónica que se cargue desde servidores y proporcionar acceso a la configuración para el administrador.

La solución a esta tarea es simple: implementar la configuración automática de los teléfonos, conocida como Provisioning. De hecho, de eso hablaré en relación a mi implementación de esta maravillosa función.

Configuración de tftpd, dhcpd

Para distribuir la configuración a los teléfonos, elegí tftp como opción universal, compatible con todas las plataformas, fácil de configurar y gestionar.

No se necesitó configuración específica para tftp. Instalé el tftpd estándar y coloqué todos los archivos necesarios en su directorio raíz.
Coloqué los archivos de configuración en carpetas de acuerdo con el fabricante del teléfono. Sin embargo, el dispositivo de Cisco nunca accedió a su carpeta, así que tuve que almacenarlo en la raíz.

Para indicar a los teléfonos la ubicación del servidor tftp, utilicé option-66. Además, los dividí en clases separadas según el fabricante. Cada clase recibió su propio segmento de direcciones y una carpeta individual para los archivos de configuración. Por cierto, los dispositivos de D-link tuvieron que ser identificados por sus direcciones MAC, ya que no proporcionan información sobre el fabricante en la solicitud dhcp.

Fragmento de dhcpd.conf

# Указываем необходимые опции 
option option-66 code 66 = text;

class "panasonic" {
	match if substring (option vendor-class-identifier,0,9) = "Panasonic";
	option option-66 "10.1.1.50/panasonic/";
}
class "cisco" {
	match if substring (option vendor-class-identifier,0,36) = "Cisco Systems, Inc. IP Phone CP-7906";
	option option-66 "10.1.1.50/cisco/";
}

class "grandstream" {
 match if substring (option vendor-class-identifier,0,11) = "Grandstream";
 option option-66 "10.1.1.50/grandstream/";
}

class "dlink" {
	match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") or
	(binary-to-ascii (16,8,":",substring(hardware,1,4)) = "90:94:e4:72");
	option option-66 "10.1.1.50/dlink/";
}

class "yealink" {
                match if substring (option vendor-class-identifier,0,7) = "Yealink";
                option option-66 "10.1.1.50/yealink/";
        }

Los teléfonos tuvieron que ser excluidos manualmente del grupo general. De lo contrario, no querían ir a su 'rancho'.
Ejemplo de configuración de subred

subnet 10.1.1.0 netmask 255.255.255.0 {
        option routers 10.1.1.1;
        pool {
                deny members of "cisco";
                deny members of "panasonic";
                deny members of "dlink";
                range 10.1.1.230 10.1.1.240;
        }
        pool {
                allow members of "cisco";
                range 10.1.1.65 10.1.1.69;
        }
        pool {
                allow members of "panasonic";
                range 10.1.1.60 10.1.1.64;
        }
        pool {
                allow members of "dlink";
                range 10.1.1.55 10.1.1.59;
        }
}

Después de reiniciar todos los servicios involucrados, los teléfonos se dirigieron con confianza al servidor tftp asignado para obtener su configuración. Solo quedaba colocarlos allí.

Cisco 7906

Estos dispositivos vinieron en su paquete de fábrica. Tuve que reprogramarlos para hacerlos compatibles con Asterisk. Pero esa es otra historia. En este caso, para configurar el dispositivo, según las instrucciones, creé en la raíz del servidor tftp el archivo SEPAABBCCDDEEFF.cnf.xml. Donde AABBCCDDEEFF es la dirección MAC del dispositivo.

Ya se ha escrito sobre la configuración de los teléfonos Cisco varias veces, así que simplemente dejaré el archivo de configuración funcional.
Configuraciones para cisco

true
 SIP
 root
 ADMIN_PWD

 
 D-M-Y
 Hora Estándar Central del Pacífico
     
         
             10.1.1.4
              Unicast
          
     
 

   
 10.1.1.50
 
 2000
 5060
 5061
 
 10.1.1.50
   
 

 Deshabilitar


120
 

 
 true
 x-cisco-serviceuri-cfwdall
 x-cisco-serviceuri-pickup
 x-cisco-serviceuri-opickup
 x-cisco-serviceuri-gpickup
 x-cisco-serviceuri-meetme
 x-cisco-serviceuri-abbrdial
 false
 2
 true
 true
 2
 2
 0
 true
 false
 
 
 6
 10
 180
 3600
 5
 120
 120
 5
 500
 4000
 70
 true
 None
 
1
 false
 true
 false
 false
 none
 101
 3
avt
 3
 false
 false
 Teléfono Cisco
 2
 false
 15000
10
 true
 false
 16384
 32766

 
 9
 10.1.1.50
 5060
  2 
 3
 false
 3
 
 4
 5
 
 true
 true
 false
 true
 

 Usuario #103
 103
 103
 SIP_PWD
 
 
$num
5060
 184
 0
 dialplan.xml
 

 *0#
 true
 2
 


 false
 false
 1
 0
 1
 0
 0
 0
 1
 0
 1,7
 09:00
 12:00
 01:00
 1
 2
 10.1.1.50
 0
 100
 50
 
 0
 0
 5
 1
 10.1.1.50
 0
 0
 0
 0
 0
 0
 1
 1
 
1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37

 Ruso_Rusia_Federación
 ru_RU
 
 utf-8
 

 
 
 
 
1
 0
 
 http://10.1.1.50/provisioning/cisco-services.xml
 
 
 
 
 http://10.1.1.50/provisioning/cisco-services.xml
 96
 0
 96
 2
 0
 0
 
 3804
 <!-- 10.1.1.50 -->
  

 false
 1

D-Link DPH-150S/F3

Si estás a punto de comprar un teléfono de esta serie, ten cuidado, la auto-configuración solo es compatible con los dispositivos 150S/F3. En el dispositivo 150S/F2 que tengo, no encontré esa funcionalidad.

El archivo de configuración puede estar en formato xml o texto plano. Para xml, hay un requisito: la etiqueta debe estar al principio de la línea, de lo contrario, el parser la ignorará y el valor del parámetro correspondiente no cambiará.

Para configurar el teléfono se utilizan dos archivos. f0D00580000.cfg — para el almacenamiento de la configuración de todos los teléfonos y 00112233aabb.cfg (dirección MAC en minúsculas) para la configuración individual. Las configuraciones individuales, por supuesto, tienen mayor prioridad.

El conjunto completo de configuraciones cuenta con más de mil líneas; para no abrumar el artículo, describiré un conjunto mínimo y necesario de configuraciones.

Obligatorio es el nodo raíz VOIP_CONFIG_FILE y el nodo anidado, version. Las configuraciones se aplicarán solo si la versión del archivo es superior a la de las configuraciones actuales en el dispositivo. Puedes conocer este valor a través de la interfaz web del teléfono en la sección de mantenimiento (gestión del sistema). Para teléfonos con configuraciones de fábrica, en ambos casos es 2.0002. Además, la versión del archivo individual debe ser mayor que la del archivo general.

Primero proporcionaré el archivo con la configuración general para todos los teléfonos. En esencia, almacena todas las configuraciones, el archivo individual solo se encargará del número de teléfono y de la inscripción en la pantalla.

En los dos bloques que se presentan a continuación, se establecen los parámetros de zona horaria y sincronización de tiempo, el puerto inicial para RTP y se activa el puente de red entre los puertos WAN y LAN del dispositivo.

Fragmento nº 1

DHCP
2
1
1
0
VOIP
10000
200
10.1.1.4
1


0
60
12
1500


1
1

Los nombres de los parámetros de configuración son lo suficientemente "elocuentes" como para no ser descritos en detalle.
SIP para una línea

5060


SIP1
10.1.1.50
5060
3600
1
10.1.1.50
1
0
G711A,G711U,G722

Configuraciones de control remoto

23
80
0
443
1
0



Item1
10.1.1.152
10.1.1.160




Account1
admin
ADMIN_PWD
10


Account2
guest
GUEST_PWD
5

Configuraciones del teléfono

123
123

0
112
Company
5
1
30
0

1
0,,1
0
0
1


XML-PBook1
Phonebook
http://10.1.1.50/provisioning/dlink-phonebook.xml
:
0
0


friend,home,work,business,classmate,colleague

Todas las demás configuraciones quedarán "por defecto". Ahora, cualquier teléfono Dlink conectado a la red aceptará inmediatamente el conjunto de parámetros común a todos. Para establecer parámetros individuales para un dispositivo, se necesita un archivo separado. Solo es necesario indicar las configuraciones requeridas para el abonado específico.
configuraciones del abonado

2.0006



SIP1
Usuario #117
117
5060
117
SIP_PWD
3600
1
5060
117
SIP_PWD

Panasonic UT-KX123B

Estos dispositivos reciben configuraciones de una manera ligeramente diferente. La configuración se almacena en archivos de texto. El tamaño máximo del archivo de configuración es de 120 KB. Independientemente de la cantidad de archivos, su tamaño total no debe exceder los 120 KB.
El archivo de configuración consta de un conjunto de líneas, a las que se aplican las siguientes condiciones:

  • La primera siempre es una línea de comentario, que incluye la siguiente secuencia de caracteres (44 bytes):
    # Panasonic SIP Phone Standard Format File #
    La representación hexadecimal de esta secuencia:
    23 20 50 61 6E 61 73 6F 6E 69 63 20 53 49 50 20 50 68 6F 6E 65 20 53 74 61 6E 64 61 72 64 20 46 6F 72 6D 61 74 20 46 69 6C 65 20 23
    Para evitar la modificación accidental de la secuencia de caracteres establecida, se recomienda comenzar el archivo de configuración con la línea:
    # Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!
  • Los archivos de configuración deben terminar con una línea en blanco.
  • Cada línea debe terminar con la secuencia "".
  • La longitud máxima de una línea es de 537 bytes, incluida la secuencia "".
  • Las siguientes líneas se ignoran:
    • líneas que superan el límite de 537 bytes;
    • líneas en blanco;
    • líneas de comentarios que comienzan con el símbolo "#";
  • La línea de cada parámetro se escribe en la forma XXX="yyy" (XXX: nombre del parámetro, yyy: su valor). El valor debe ir entre comillas dobles.
  • No se permite dividir la línea de parámetros en varias líneas. Esto resultará en un error al procesar el archivo de configuración y, en consecuencia, en una falla durante la inicialización.
  • Los valores de algunos parámetros deben especificarse por separado para cada línea. Un parámetro con el sufijo "_1" en el nombre es el parámetro para la línea 1; "_2" es para la línea 2, etc.
  • La longitud máxima del nombre de un parámetro es de 32 caracteres.
  • La longitud máxima del valor de un parámetro es de 500 caracteres, excepto los caracteres de comillas dobles.
  • No se permiten espacios en la cadena, excepto cuando el valor incluye un carácter de espacio.
  • Se pueden especificar valores para algunos parámetros como 'vacíos' para establecer un valor vacío del parámetro.
  • Los parámetros se especifican sin un orden definido.
  • Si se especifica el mismo parámetro más de una vez en el archivo de configuración, se aplicará el valor especificado primero.

Este conjunto de requisitos para el archivo de configuración, francamente, me ha decepcionado. En mi opinión, la implementación de la gestión de los el servidor teléfonos Panasonic es extremadamente incómoda. En este aspecto, el teléfono pierde significativamente frente a los demás.
Al encender el dispositivo por primera vez (o después de restablecer a la configuración de fábrica), intenta cargar el llamado archivo de producto (en este caso es KX-UT123RU.cfg), que debe contener las rutas a los demás archivos de configuración.
Archivo de producto# Panasonic SIP Phone Standard Format File # DO NOT CHANGE THIS LINE!

CFG_STANDARD_FILE_PATH=«tftp://10.1.1.50/panasonic/{mac}.cfg»
CFG_PRODUCT_FILE_PATH=«tftp://10.1.1.50/panasonic/KX-UT123RU.cfg»
CFG_MASTER_FILE_PATH=«tftp://10.1.1.50/panasonic/master.cfg»

Después de esto, el teléfono mostrará un mensaje en la pantalla indicando que la preparación se ha completado con éxito y esperará a que lo reinicien. Después de reiniciar, comenzará a procesar los archivos de configuración que tiene asignados.

En el archivo master.cfg, se recomienda especificar configuraciones comunes para todos los teléfonos. Al igual que en el caso de Dlink, solo indicaré algunos parámetros. Los nombres de los otros parámetros y sus valores se pueden encontrar en la documentación en el sitio web del fabricante.
master.cfg############################################################
# System Settings #
############################################################
## Login Account Settings
ADMIN_ID=«admin»
ADMIN_PASS=«ADMIN_PWD»
USER_ID=«user»
USER_PASS=«USER_PWD»

## System Time Settings
NTP_ADDR=«10.1.1.4»
TIME_ZONE=«660»
DST_ENABLE=«N»
DST_OFFSET=«60»
DST_START_MONTH=«3»
DST_START_ORDINAL_DAY=«2»
DST_START_DAY_OF_WEEK=«0»
DST_START_TIME=«120»
DST_STOP_MONTH=«10»
DST_STOP_ORDINAL_DAY=«2»
DST_STOP_DAY_OF_WEEK=«0»
DST_STOP_TIME=«120»
LOCAL_TIME_ZONE_POSIX=""

## Syslog Settings
SYSLOG_ADDR=«10.1.1.50»
SYSLOG_PORT=«514»
SYSLOG_EVENT_SIP=«6»
SYSLOG_EVENT_CFG=«6»
SYSLOG_EVENT_VOIP=«6»
SYSLOG_EVENT_TEL=«6»

## Provisioning Settings
OPTION66_ENABLE=«Y»
OPTION66_REBOOT=«N»
PROVISION_ENABLE=«Y»
CFG_STANDARD_FILE_PATH=«tftp://10.1.1.50/panasonic/{mac}.cfg»
CFG_PRODUCT_FILE_PATH=«tftp://10.1.1.50/panasonic/KX-UT123RU.cfg»
CFG_MASTER_FILE_PATH=«tftp://10.1.1.50/panasonic/master.cfg»

############################################################
# Network Settings #
############################################################
## IP Settings
CONNECTION_TYPE=«1»
HOST_NAME=«UT123»
DHCP_DNS_ENABLE=«Y»
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""

## DNS Settings
DNS_QRY_PRLL=«Y»
DNS_PRIORITY=«N»
DNS1_ADDR=«10.1.1.1»
DNS2_ADDR=""

## HTTP Settings
HTTPD_PORTOPEN_AUTO=«Y»
HTTP_VER=«1»
HTTP_USER_AGENT=«Panasonic_{MODEL}/{fwver} ({mac})»
HTTP_SSL_VERIFY=«0»
CFG_ROOT_CERTIFICATE_PATH=""

## XML Application Settings
XML_HTTPD_PORT=«6666»
XMLAPP_ENABLE=«Y»
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL=«10.1.1.50/provisioning/panasonic-phonebook.xml»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""

En el archivo de configuración individual del dispositivo, por tradición, solo se mantienen los ajustes del abonado.
aabbccddeeff.cfgDISPLAY_NAME_1=«Usuario #168»

PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Habilitado»
PROFILE_ENABLE_1=«Habilitado»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»

Grandstream GXP-1400

Los parámetros de estos teléfonos se almacenan en un único archivo xml llamado cfg{mac}.xml. O en un archivo de texto normal llamado cfg{mac}. Este teléfono solo solicita el archivo de configuración individual, por lo que optimizar los ajustes al sacarlos a un archivo común no será posible. Otra característica de la configuración de los Grandstream es la nomenclatura de los parámetros. Todos están numerados y se designan como P###. Por ejemplo:

P1650 – se encarga de la interfaz web para gestionar el teléfono (0 – HTTPS, 1 – HTTP)
P47 – dirección del servidor SIP para la conexión.

Si la configuración se almacena en un archivo de texto, los parámetros no requieren ningún agrupamiento y pueden ir en cualquier orden. Las líneas que comienzan con # se consideran comentarios.

Si los ajustes se presentan en formato xml, deben estar anidados dentro del nodo , que a su vez debe estar anidado dentro de . Todos los parámetros se registran en forma de etiquetas correspondientes con el valor del parámetro dentro.
Ejemplo de configuración

1
    
    109
    
    109
    
    109
    
    SIP_PWD
    
    Usuario# 109

        10.1.1.50
        2
   10.1.1.50
   0
   ADMIN_PWD
   USER_PWD
   es
        0
        10.1.1.50/grandstream
   1
   TZc-11
   10.1.1.4
        1
        http://10.1.1.50/provisioning/grandstream
        30

Yealink T19 y T21

Los dispositivos de estos modelos admiten archivos de configuración individuales para dispositivos y archivos comunes para modelos. En mi caso, tuve que ubicar los parámetros generales en los archivos y000000000031.cfg y y000000000034.cfg respectivamente. Los archivos de configuración individuales se nombran de acuerdo con la dirección MAC: 00112233aabb.cfg.

La configuración para los teléfonos Yealink se almacena en formato de texto. Los únicos requisitos obligatorios son la presencia en la primera línea de la versión del archivo, en el formato #!version:1.0.0.1.

Todos los parámetros se registran como parámetro = valor. Los comentarios deben comenzar con el símbolo "#". Los nombres de los parámetros y sus valores se pueden encontrar en la documentación del sitio web del fabricante.
configuración general#!version:1.0.0.1
#Configure the WAN port type; 0-DHCP (default), 1-PPPoE, 2-Static IP Address;
network.internet_port.type = 0
#Configure the PC port type; 0-Router, 1-Bridge (default);
network.bridge_mode = 1
#Configure the access type of the web server; 0-Disabled, 1-HTTP & HTTPS(default), 2-HTTP Only, 3-HTTPS Only;
network.web_server_type = 3
#Configure the maximum local RTP port. It ranges from 0 to 65535, the default value is 11800.
network.port.max_rtpport = 10100
#Configure the minimum local RTP port. It ranges from 0 to 65535, the default value is 11780.
network.port.min_rtpport = 10000
security.user_name.admin = root
security.user_password = root:ADMIN_PWD
security.user_name.user = user
security.user_password = user:USER_PWD
#Specify the web language, the valid values are: English, Chinese_S, Turkish, Portuguese, Spanish, Italian, French, Russian, Deutsch and Czech.
lang.wui = Ruso
#Specify the LCD language, the valid values are: English (default), Chinese_S, Chinese_T, German, French, Turkish, Italian, Polish, Spanish and Portuguese.
lang.gui = Ruso
#Configure the time zone and time zone name. The time zone ranges from -11 to +12, the default value is +8.
#The default time zone name is China(Beijing).
#Refer to Yealink IP Phones User Guide for more available time zones and time zone names.
local_time.time_zone = +11
local_time.time_zone_name = Vladivostok
#Configure the domain name or the IP address of the NTP server. The default value is cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#Configure the logo mode of the LCD screen; 0-Disabled (default), 1-System logo, 2-Custom logo;
phone_setting.lcd_logo.mode = 1
#Configure the access URL and dispaly name of the remote phonebook. X ranges from 1 to 5.
remote_phonebook.data.1.url = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = Agenda telefónica
features.remote_phonebook.flash_time = 3600

configuraciones individuales#!version:1.0.0.1
#Enable or disable the account1, 0-Disabled (default), 1-Enabled;
account.1.enable = 1
#Configure the label displayed on the LCD screen for account1.
account.1.label = Teléfono de prueba
#Configure the display name of account1.
account.1.display_name = Usuario 998
#Configure the username and password for register authentication.
account.1.auth_name = 998
account.1.password = 998
#Configure the register user name.
account.1.user_name = 998
#Configure the SIP server address.
account.1.sip_server_host = 10.1.1.50
#Specify the port for the SIP server. The default value is 5060.
account.1.sip_server_port = 5060

Como resultado, gracias a la maravillosa función de auto-provisionamiento, prevista en los teléfonos que mencioné, no hubo ningún problema al conectar nuevos dispositivos a la red. Todo se redujo a averiguar la dirección MAC del teléfono y generar el archivo de configuración por plantilla.

Espero que hayas leído hasta el final y hayas sacado provecho de lo leído.

Gracias por su atención.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster