martes, 9 de septiembre de 2014

Auto Provisioning / Config - Telefonos IP Grandstream

Una vez mas amigos virtuales les traigo un poco de pelotudeces cuando estoy aburrido conocimiento que queria compartir con ustedes.
Hoy les voy a mostrar como configurar automaticamente los telefonos IP de la marca Grandstream, en mi caso en la oficina ya hay aproximadamente 60 internos y es medio engorroso el mantenimiento. Con esta herramienta literalmente es una PAVADA hacerlo. La configuracion se maneja desde un servidor centralizado y los telefonos se actualizan automaticamente cada vez que se bootean .

Elementos necesarios


*1 servidor dhcp como la gente
*1 servidor tftp
*1 o mas telefonos Grandstream
*1 servidor de telefonia ip (asterisk, elastix, etc etc etc).
*jdk instalada en el server que contenga los scripts (preferentemente /usr/local/java )


Como funciona?

Primero se configura el dhcp que tengamos en nuestra red, agregar la opcion 66 con la ip del servidor tftp que tengamos en nuestra lan.  Esta opcion es particular en cada dhcp, por ejemplo yo uso pfsense y desde la gui se configura.

Al hacer esto, los telefonos al bootear van a buscar un archivo llamado cfgXXXXXXXXXXXX (donde XXXXXXXXX es el numero de macaddress del telefono).
Lo que basicamente debemos hacer es provisionar de esos archivos a cada telefono. Para esto Grandstream ofrece una herramienta de configuracion para generar los archivos (http://www.grandstream.com/index.php/support/tools), pero es una cagada un poco limitada a la hora de generar muchas configuraciones a la vez.

Gracias a mi amigo personal y python estrella Enrique, se resolvio mediante un script en python y un archivo csv, que es donde van las variables a configurar. En otro archivo llamado cfgMAC es donde se configuran los datos estaticos de configuracion, como se muestra a continuacion:
#-----------------------------------------------------------------------------
# You must change this section for your phone
# Compatible with Grandstream GXP and GXV series phones
#-----------------------------------------------------------------------------
# Admin password for web interface
P2 = phoneadmin1
# SIP Server
P47 = asterisk.ejant.edu
# Outbound Proxy
P48 = asteriskejant.edu
# SIP User ID
P35 = $EXT
# Authentication ID
P36 = $USER
# Authentication password
P34 = $SECRET
# NAT Traversal. 0 - yes, 1 - no
P52 = 0
# STUN server
P76 =
#-----------------------------------------------------------------------------
# Network settings
#-----------------------------------------------------------------------------
# DHCP support. 0 - yes, 1 - no
P8 = 1
# PPPoE support. PPPoE user ID
P82 =
# PPPoE password
P83 =
# IP Address. Ignore if DHCP or PPPoE is used
P9 = 192
P10 = 168
P11 = 11
P12 = $IP
# Subnet mask. Ignore if DHCP or PPPoE is used
P13 = 255
P14 = 255
P15 = 248
P16 = 0
# Router. Ignore if DHCP or PPPoE is used
P17 = 192
P18 = 168
P19 = 10
P20 = 1
# DNS 1. Ignore if DHCP or PPPoE is used
P21 = 192
P22 = 168
P23 = 10
P24 = 12
# DNS 2. Ignore if DHCP or PPPoE is used
# IP Address. Ignore if DHCP or PPPoE is used
P9 = 192
P10 = 168
P11 = 11
P12 = 4
# Subnet mask. Ignore if DHCP or PPPoE is used
P13 = 255
P14 = 255
P15 = 248
P16 = 0
# Router. Ignore if DHCP or PPPoE is used
P17 = 192
P18 = 168
P19 = 10
P20 = 1
# DNS 1. Ignore if DHCP or PPPoE is used
P21 = 192
P22 = 168
P23 = 10
P24 = 12
# DNS 2. Ignore if DHCP or PPPoE is used
P25 = 192
P26 = 168
P27 = 10
P28 = 3
# Firmware Upgrade Via. 0 - TFTP Upgrade,  1 - HTTP Upgrade, 2 - HTTPS Upgrade
P212 = 0
# Firmware Server Path
P192 = tftp.ejant.edu

# Config Server Path
P237 = tftp.ejant.edu


# Use Random Port. 0 - no, 1 - yes
P78 = 0

# Local SIP port (default 5060)
P40 = 5060

# Local RTP port (1024-65535, default 5004)
P39 = 5004




Basicamente el script completa las variables que faltan ($IP, $EXT,$NAME,$USER,$SECRET) con los datos que tiene el archivo config.csv:

MAC,IP,EXT,USER,SECRET,NAME
000b821caaa8,16,601,601,5454,Demo User
000b821caab8,17,602,602,5454,Demo User

Por cada interno agregar una linea.

La aplicacion la bajan de este link 

Descomprimir en /opt

cd grandstream

y ahi van a encontrar los siguientes archivos:

*cfgMAC (es el archivo main de configuracion)
*config.csv (tiene los datos variables)
*config_generator.py
*configs (carpeta donde se genera los archivos de config)
*configs_bin (carpeta donde se encriptan los archivos para subir)
*generador.sh (binario para ejecutar)

Nota: el archivo generador.sh copia los archivos generados en /tftpboot en caso de necesitar que se copie en otro lado

una vez hecho el config.csv, seteados los parametros en el archivo cfgMAC... ejecutar generador.sh


[root@joshua grandstream]# ./generador.sh 
generando archivos.... aguarde

copiando archivos generados al directorio /tftpboot
listo!

si vamos al directorio /tftpboot veremos los archivos creados

-rw-r--r--   1 root root  688 Sep  9 12:25 cfg000b825b8c46
-rw-r--r--   1 root root  704 Sep  9 12:25 cfg000b825b8c43


y si todo sale bien....

 in.tftpd[18523]: RRQ from 192.168.11.61 filename cfg000b825b8c46


Listo, el telefono toma la config automaticamente se reinicia y se configura solo.



Espero que les sirva, y no se olviden, compartir es amor (L)(L)(L)

4 comentarios:

  1. Tarde toda la tarde intentando que funcionara y no lo habia logrado. Por fin con este post lo he conseguido. Muhcas gracias

    ResponderEliminar
  2. Hola, gracias por la info! tendrás la posibilidad de volver a subir el programita, que fue borrado de MEGA? Gracias!

    ResponderEliminar
  3. Hola Gracias por los comentarios, seria de gran ayuda que resubieras los archivos pues el enlace esta roto.

    ResponderEliminar
  4. Hola, gracias por la info! tendrás la posibilidad de volver a subir el programita, que fue borrado de MEGA? Gracias!

    ResponderEliminar