Instalar chan_dongle en Isabel 4 con asterisk 11

Para los que no lo sepan Issabel PBX es el proyecto que continuo con el legado del extinto proyecto elastix, muchos colaboradores del anterior proyecto se sumaron en una nueva aventura y dieron forma a Issabel una solución PBX al mero estilo de Elastix: fácil de manejar e intuitiva en su configuración.

En este manual explicare como instalar chan_dongle para tener un Gateway GSM operativo al 100% en conjunto con Isabbel PBX, no entrare en tema en como instalar Issabel puesto que existen infinidad de manuales e internet para poder instalar Issabel, por lo cual, partiré que ya tienen Issabel PBX funcionando y con una sesión de root lista.

NOTA: A día de hoy Issabel PBX se encuentra en su version 47, que nos brinda la posibilidad de realizar la instalación con diversas versiones de asterisk, para este manual emplee la version 11 (como lo indica el título del manual).

issabel-pbx-4-chan_dongle
issabel-pbx-4-chan_dongle

Configurando e instalando chan_dongle en Issabel 4

Para comenzar con la instalación deberemos instalar algunas dependencias:

yum install git

Después dentro del directorio de /root/ (por practicidad) procederemos a clonar el repositorio de chan_dongle:

[root@issabel ~]# git clone https://github.com/wdoekes/asterisk-chan-dongle

Después empezaremos el proceso de compilación:

[root@issabel asterisk-chan-dongle]# ./bootstrap
configure.ac:6: installing './config.guess'
configure.ac:6: installing './config.sub'
configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'

Despues:

[root@issabel asterisk-chan-dongle]# ./configure --with-astversion=11.25.3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for strip... strip
checking for rm... rm
checking for library containing iconv... none required

Despues:

[root@issabel asterisk-chan-dongle]# make
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT app.o -MF .app.o.d -MP -o app.o -c app.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_command.o -MF .at_command.o.d -MP -o at_command.o -c at_comman
d.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_parse.o -MF .at_parse.o.d -MP -o at_parse.o -c at_parse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_queue.o -MF .at_queue.o.d -MP -o at_queue.o -c at_queue.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_read.o -MF .at_read.o.d -MP -o at_read.o -c at_read.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_response.o -MF .at_response.o.d -MP -o at_response.o -c at_res
ponse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT chan_dongle.o -MF .chan_dongle.o.d -MP -o chan_dongle.o -c chan_d
ongle.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT channel.o -MF .channel.o.d -MP -o channel.o -c channel.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT char_conv.o -MF .char_conv.o.d -MP -o char_conv.o -c char_conv.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cli.o -MF .cli.o.d -MP -o cli.o -c cli.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT helpers.o -MF .helpers.o.d -MP -o helpers.o -c helpers.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT manager.o -MF .manager.o.d -MP -o manager.o -c manager.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT memmem.o -MF .memmem.o.d -MP -o memmem.o -c memmem.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT ringbuffer.o -MF .ringbuffer.o.d -MP -o ringbuffer.o -c ringbuffe
r.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cpvt.o -MF .cpvt.o.d -MP -o cpvt.o -c cpvt.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT dc_config.o -MF .dc_config.o.d -MP -o dc_config.o -c dc_config.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT pdu.o -MF .pdu.o.d -MP -o pdu.o -c pdu.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT mixbuffer.o -MF .mixbuffer.o.d -MP -o mixbuffer.o -c mixbuffer.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT pdiscovery.o -MF .pdiscovery.o.d -MP -o pdiscovery.o -c pdiscover
y.c
gcc -shared -Xlinker -x -o chan_dongle.so app.o at_command.o at_parse.o at_queue.o at_read.o at_response.o chan_dongle.o channel.o char_conv.o cli.o helpers.o manager.o memmem.o ringbuffer.o cpvt.o dc_config.o pdu.o mixbuffer.o pdiscovery.o

Despues:

[root@issabel asterisk-chan-dongle]# make install
strip chan_dongle.so
/usr/bin/install -c -m 644 chan_dongle.so /usr/lib64/asterisk/modules

Después una vez generado el modulo, procederemos a copiarlo al directorio de asterisk:

cp /root/asterisk-chan-dongle/etc/dongle.conf /etc/asterisk/

Después ingresaremos a asterisk y cargaremos el modulo recién compilado:

asterisk –rv
Connected to Asterisk 11.25.3 currently running on issabel (pid = 9216)
issabel*CLI> module load chan_dongle.so
Loaded chan_dongle.so
== Parsing '/etc/asterisk/dongle.conf': Found
[2020-01-31 12:37:05] NOTICE[11486]: chan_dongle.c:1588 reload_config: [dongle0] Loaded device
== Registered channel type 'Dongle' (Huawei 3G Dongle Channel Driver)
== Registered application 'DongleStatus'
== Registered application 'DongleSendSMS'
== Registered application 'DongleSendUSSD'
== Manager registered action DongleShowDevices
== Manager registered action DongleSendUSSD
== Manager registered action DongleSendSMS
== Manager registered action DongleSendPDU
== Manager registered action DongleSetCCWA
== Manager registered action DongleReset
== Manager registered action DongleRestart
== Manager registered action DongleStop
== Manager registered action DongleStart
== Manager registered action DongleRemove
== Manager registered action DongleReload

En este instante, deberemos conectar nuestro modem y en “teoría” debería de funcionar pero resulta que nos arroja un error:

[dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:37:35] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:37:35] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory
issabel*CLI>
-- [dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:37:50] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:37:50] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory
-- [dongle0] Trying to connect on /dev/ttyUSB2...
[2020-01-31 12:38:05] ERROR[11487]: chan_dongle.c:137 lock_create: open('/var/lock/LCK..ttyUSB2') failed: Permission denied
[2020-01-31 12:38:05] WARNING[11487]: chan_dongle.c:222 opentty: unable to open /dev/ttyUSB2: No such file or directory

Esto hace alusión a que el dispositivo /dev/ttyUSBX no puede ser accedido por asterisk, esto es un tema de permisos por lo que debemos de cambiarle permisos al dispositivo, esto lo logramos con:

[root@issabel asterisk-chan-dongle]# chmod 777 /dev/ttyUSB*

Donde después volveremos a ingresar a asterisk y nos percataremos que ya está funcionando y operativo nuestro modem:

-- [dongle0] Dongle has connected, initializing...
-- [dongle0] Dongle initialized and ready
issabel*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 27 0 0 weex E153 11.609.18.00.00 861435000361846 334030882534042 Unknown
issabel*CLI>
issabel*CLI>

Configurar Isabel vía Web para llamar a travez de chan_dongle

Ahora una vez que está configurado y cargado el módulo de chan_dongle procedemos a acceder a la interface web de Issabel para poder ejecutar llamadas a través de nuestro nuevo gateway GSM.

Lo primero que haremos será generar una extensión, esto lo realizaremos (como en el viejo Elastix) dentro de:

PBX > Configuración PBX > Extensiones > Añadir una extensión > Dispositivo SIP genérico > Enviar

No voy a explicar cómo crear una extensión dentro de Issabel/Elastix porque es algo bastante documentado en internet, pero solo mencionare que es fundamental tener presente el usuario/número de extensión y el password generado o el secret (como lo nombra Issabel).

extension-Issabel-PBX
extension-Issabel-PBX

Para validar que nuestra extensión configurada se registró de manera correcta en nuestro PBX veremos un mensaje como el siguiente en la consola:

Registered SIP '1337' at 172.16.151.1:59107
> Saved useragent "Z 5.3.5 rv2.9.26-mod" for peer 1337
[2020-01-31 15:19:51] NOTICE[9341]: chan_sip.c:23892 handle_response_peerpoke: Peer '1337' is now Reachable. (1ms / 2000ms)

Una vez que tenemos registrada nuestra extensión generaremos una troncal, esto lo realizaremos en:

PBX > Configuración PBX > Básico > Troncales > Añadir línea troncal personalizada

troncal-GSM-Issabel
troncal-GSM-Issabel

Donde los datos importantes serán el nombre de la troncal (para temas de identificación/control) y la “Cadena de marcación peronalizada”, que como vemos en la imagen es:

dongle/dongle0/$OUTNUM$

Esto es de suma importancia para que salgan las llamadas.
Después de realizado esto procederemos a generar una “Ruta Saliente” esto lo podremos efectuar desde:
PBX > Configuración PBX > Básico > Rutas Salientes > Añadir ruta

ruta-de-salida-Issabel-GSM
ruta-de-salida-Issabel-GSM

Donde los datos más importantes serán: “Dial Patterns that will use this Route” que básicamente es la coincidencia en la marcación, en este caso emplee un “punto” que nos dice que todo lo que se marque saldrá por ahí, de igual forma, otro campo importante es “Trunk Sequence for Matched Routes” que es la ruta que empleara para sacar el tráfico, en la imagen aparece seleccionada la troncal chan_dongle porque es así como nombre la troncal personalizada en el paso anterior.

Una vez efectuados todos los pasos que se mencionaron anteriormente, en la consola de asterisk podremos observar la correcta salida de las llamadas cuando marcamos a un número cualquiera des nuestra extension: 5556581111 (una dependencia de gobierno aquí en MX).

-- Goto (macro-dialout-trunk,s,29)
-- Executing [s@macro-dialout-trunk:29] Set("SIP/1337-00000000", "the_num=5556581111") in new stack
-- Executing [s@macro-dialout-trunk:30] Dial("SIP/1337-00000000", "dongle/dongle0/5556581111,300,T") in new stack
-- Called dongle/dongle0/5556581111
-- Dongle/dongle0-0100000000 is making progress passing it to SIP/1337-00000000
> 0x7f0a1c03bfd0 -- Strict RTP switching source address to 172.16.151.1:8000
> 0x7f0a1c03bfd0 -- Strict RTP learning complete - Locking on source address 172.16.151.1:8000
-- Dongle/dongle0-0100000000 answered SIP/1337-00000000

De esta forma ya tendríamos configurado chan_dongle e Issabel y se encontrarían listos para sacar cualquier cantidad de tráfico que deseemos. Para cualquier duda o comentario puedes escribirlo en la sección de comentarios y con gusto responderé. O en su caso en la sección de contacto si tu duda es muy específica.

Chan_dongle en asterisk 13 y superiores

Hace algunos años escribi un post donde explique de una manera muy detallada como hacer funcionar chan_dongle en dupla con asterisk para poder tener un telular, que como vimos más tarde se podría hacer crecer para generar un Gateway GSM medianamente decente.

Gateway GSM con asterisk
Fuente : http://wiki.e1550.mobi

La información en su momento funcionaba puesto que por aquellos años (2014 aproximadamente) el lanzamiento de Asterisk 13 era relativamente reciente y esa versión en particular de asterisk no era que se empleara con regularidad (por ser muy fresca), ahora, algunos años después tras intentar efectuar una instalación me percate que dicho proyecto ya no era del todo funcional por una infinidad de errores de compilación que generaba.

Por lo cual, recientemente encontré un fork bastante funcional del proyecto original en Github que esta justamente pensado para versiones recientes de asterisk y los kernels modernos, por lo cual, proceso a compartir el nuevo procedimiento de instalación para dejar funcionando chan_dongle y asterisk de una manera óptima.

Yo particularmente lo probé en asterisk 16 por lo cual, para versiones anteriores no debería generar mayor problema, incluso para la versión 17 de asterisk (personalmente yo no la ocupo puesto que no es LTS), una vez que se tiene el contexto entremos en materia.

Manual para poder instalar chan_dongle en versiones recientes de Asterisk

Emplee una distribución basada en Debian (Raspbian) aunque esta manual aplica para sistemas hijos de este sistema como: Ubuntu, Linux Mint, Kali Linux, etc.

Antes de comenzar propiamente con la configuración de chan_dongle debemos instalar algunas dependencias necesarias para poder evitarnos futuros dolores de cabeza, sin más, procederemos a instalarlas:

apt install build-essential automake autoconf asterisk asterisk-dev

Una vez instaladas las dependencias estaremos listos para proceder a instalar chan_dongle.
Para ello nos dirigiremos al repositorio fork del proyecto original en Github y clonaremos el proyecto:

git clone https://github.com/wdoekes/asterisk-chan-dongle

O en el espejo que genere en mi sitio: Mirror Chan_dongle

Des pues nos dirigiremos dentro de la carpeta que nos generó git:

cd asterisk-chan-dongle

En este punto ya estaremos listos para poder compilar el software, pero antes de ello debemos de tener presente que versión de asterisk tenemos instalada con el siguiente comando:

asterisk -V
Asterisk 16.2.1~dfsg-1+deb10u1

Como apreciamos la versión que tenemos instalada es la 16.2.1
Ahora que tenemos la versión de asterisk instalada en nuestro sistema procedemos a efectuar la compilación de chan_dongle, ingresando el siguiente comando:

./bootstrap

Después de ello emplearemos la versión de asterisk que en su momento obtuvimos:

./configure --with-astversion=16.2.1

Y efectuara el proceso como se aprecia en la siguiente salida:

root@raspberrypi:~/asterisk-chan-dongle# ./configure --with-astversion=16.2.1
checking build system type... armv6l-unknown-linux-gnueabihf
checking host system type... armv6l-unknown-linux-gnueabihf
checking target system type... armv6l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for strip... strip
checking for rm... rm
checking for library containing iconv... none required
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes

Después del paso anterior procederemos a:

make

Y nos mostrara una salida similar a la siguiente:

root@raspberrypi:~/asterisk-chan-dongle# make
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT app.o -MF .app.o.d -MP  -o app.o -c app.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_command.o -MF .at_command.o.d -MP  -o at_command.o -c at_comman
d.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_parse.o -MF .at_parse.o.d -MP  -o at_parse.o -c at_parse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_queue.o -MF .at_queue.o.d -MP  -o at_queue.o -c at_queue.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_read.o -MF .at_read.o.d -MP  -o at_read.o -c at_read.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT at_response.o -MF .at_response.o.d -MP  -o at_response.o -c at_res
ponse.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT chan_dongle.o -MF .chan_dongle.o.d -MP  -o chan_dongle.o -c chan_d
ongle.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT channel.o -MF .channel.o.d -MP  -o channel.o -c channel.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT char_conv.o -MF .char_conv.o.d -MP  -o char_conv.o -c char_conv.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT cli.o -MF .cli.o.d -MP  -o cli.o -c cli.c
gcc -g -O2 -O6 -Wno-old-style-declaration -I. -DAST_MODULE_SELF_SYM=__internal_chan_dongle_self -D_GNU_SOURCE -I/usr/include -I/usr/include -DHAVE_CONFIG_H  -fvisibility=hidden -fPIC -Wall -Wextra -MD -MT helpers.o -MF .helpers.o.d -MP  -o helpers.o -c helpers.c
helpers.c: In function ‘send_reset’:
helpers.c:158:111: warning: cast between incompatible function types from ‘int (*)(struct cpvt *)’ to ‘int (*)(struct cpvt *, const char *, const char *, unsigned int,  int,  void **)’ [-Wcast-function-type]

Una vez finalizado el proceso deberemos continuar con:

make install

Cuya salida será:

root@raspberrypi:~/asterisk-chan-dongle# make install
strip chan_dongle.so
/usr/bin/install -c -m 644 chan_dongle.so /usr/lib/asterisk/modules

A estas alturas del partido ya tendremos nuestro módulo de asterisk listo para hacer funcionar nuestro amado chan_dongle.


Pero antes de ello debemos tener presente que para que chan_dongle funcione requiere de un archivo de configuración, donde realizando una búsqueda del mismo nos percatamos que estará en:

/root/asterisk-chan-dongle/etc/dongle.conf

Como nos lo indico la búsqueda realizada:

root@raspberrypi:~/asterisk-chan-dongle# find / -name "*dongle.conf*"
/root/asterisk-chan-dongle/etc/dongle.conf

Ahora procederemos a copiar dicho archivo de configuración al directorio de asterisk por medio del siguiente comando:

cp /root/asterisk-chan-dongle/etc/dongle.conf /etc/asterisk/

En teoría ya tendríamos chan_dongle casi listo para funcionar pero antes de ello deberíamos conectar nuestro Modem usb Huawei (yo particularmente encuentro muy útil el Huawei E153) y validar que puerto se le asigno por medio del siguiente comando:

root@raspberrypi:/home/pi# dmesg | grep ttyUSB
[   20.588870] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB0
[   20.619440] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   20.632078] usb 1-1.3.1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   20.668550] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB3
[   20.697946] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB4
[   20.707379] usb 1-1.3.2.1: GSM modem (1-port) converter now attached to ttyUSB5

Cabe mencionar que la asignación de los puertos es secuencial, por ejemplo, yo tengo 2 modems conectados donde cada modem recibe 3 puertos, es decir: al modem 1 le corresponde ttyUSB0, ttyUSB1,ttyUSB2 y al modem 2 le corresponde ttyUSB3, ttyUSB4 y ttyUSB5 respectivamente. Una vez que tengamos certeza de los puertos procedemos a validar dicha configuración en el archivo de configuración que anteriormente copiamos al directorio de asterisk:

cat /etc/asterisk/dongle.conf

Mostrando la siguiente salida:

; dongle required settings
[dongle0]
;audio=/dev/ttyUSB1		; tty port for audio connection; 	no default value
;data=/dev/ttyUSB2		; tty port for AT commands; 		no default value

Donde hasta al final nos percatamos que la sección de audio y data hacen referencia de manera correcta a los puertos del modem.
Ahora sí, una vez validados los requerimientos procederemos a cargar el modulo dentro de asterisk, ingresaremos en asterisk con:

asterisk -rv

Después ingresaremos el siguiente comando:

module load chan_dongle.so

Y al fin, tendremos nuestro chan dongle cargado como se aprecia en la salida del comando anterior:

raspberrypi*CLI> module load chand_dongle.so


raspberrypi*CLI> 
[Jan 15 20:58:32] NOTICE[2195]: chan_dongle.c:1588 reload_config: [dongle0] Loaded device
  == Registered channel type 'Dongle' (Huawei 3G Dongle Channel Driver)
  == Registered application 'DongleStatus'
  == Registered application 'DongleSendSMS'
  == Registered application 'DongleSendUSSD'
  == Manager registered action DongleShowDevices
  == Manager registered action DongleSendUSSD
  == Manager registered action DongleSendSMS
  == Manager registered action DongleSendPDU
  == Manager registered action DongleSetCCWA
  == Manager registered action DongleReset
  == Manager registered action DongleRestart

Por lo cual ya solo nos restara validar el estado de los modems con el siguiente comando:

raspberrypi*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number        
dongle0	     0     Free       25   0    0       weex           E153       11.609.18.00.00   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  Unknown       
dongle1      0     Free       27   0    0       weex           E153       11.609.18.00.00   XXXXXXXXXXXXXXX  XXXXXXXXXXXXXXX  Unknown

Ya tendremos listo y funcional chan_dongle para efectuar llamadas, el próximo paso solo será configurar el dial plan. 🙂

Para cualquier duda o comentario puedes escribirlo en la sección de comentarios y con gusto responderé. O en su caso en la sección de contacto si tu duda es muy específica.

Configurar cable Prolific USB a serial cable en Windows 10

Hace no muchos ayeres para diversas configuraciones y en general para el “manejo de información” se empleó un puerto serie, en su momento lo integraban algunos módems, routers y todo aquel dispositivo que tuviera una consola para su configuración. Después, con el paso del tiempo llego el puerto USB que en cierta forma era más rápido y eficiente y el puerto serie quedo literal en el olvido, a grado tal que muchos fabricantes de equipos de cómputo dejaron de incluir el mismo a pesar de que en sus buenos tiempos muchos fabricantes incluían hasta 2 puertos en una misma PC como se aprecia a continuación (a mi llego a tocar un equipo así).

Computadora con 2 puertos serie
Computadora con 2 puertos serie

Después de entrar en contexto, resulto ser que muchos fabricantes decidieron seguir implementando un puerto serial en sus dispositivos para fines de configuración y administración, razón por la cual, se comenzó a comercializar un cable que te permitía convertir un puerto USB en un puerto Serie, que no es más que un PL-2303. El cable en cuestión a continuación:

usb-a-serial-en-Windows-10
usb-a-serial-en-Windows-10

Es curioso pero el tema de los drivers de los dispositivos se volvió muy conflictivo desde la aparición de Windows 8, esto quiere decir que algunos drivers de Windows 7 no funcionaban de manera correcta en Windows 8 y ni que decir de su correcto funcionamiento en Windows 10, ya que muchos fabricantes no se dieron a la tarea de actualizar sus drivers. En su momento, el adaptador de USB a serial me funcionaba sin problema en mi viejo Windows 7 en mis proyectos de universitario, pero a día de hoy es algo que no ocupo con regularidad y si lo llego a hacer es en alguna distro GNU/Linux. Pero recientemente me surgió la necesidad de ocuparlo en Windows 10 y no me funciono de la manera fácil (como debe ser todo buen Windows).

Me di a la tarea de descargar el driver de la página oficial y no me funciono, incluso Windows Update se tomó el “atrevimiento” de descargar un driver y el mismo tampoco funciono debido a que siempre en el “administrador de dispositivos” el adaptador aparecía en conflicto (con un signo de admiración). Como se muestra a continuación:

prolific-usto-to-serial-comm
prolific-usto-to-serial-comm

Encontre la solución en un foro de Microsoft y debido a que en diversas ocasiones los foros no mantienen el histórico, me tomo el tiempo de compartir la solución que encontré.

En el foro se hace referencia a que deberían instalar una versión antigua del Driver debido a que la versión más reciente no funciona de manera correcta con Windows 10, para ser más específicos, la versión que recomiendan es la 3.3.2.105, hasta aquí todo bien … pero si uno instala dicho driver el problema no se soluciona debido a que Windows Update en automático instala otra versión más actual y dicha versión entra en conflicto con la versión antigua. Mostrándose el dispositivo en conflicto como al principio.

¿Como se soluciona el driver de Prolific USB a Serial?

1.- Deberemos instalar el driver antes mencionado, la podrán descargar en el siguiente enlace:

⇒⇒⇒Driver Windows 10 Prolific USB to serial.⇐⇐⇐

2.- Una vez instalado el driver, deberemos dar clic derecho sobre el adaptador: “Prolific USB-to-Serial Comm Port” y daremos clic en “Actualizar Driver”.

3.- Después sobre: “Buscar en mi Computadora” y nos permitirá seleccionar el driver correcto, en este caso el (3.3.2.105). Una vez hecho esto el driver y el adaptador deberían funcionar sin problemas.

4.- El problema viene cuando se conecta y desconecta el adaptador colocándose de nueva cuenta con el símbolo de admiración al lado, debido a que Windows siempre tomara el driver más reciente.

prolific-usto-to-serial-comm
prolific-usto-to-serial-comm

5.- Para solucionar dicho tema deberemos dar clic derecho en el dispositivo en conflicto y seleccionar “desinstalar”. Por lo que Windows procederá a desinstalar el dispositivo y de igual forma el driver más reciente, dejando solo el driver que si funciona.  🙂

6.- Abrir nuestro Putty o en general el software que nosotros deseemos emplear para realizar nuestra conexión por medio del puerto serie.

Call Center en Elastix después de la compra por 3CX

Hace algunos meses fue un golpe duro para el mundo del Software Libre, en específico para el mundo del VOIP y asterisk. Ya que PaloSanto la empresa encargada de haber creado el proyecto Elastix (si esa distro que era un todo en uno de comunicaciones unificadas) decidió vender el proyecto a 3CX una empresa que de unos años a la fecha se ha dedicado a comprar todo aquel proyecto de software libre que le pueda generar competencia en el mundo de las PBX, como fue el caso del proyecto pbxinaflash un proyecto muy similar a Elastix, además 3CX compro bastantes acciones en la empresa Sangoma, si, la misma que compro el proyecto FreepBX, a simple vista se observa que las intenciones de 3CX son claras …

Por lo cual, las preguntas eminentes seria: ¿Qué sigue ahora?, ¿Ahí murió todo?, ¿Qué pasara con mis actuales instalaciones de Elastix?,¿Acaso es el principio del fin?

venta-Elastix-a-3CX
venta-Elastix-a-3CX

Pues como siempre la solución la genera la comunidad, ya que en su momento Elastix fue grande por la misma comunidad de desarrollo y usuarios que se gestionó a lo largo del proyecto. Por lo tanto fue la misma comunidad la que genero 2 proyectos alternativos: Issabel y OpenELX.

El paradigma de estas 2 distribuciones Linux enfocadas a comunicaciones unificadas básicamente es retomar el legado que dejo el proyecto Elastix y no dejarlo morir ya que tal cual se escucha existen miles de instalaciones Elastix que se quedaron en “ascuas” con la venta de Elastix a 3CX o simplemente generaciones venideras que planeen ocupar el sistema ya no podrán ocuparlo a su antojo sin pagar antes a la omnipresente 3CX.

Ahora bien, el enfoque de las 2 distros mencionadas es diferente ya que mientras OpenELX se centra en dar soporte a todas las instalaciones que ocupan Elastix 2.5 como núcleo (un porcentaje de mercado muy representativo) el proyecto Issabel planea dar seguimiento al proyecto Elastix 4, como se ve, ambas tienen algo que ofrecer y no estaría de más echarle una revisada a ambos proyectos en su página oficial.

issabel-PBX-logo
issabel-PBX-logo
openelx-pbx-logo
openelx-pbx-logo

Una vez aclarado el panorama pasare a describir los pasos que lleve a cabo para dejar a punto el módulo Call Center de Elastix 2.5 ya que como bien sabrán para instalarlo era necesario registrarse por medio de nuestro servidor Elastix una cuenta en PaloSanto y solo así podíamos descargar y ocupar el módulo de Call Center, que se encontraba en los repositorios de PaloSanto.

Entonces, sin más preámbulos a darle. Para ello necesitamos tener instalada Elastix 2.5, no documentare esa parte ya que existen infinidad de tutoriales en internet sobre ello. Posteriormente instalaremos el repositorio de OpenELX por medio de los siguientes comandos.

wget http://openelx.org/mirror/openelx-repo-install.sh

chmod u+x openelx-repo-install.sh

./openelx-repo-install.sh

Despues procederemos a “actualizar” nuestro repositorio con el comando:

/usr/bin/yum list

Pero cuál es nuestra sorpresa que nunca pasa del siguiente error:

Loaded plugins: fastestmirror, kmod
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http or file.
Eg. Invalid release/
removing mirrorlist with no valid mirrors: /var/cache/yum/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base

La pregunta eminente es: ¿Por qué? Básicamente se debe a que Elastix 2.5 está basada en CentOS 5 y al Centos 5 ya no tener soporte (EOL 31/Marzo/2017) según Wikipedia pues simplemente los repositorios ya no son funcionales.

Por lo cual me di a la tarea de buscar un poco en el foro del proyecto hermano (Issabel) y di con la solución gracias al amigo @ecaniz La misma consiste en sustituir el contenido de /etc/yum.repos.d/CentOS-Base.repo por lo siguiente:

[base]
name=CentOS-$releasever – Base
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://vault.centos.org/5.11/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#released updates
enabled=1

[updates]
name=CentOS-$releasever – Updates
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://vault.centos.org/5.11/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#additional packages that may be useful
enabled=1

[extras]
name=CentOS-$releasever – Extras
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://vault.centos.org/5.11/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

Posteriormente ya solo nos restara ejecutar un

/usr/bin/yum list
yum install elastix-callcenter

Ahora la configuración del módulo Call Center ya es otro tema aparte … Para ello pueden seguir el siguiente manual de @Juan Oliva que es bastante bueno: Configurar Call Center Elastix.

Eso sería todo para dejar funcionando el módulo Call Center de Elastix de nuevo. Si tienes dudas o tu call center no funciona postealas en la sección de comentarios y con gusto te ayudare en lo que pueda.

Voice GSM Gateway: El poder del software libre

Si hay algo que me apasiona del mundo informático es la magnificencia que pueden llegar a alcanzar un sistema informático, cosa que a día de hoy no he logrado a encontrar en alguna otra rama del conocimiento (abogados, contadores, etc.) de igual manera algo que me fascina y hasta cierto punto me llena de éxtasis son los proyectos de software libre: si, esos proyectos sin ánimo de lucro (en la mayoría de los casos) que solo se realizan por el solo placer de hacer las cosas para el beneficio de la humanidad, pero sobre todo por satisfacción personal.

Un claro ejemplo de ello es asterisk un sistema que nos da la posibilidad de tener un sistema PBX a nuestra medida sin desembolsar un solo peso, ya que el mismo está basado en la filosofía de software libre. Si queremos darnos tan solo una idea de a lo que me refiero cuando mencione magnificencia, basta tan solo en plantear los costos que se conllevarían en implementar un PBX con tecnología asterisk que es software libre y un PBX con tecnología CISCO (si ese gigante del networking), donde este último resultaría ser más caro y nos llevaría a desembolsar presupuesto que no está al alcance de muchas pequeñas y medianas empresas, cosa diferente ocurre con un sistema basado en asterisk que puede ser implementado hasta con un equipo que pudiera ser rescatado del reciclaje. Como bien se observa la diferencia puede ser abismal.
Una vez planteado el panorama de los beneficios del mundo del software libre les platicare de un pequeño caso de éxito con software libre.

GSM Gateway con Asterisk

Resulta que me contacto una empresa Argentina (que por confidencialidad me reservare el nombre) que se veía en la necesidad de implementar un GSM Gateway para poder realizar llamadas. Después de varias búsquedas en google llego con mi post de: Como montar un telular en asterisk/Elastix. Su necesidad era poder enrutar llamadas (una media de 100 000 minutos mensuales) por medio de líneas celulares ya que los costos que se manejan hacia líneas celulares suelen ser bastante altos, por lo que planeaba sacar ese tráfico por SIM’s , en terminos practicos necesitaba un telular VOIP. Pero en mi tutorial yo solo realice la salida de tráfico por tan solo 1 linea sim y el por la cantidad de tráfico que necesitaba enviar iba a requerir al menos 20 canales de voz simultáneos.

Después de platicar a detalle con el me dijo las cosas sin “pelos en la lengua”, me dijo: cotice un equipo telular VOIP y es estúpidamente caro, cuesta alrededor $5000.00 USD (a día de hoy por el tipo de cambio en México serian $100000.00 MXN) y es un gasto que por ahora no puedo pagar. Por lo cual después de llegar a un acuerdo con el tema de mis honorarios como consultor procedimos a realizar la implementación.

He aquí lo maravilloso del mundo del software libre, gracias a foros, documentación oficial del proyecto asterisk y en general todos los blogs de geeks y apasionados de la informática fue como pudimos hacer funcionar su proyecto. El sistema quedo implementado bajo un sistema Ubuntu (si soy nena y que) con asterisk corriendo como núcleo, nuestro amado chan_Dongle y diversos modems Huawei banda ancha E303 con la función de voz activada. De igual manera se realizó la instalación del proyecto FreePBX en el servidor para poder brindar reportes de llamadas (CDR) algo fundamental si se tiene un call center y se desean medir resultados.

A continuación algunas fotografías del Gateway GSM:

GSM Gateway Server
GSM Gateway Server
chan_dongle
chan_dongle
chan_dongle asterisk-elastix
chan_dongle asterisk-elastix
VOIP GSM Gateway in asterisk
VOIP GSM Gateway in asterisk

Revisando el estado de nuestros modems Huawei E303 dentro de la consola de Asterisk:

asterisk-chan-dongle-huawei
asterisk-chan-dongle-huawei

Por lo cual: ¡amen por el software libre! Ademas, si tienes alguna duda o deseas contar con alguna implementación similar o simplemente algo no te sale como debiera funcionar no dudes en ponerte en contacto conmigo en la sección de contacto y con gusto te ayudare en lo que pueda.

Habilitar modems USB para ser ocupados con Chan Dongle

BAM-modemUSB-chan_dongle

A lo largo de mi blog existen algunos artículos que tienen más consultas que otras, donde uno de los top es justamente mi artículo que habla sobre montar un telular en asterisk (si no sabes de que va puedes visitar el articulo), donde en su tiempo trate de documentarlo de la mejor manera para que, si se seguía al pie de la letra la persona que lo realizara no tuviera problema alguno.

Lo interesante, es que hace poco me contacto una persona que tenía demasiados problemas para poder implementar la función CHAN_DONGLE en asterisk, ya que según parece omití muchas situaciones que considere obvias, por eso escribo este post, para acortar cada vez más la estrecha línea entre darse de topes contra la pared y lograr tener un equipo asterisk listo para realizar llamadas a través de los modem USB – BAM (Banda Ancha Móvil).

BAM-modemUSB-chan_dongle
BAM-modemUSB-chan_dongle

Como muchos sabrán las compañías telefónicas brindan modems USB para poder conectarse a internet, recibir SMS e incluso poder ocuparse como medio de almacenamiento (con su respectiva microSD instalada). Tan solo basta en conectar el dispositivo a nuestra computadora para que la misma lo reconozca como una unidad de CR-ROM, donde una vez instalado el software para la conexión a internet NUNCA JAMAS se volverá a conectar de ese modo (CD-ROM), para todas las veces futuras se conectara en modo MODEM, brindándonos asi el acceso para poder navegar por internet con el chip de nuestra compañía telefónica.

Hasta ahora muy bonito, pero: ¿Qué pasa si conectas el MODEM USB al sistema Linux donde planeas hacer funcionar CHAN_DONGLE? Pues sí, en efecto adivinaron; no funcionara ya que el modem sera reconocido como un CD-ROM y nunca podremos ocuparlo como modem.

Afortunadamente para este tipo de situaciones “alguien más” trabajo en la solución y creo el proyecto USB_MODESWITCH que básicamente hace justo eso que necesitamos, hacer que nuestro dispositivo sea reconocido como un modem para que nosotros podamos ya sea: ocuparlo con nuestro CHAN_DONGLE o en su caso ocuparlo con nuestro amado minicom para poder ingresarle comandos AT para “configurarlo” a nuestro gusto y de paso deshabilitar la opción CD-ROM para siempre y garantizar así que SIEMPRE inicie como modem.

Ahora, una vez puesto todo en contexto procederemos a ejemplificar el problema y como es que se llega a la solución.

Partiremos de que actualmente tenemos una banda ancha móvil (BAM=ModemUSB) y que deseamos realizar la configuración del modem en nuestro amado sistema GNU/Linux, lo primero que haremos después de conectarlo sera ingresar el siguiente comando para ver cómo fue que nos lo reconoció:

lsusb

Como podemos observar nos lo reconoció como un:

Huawei Technologies Co., Ltd. Broadband stick (modem on)

chan_dongle_lsusb
chan_dongle_lsusb

Lo curioso e interesante es que en el sistema donde se inserto dicho modem (un ubuntu) el mismo fue reconocido como un CD-ROM y no hay manera de pasarlo a modo modem, prueba de ello a continuación:

mass-storage-USBDongle
mass-storage-USBDongle

Ahora es aquí donde el proyecto usb_modeswitch hace acto de aparición y nos ayuda a “convertir” nuestro CR-ROM en un modem, para ello si no lo tenemos instalado, en un sistema basado en Debian con gestor de paquetes dpkg lo instalaremos con el siguiente comando:

apt-get install usb-modeswitch

Lo cual nos instalara el software en nuestro equipo, lo siguiente sera generar el archivo de configuración para que nuestro modem sea reconocido por el sistema. Para ello nos dirigiremos a la siguiente página.

Como podremos observar en esa página se encuentran infinidad de modems enlistados, la pregunta sería: ¿Cómo encontrar la configuración que es válida para nuestro modem? En mi caso es un modem Huawei E153. Si son observadores verán que a la salida del comando lsusb nos brindó un ID 12d1:1446 esa sera justo el ID que buscaremos en la página anterior donde la configuración válida para mi modem es:

# Huawei E1550
# Huawei E1750
#
# Contributor: Anders Blomdell, Ahmed Soliman

DefaultVendor= 0x12d1
DefaultProduct= 0x1446

TargetVendor= 0x12d1
TargetProduct= 0x1001

MessageContent=”55534243123456780000000000000011060000000000000000000000000000″

Dice que dicha configuración es válida para un modem E1550 y para un E1750, eso no importa ya que el ID Vendor y el IDProduct es el mismo, por lo cual nos funcionara sin problemas.

Tan solo nos restara copiar el contenido del archivo en: /etc/usb_modeswitch.d/e153 , ese directorio no es obligatorio y yolo emplee para mantener el “orden” en mi equipo.

Posteriormente ejecutaremos el siguiente comando:

usb_modeswitch -c /etc/usb_modeswitch.d/e153

Con esto ya tendremos listo nuestro modem para ser utilizado como MODEM y en teoría con esto deberíamos poder ocuparlo sin problemas para realizar llamadas con nuestro CHAN_DONGLE (si no sabes a qué me refiero, lee el artículo que menciono al principio del articulo).

usb_modeswitch-chan_dongle
usb_modeswitch-chan_dongle

Ahora tan solo nos restara deshabilitar la función de CD-ROM para SIEMPRE y dejar la función solo modem habilitada, para ello nos auxiliaremos de minicom:

minicom -c on -D /dev/ttyUSB5

Y después ingresaremos este comando AT:

AT^U2DIAG=0

Con esto nuestro modem para las próximas veces que sea ocupado, independientemente de la computadora donde sea conectado se conectara solo como modem 🙂 .

Si tienes dudas o comentarios o simplemente tu proyecto no funciona, con gusto te puedes poner en contacto conmigo en la sección de contacto.

Uber: ¿Qué es y cómo funciona? Te cuento mi experiencia

como-solicitar-taxi-uber

Estas regularmente son las primeras preguntas que realizan las personas que escuchan hablar de uber por primera vez, ya que por sí sola la palabra no brinda algún significado (al menos para mí en su momento). Sin duda, habrá sin exagerar cientos de dudas pero a mi consideración cuando se es nuevo en el uso de uber estas 2 preguntas son las más intrigantes: ¿Qué es y cómo funciona el servicio Uber?

que-es-uber
que-es-uber

Así que procedamos a contestar las mismas:

¿Qué es el servicio de Uber?

Básicamente si se quiere explicar de una manera fácil de asimilar, es un servicio de taxi ejecutivo con cargo a tarjeta de crédito que se solicita por medio de una aplicación móvil. Aunque siendo no tan generales Uber es simplemente una maravilla, ya que tiene todas las bondades de abordar un taxi ejecutivo con las ventajas que solo Uber te puede brindar (las detallaremos más adelante).

¿Cómo funciona Uber?

La metodología es de lo más fácil que nos podamos imaginar:

1.- Instalas la App en tu Smartphone: actualmente la aplicación se encuentra disponible tanto en Android como en iOS, personalmente la probé en mi android, tan solo basta realizar una búsqueda con el término Uber en la Play Store e instarla. Por si llegaran a tener problemas para la descarga de Uber, a continuación dejo los enlaces de descarga:

2.- Elige el tipo de servicio a solicitar: Uber posee 3 clases de servicios para poder solicitar un taxi (al  menos en mi país), los mismos los explico a continuación:

  • UberX: Este podría considerarse el servicio estándar, y básicamente son carros “austeros”. Eso sí, extremadamente limpios y en muy buen estado, pero no dejan de ser “austeros”. A mí me han mandado cuando he requerido los servicios algunos Aveo y en algunas ocasiones algunos Jetta.
  • UberBLACK: Básicamente son servicios con autos de lujo, como por ejemplo Mercedes. Básicamente es el servicio VIP.
  • UberSUV: Aquí el servicio es realizado por algunas camionetas de pasajeros, se tiene planeado cuando se requiere transportar a un número grande de pasajeros.
uber-tipo-de-servicio-mexico
uber-tipo-de-servicio-mexico

3.- Elige el punto de recogida: esta será la ubicación en la cual nuestro servicio Uber nos recogerá, para ello el sistema tiene 2 alternativas, ya sea tomar la ubicación del GPS de nuestro teléfono, o en su caso tomar la dirección que nosotros le indiquemos.

4.- Indicar nuestro destino:  básicamente será el destino al cual queramos llegar. Este dato el sistema lo requiere para calcular de cuanto será el cobro que nos realice por el viaje a realizar. Aunque si se desea también se puede realizar una simulación del costo del viaje, aun que la misma no deberá tomarse a rajatabla como definitiva ya que el cobro puede variar en base al tráfico y el tiempo que dure el recorrido.

simulacion-tarifa-uber
simulacion-tarifa-uber

5.- Solicitar el servicio: Tan pronto nosotros solicitemos el servicio, en pantalla se nos canalizara al taxista Uber más cercano. Una vez localizado el mismo nos aparecerá una foto del taxista, placas del vehículo que nos recogerá y el modelo. Lo que es importante mencionar es que podemos ver en “tiempo real” el trayecto del taxi hasta nuestro punto de recogida, así como un estimado del tiempo en el cual el taxi arribara a nuestro destino.

como-solicitar-taxi-uber
como-solicitar-taxi-uber
chofer-tiempo-real-uber
chofer-tiempo-real-uber

6.- Califica a tu conductor: tan pronto lleguemos a nuestro destino y nuestro taxista le indique a Uber ha concluido con su servicio, el sistema en automático te pedirá una calificación para el taxista, esto Uber lo ocupa para Rankear a los taxistas y tener un historial de su servicio, esto a nosotros nos ayuda para saber que tan bueno es nuestro taxista, y a ellos les ayuda a obtener un pequeño bono económico.

calificar-taxista-uber
calificar-taxista-uber

7.- Espera por email tu comprobante: esto sin duda alguna me gusto bastante ya que en breve tan pronto finaliza tu servicio te llega un comprobante del servicio realizado donde se indica el importe que se te cobrara por el servicio, la distancia recorrida y demás datos que pueden ser útiles para que lleves un control más certero en tus finanzas por ejemplo.

comprobante-servicio-uber
comprobante-servicio-uber

En términos generales esa es la metodología de funcionamiento del servicio Uber, pero a mi parecer lo más atractivo de este servicio son las ventajas que posee con respecto a un servicio de Taxi tradicional, las mismas procedo a mencionarlas a continuación.

¿Por qué elegir el servicio uber sobre un servicio de Taxi tradicional?

1.- Seguridad: A mi consideración este es un aspecto de los más importantes y es primordialmente la razón por la cual investigue acerca del servicio, ya que en su momento tenía que transportar una suma relativamente grande de dinero y la zona por la cual me encontraba no me inspiraba mucha confianza, por lo cual opte por buscar información y fue así como llegue al servicio de Uber. Cabe recalcar que todos los choferes que conducen los taxis ejecutivos del servicio Uber tienen que pasar una serie de estrictos exámenes para poder brindar el servicio, los exámenes son bastante estrictos según me comentaron algunos taxistas (un taxista me dijo que falló al menos 2 veces en los exámenes para poder entrar), también cabe mencionar que Uber tiene almacenada una base de datos de sus Choferes, por lo cual ante cualquier percance sabremos a quien acudir para una reclamación… Así que en base a mi experiencia el servicio es de lo más seguro.

2.- Servicio deducible de impuestos: Esto es uno de los aspectos más atractivos desde el punto de vista empresarial ya que así tienes la posibilidad de deducir impuestos ya que el servicio es facturable, yo particularmente las veces que lo he ocupado no he solicitado factura pero ellos afirman que el servicio es facturable y por ende deducible de impuestos para los empresarios 🙂

3.- Cargo a tarjeta de crédito: Esto a mi parecer es algo bastante bueno ya que el servicio realiza los cargos a una tarjeta de crédito que tu le brindes, esto me resulta especialmente útil ya que no es muy recurrente encontrar taxis con terminal bancaria.

3.- Autos en perfecto estado: En ocasiones me he subido a taxis que de verdad son un verdadero problema ya que el taxi está sucio, el taxista escucha su música a todo volumen e incluso en algunas ocasiones me ha tocado que el taxista este fumando. Esto no ocurre en el servicio proporcionado por Uber ya que los taxis se encuentran extremadamente limpios y en perfecto estado, además el chofer se encuentra de los aseado, incluso en 2 ocasiones me ha tocado que los taxistas traigan corbata algo que a mi parecer le da bastante seriedad al servicio. Además con respecto al estado del vehículo, según tengo entendido Uber solo permite autos a partir del 2010 para arriba (este dato no sé si sea verídico y podría equivocarme), lo cual garantiza que el servicio será realizado en un auto en buen estado.

4.- Servicio cordial y atento: Esto sin duda alguna es algo que me agrado en demasía y fue lo que me dejo “enamorado” del servicio, ya que los choferes (los que me han tocado) son muy cordiales y atentos y ante todo se dirigen a uno con respeto. Incluso como cortesía del servicio te invitan algunas pequeñas botellas de agua el primer chofer me hablaba de usted y sin problema me ayudo a meter mi equipaje en la cajuela. La verdad el servicio es de excelencia, aunque he de mencionar que esa cortesía tiene una razón de ser ya que a ellos les brindan un bono por calificaciones positivas, por lo cual entre mas calificaciones positivas tengan ellos mejor les puede ir en el sentido económico, he ahí la razón de la cortesía.

5.- Servicio practico y funcional: Algo que me agrado es que el servicio es bastante funcional y ante todo practico ya que cuando esperas el servicio el sistema te brinda el numero celular que tiene el operador del taxi que solicitaste, a lo cual tu sin problemas puedes enviarle algún mensaje o incluso llamarlo. A mí personalmente me han llamado para que los ubicara ya que en mi primer servicio  Uber tomo mal la ubicación del GPS y lo mando a una cuadra atrás de la que yo me encontraba, por lo cual es taxista me regalo una llamada para poder ubicarse, pero como yo no conocía la zona simplemente lo agregue a Whatss App y le mande mi ubicación, por lo cual en menos de 3 minutos tenía el taxi frente a mí.

6.- Atención al cliente: Algo que se me hizo realmente fuera de lo común fue el servicio de atención al cliente, ya que cuando realice la calificación de mi conductor unos días después me llego el correo de una persona alentándome a seguir colaborando con el servicio:

servicio-a-cliente-uber
servicio-a-cliente-uber

Hasta aquí he dado bastantes ventajas que son dignas de mencionarse, pero a veces todos queremos probar un servicio sin pagar antes o en su caso pagar con algún descuento de por medio, razón por la cual de mi parte les obsequio un Cupón para poder obtener $100.00 MXN en su primer viaje, el código es el siguiente:

Código para obtener $100.00 MXN gratis en Uber:

ts5m5

 

De antemano espero viajen cómodos en este nuevo servicio de taxi ejecutivo, que sin duda alguna revoluciono la industria del transporte. Como dato he de mencionar que uber lleva en México aproximadamente un año y según he platicado con los taxistas, son cerca de 2000 Ubers. Por lo cual espero tengan una experiencia placentera con el servicio o si la misma es contraria, también expongan sus comentarios acerca del servicio.

Instalando Dahdi y asterisk en Debian 7 Wheezy

debian-dahdi-asterisk

El papa de una de mis distribuciones favoritas (Ubuntu) es Debian y sin duda alguna es el preferido por muchos debido a su gran estabilidad para temas de alto Performance, seguridad y demás aplicaciones de uso critico. Razón por la cual realice una instalación de asterisk puro en un Debian 7 (Wheezy), pero debido a la naturaleza del proyecto tenía que instalar y dejar funcionando una tarjeta para poder conectar una línea telefónica proporcionada por Telmex. Esto último se realiza gracias al proyecto Dahdi, que fundamentalmente brinda comunicación entre la red PSTN y nuestro aclamado asterisk.

 

debian-dahdi-asterisk
debian-dahdi-asterisk

Una vez aclarado el panorama procederé a describir como realice la instalación de asterisk puro dentro de Debian 7. Y como fue que solucione el conflicto a la hora de instalar Dahdi en Debian.
Procedamos:
1.- Para poder instalar se procederán a instalar unos requisitos:

apt—get install build-essential

Que básicamente es un meta paquete que trae dentro varios, compiladores y librerías necesarias para realizar un proceso de compilación básico.
2.-  Instalaremos asterisk y Dahdi:

apt-get install asterisk libpri1.4 asterisk-dahdi

3.- Después de ese procedimiento asterisk y Dahdi deberían estar instalados pero Dahdi mostrara un error al inicializarse ya que no se han instalado los módulos del kernel.
4.- Instalaremos el modulo de Dahdi para nuestro kernel así como las respectivas cabeceras de nuestro kernel, para ello ingresaremos en la consola:

apt-get install Linux-headers-‘uname-r’ dahdi-source
m-a a-i dahdi

Donde:
m-a es una abreviación de “module-assistant”

5.- Con eso ya tendremos instalado y se inicializara dahdi sin problema alguna, después ya solo nos restara proceder a configurar nuestra tarjeta. Cuya metodología se definirá en un siguiente post para saber cómo configurar Dahdi y asterisk.

Implementar un telular con un modem 3G en asterisk a bajo costo

En esta ocasión voy a mostrarles una instalación que tengo implementada con algunos clientes desde hace ya bastante tiempo, la instalación se trata de sacar llamadas por medio de un Telular “hechizo o casero”. Para los que no sepan que es un telular, lo definiremos como un dispositivo que es capaz de “adaptar” tecnología GSM con la red telefónica tradicional, en pocas palabras es un electrónico donde se coloca un chip de la compañía telefónica de nuestra preferencia que puede conectarse ya sea a nuestro conmutador telefónico tradicional o a nuestro conmutador IP.

La idea de esta implementación es poder abaratar costos en términos de llamadas a celular, ya que regularmente las llamadas entre usuarios de la misma compañía son más económicas. Un ejemplo muy claro de lo que menciono podría aplicarse para el caso de Movistar donde las llamadas a la comunidad movistar son gratuitas, esto abarata costos excesivamente ya que si dentro de la empresa todos los empleados cuentan con movistar, basta con definir una ruta de salida para que las llamadas que se realicen por el telular se generen sin costo.

Ahora bien, para poder implementar este Telular tendremos 2 alternativas a seguir, ya dependerá de los gustos y requerimientos del implementador decantarse por uno u otra:

  1. Telular con RasPBX
  2. Telular con Asterisk puro en la distribución de nuestra elección (debían, Ubuntu, fedora, centOS, etc.)

 

Requerimientos previos:

Para ello emplearemos un Dongle 3G, básicamente son aquellos que nos brindan las compañías telefónicas para poder acceder a internet móvil, muchas personas le denomina n comúnmente banda ancha, por si tienes duda a continuación tienes una imagen:

Modem 3G - Dongle USB Huawei E153
Modem 3G – Dongle USB Huawei E153

En este caso emplearemos un dongle marca Huawei modelo E153 de la compañía telefónica UNEFON, el inconveniente con este dongle al igual que la mayoría de los celulares que brinda esta compañía es que se encuentra bloqueado para ocuparlos con chips de diferente compañía, por lo cual para que nosotros podamos emplear este dongle con la compañía telefónica de nuestra preferencia deberemos “liberar ” el dongle para ello emplearemos el IMEI o realizar una “liberación” por IMEI como muchos la denominan.

Ahora bien para poder liberar el Dongle 3G ingresaremos en la siguiente página: www.modemunlock.com/huawei.php donde ingresaremos el IMEI de nuestro modem 3G y nos arrojara los respectivos códigos para poder “liberar” nuestro modem. Una vez tengamos esos códigos procederemos a instalar el software que acompaña a nuestro modem como si nos fuéramos a conectar a internet pero ingresaremos un chip de una compañía distinta, por ejemplo si nuestro modem es de la compañía telcel ingresaremos un chip de movistar, después en pantalla nos aparecerá un cuadro de dialogo  que nos solicitara un código de desbloqueo para poder liberar nuestro modem, ingresaremos el que obtuvimos en la página anterior y después de esto “en teoría” nuestro modem estará libre para poder ocuparlo a voluntad con cualquier compañía.  Ahora una vez libre nuestro modem procederemos a verificar si se encuentra habilitada la función de voz en nuestro modem, y en dado caso de que no estuviera habilitada implementaremos la función en nuestro modem.

Para ello emplearemos el software “Dc-unlocker” cuya función es verificar y/o habilitar la función de voz en nuestro modem, el proceso en general es muy sencillo e intuitivo. Y para asegurar que la voz se encuentre activada en nuestro modem procederemos a actualizar el firmware de  nuestro modem a la versión más reciente, para ello ingresaremos en www.dc-files.com y seleccionaremos el firmware adecuado para nuestro modem. De nueva cuenta el proceso, en general, es bastante intuitivo.

Ahora una vez que se tiene liberado el modem, actualizado el firmware y por supuesto habilitada la función de voz en nuestro modem huawei, procederemos a realizar la implementación de nuestro telular con asterisk.

Telular con Raspbx

A mi parecer esta funcionalidad es la más acertada para disponer de una instalación rápida y funcional. Para ello emplearemos una Raspberry Pi con una distribución modificada para brindar servicios de una central telefónica, básicamente está basada en Raspbian con asterisk 11 instalada, freepbx así como el modulo chan_dongle precargado.

Para comenzar deberemos contar con una raspberry pi (pueden comprarla en la tienda de su preferencia), así como también como con un Hub USB como el que se muestra a continuación:

Hub USB Raspberry Pi
Hub USB Raspberry Pi

Es muy importante que el Hub USB tenga alimentación externa ya que el modem 3G consume bastante energía y si este último se conecta directamente al puerto de la raspberry pi, podría dañar el puerto o simplemente no funcionar como se espera. Ahora una vez realizada la conexión con el Hub USB de por medio se procede a bajar y a instalar la imagen de Raspbx para ello ingresaremos en: http://www.raspberry-asterisk.org/downloads/ e instalaremos la imagen de Raspbx como si de cualquier otra imagen se tratase (puedes Googlear como instalar imagen de Raspberry Pi para conocer el proceso).

Ahora una vez instalada nuestra distro en nuestra flamante Raspberry Pi, procederemos a configurarla, para ello ingresaremos en ella por medio de SSH e ingresaremos el siguiente comando:

install-dongle

raspbx-dongle
raspbx-dongle

Una vez ingresado ese comando se nos presentara un proceso bastante intuitivo para la configuración de nuestro dongle o modem 3G, donde después de concluir en teoría tendríamos nuestro dongle listo para trabajar. Una vez configurado nuestro dongle ingresaremos en nuestra consola el siguiente comando para verificar que nuestro Dongle funciona de manera adecuada:

asterisk –rx “dongle show devices”

Que si todo ha ido bien nos arrojara una salida exitosa como la siguiente:

raspbx-status-dongle
raspbx-status-dongle

Ahora veremos que IP le fue asignada a nuestra amada Raspberry Pi e ingresaremos dicha dirección IP en nuestro navegador para poder crear nuestras reglas de marcado. Para ello nos dirigiremos a la siguiente opción: Connectivity > Trunks > Add Custom Trunk y lo rellenaremos con los siguientes datos:

configuracion-raspbx
configuracion-raspbx

Donde como se observa en la imagen anterior en Trunk Name ingresaremos el nombre que identificara a nuestra troncal y en la sección Custom Dial String ingresaremos:

dongle/dongle0/$OUTNUM$

Ya después solo nos restaría crear nuestras respectivas rutas de salida y seleccionar nuestra troncal en la ruta de salida, para fines de muestra les comparto la ruta de salida:

ruta-de-salida-raspbx
ruta-de-salida-raspbx

Con lo cual tendríamos nuestro telular funcionando sin problema alguno con una interface web para los que no están muy familiarizados con “asterisk puro”.

Telular con Asterisk puro

Esta opción a mi parecer no es para novatos ya que conlleva un poco mas de conocimiento sobre lo que se hace, por lo cual seré un poco menos específico y solo mencionare la metodología “general”. Para realizar la instalación deberemos de disponer de una distribución con un asterisk ya instalado, como opte por trabajar con un Debian la instalación de asterisk en Debian se realiza de la siguiente manera:

apt-get install asterisk asterisk-dev –y

NOTA: Se instalo el paquete dev por que vamos a compilar el modulo para el dongle y el mismo hace uso de las librerías de desarrollo de asterisk.

Una vez instalado asterisk se procederá a instalar chan_dongle que es el modulo que nos permite emplear nuestro modem 3G como ruta de salida para llamadas salientes.

Para ello ingresaremos los siguientes comandos en nuestra consola:

apt-get update && apt-get upgrade –y
apt-get install linux-headers-`uname -r` gcc g++ make libnewt-dev libncurses5-dev openssl libssl-dev zlib1g-dev

cd
wget https://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz
tar -zxvf chan_donle_%VERSION.r%REVISION.tgz
cd chan_donle_%VERSION.r%REVISION

./configure
make
make install

Con lo cual si no nos arrojo error alguno la compilación nuestro dongle estará casi listo para realizar llamadas 🙂

Después una vez dentro de la carpeta que descomprimimos anteriormente nos dirigiremos a la carpeta /etc que contiene el archivo dongle.conf, dicho archivo lo copiaremos a la carpeta /etc/asterisk con el siguiente comando:

cp –v dongle.conf /etc/asterisk

Con lo cual habremos copiado nuestro archivo de configuración, ahora ya solo nos restara ingresar en la CLI de asterisk y cargar de manera manual el modulo. Para ingresar a la consola de asterisk ingresaremos con:

asterisk –rv

Y una vez dentro cargaremos el modulo de la siguiente manera:

module load chan_dongle.so

Una vez cargado el modulo saldremos de la CLI de asterisk con el comando exit, si todo ha ido bien al ingresar el siguiente comando:

asterisk –rx “dongle show devices”

Debería arrojarnos una salida similar a la siguiente:

raspbx-status-dongle
raspbx-status-dongle

Ahora ya tan solo nos restaría definir nuestras respectivas reglas de marcado en nuestros Dial Plan, para fines meramente didácticos les muestro parte de mi Dial Plan para sacar llamadas por nuestro “telular casero”:

dialplan-chan-dongle-asterisk
dialplan-chan-dongle-asterisk

Como podrán observar en la pantalla la parte importante es:

dial(Dongle/dongle0/${EXTEN})

Que básicamente la misma nos permite sacar llamadas por el modem 3G y así es como tenemos nuestro “telular casero” completamente funcional para ahorrar un poco en llamadas.

Si tienes alguna duda,  no fui claro en la explicación o te sale algún error desconocido. Por favor no dudes en colocar tus dudas en la sección de comentarios y con gusto te ayudare en lo que pueda 🙂

Como monitorear tu pagina web de manera gratuita con envio de alertas

Recientemente me llego una propuesta publicitaria a mi correo electrónico de un servicio que me prometia brindarme el servicio de monitoreo de mis paginas web, la publicidad era bastante buena ya que el servicio aseguraba no solo monitorear el Uptime de mis paginas web y/o Blogs, si no también enviarme alertas vía correo electrónico cuando mi pagina web no estuviera Online.

Para ser honestos el servicio suena bastante bien ya que hoy en día: ¿Que webmaster no desea monitorear su pagina web?, ya sea por que tengas una tienda virtual y tus ingresos dependan enteramente de una pagina web, por que eres una empresa y es tu fuente de captación de clientes, o en ultimo caso por que deseas echarle en cara a tu proveedor de Hosting que el Uptime no es el 99% que el te prometió cuando adquiriste el servicio (al menos a mi JustHost si me cumplio).

Pero para su desgracia yo soy un geek y es un servicio propio que ocupo para gestionar algunas de las paginas de mis clientes. Por lo cual les voy a mostrar en este pequenño tutorial en como poder monitorear de manera gratuita sus paginas web.

Para ello vamos a requerir de una herramienta llamada Nagios, esta herramienta es capaz de monitorear toda clase de dispositivos (sera tema de otro post mas adelante). Para ello vamos a requerir una computadora con alguna distribución Linux instalada yo personalmente recomiendo ubuntu, pero ahí ya es a elección de cada quien.

Monitoreo de paginas web con Nagios

Una vez tengamos instalada nuestra con PC con ubuntu ingresaremos a la terminal e ingresaremos lo siguiente:

apt-get install nagios3

Lo que hace este comando es instalar el paquete Nagios, debemos ponernos muy al pendiente de la instalación ya que habrá un apartado donde nos solicitara una contraseña para ingresar al panel de configuración.

Una vez finalizada la instalación ingresaremos a nuestra consola de Nagios de la siguiente manera en nuestro navegador favorito:

http://Ip_de_la_computadora/nagios3

Enseguida nos solicitara las credenciales de acceso anteriormente ingresadas:

User: nagiosadmin
Pass: la que tu ingresaste

A lo cual nos mostrara una pantalla como la siguiente:

monitoreo-web-con-nagios
monitoreo-web-con-nagios

Lo cual nos ayudara a verificar que nuestra instalación de nagios ya esta completada y funcional, lo siguiente sera ingresar las paginas web as monitorear, pero antes de ello haré algunas aclaraciones de conceptos teóricos con respecto a Nagios.

La lógica de funcionamiento de Nagios es monitorear procesos o “dispositivos” (no importando su naturaleza), para ello se basa en 3 estados fundamentales:

OK: Indica que el proceso esta funcionando adecuadamente
WARNING: Nos indica que el proceso comienza a comportarse de una manera inadecuada, según los umbrales que nosotros hubiéramos definido.
CRITICAL: Indica un funcionamiento inadecuado, o en pocas palabras que ya se “rompió”.

Ahora bien para ello se basa en plugins, de los cuales existen infinidad, pero en este caso el que nosotros emplearemos son el Check_Http, que básicamente lo que hace es una petición http al servidor y si recibe un código 200 de OK la pagina web se encuentra funcionando como debe, esta petición la hace indefinidamente.

Y nos arroja un resultado como el siguiente:

monitoreo-web-con-nagios-2
monitoreo-web-con-nagios-2

Pero para configurar nuestras webs para ser monitoreadas ingresaremos y modificaremos el siguiente archivo:

/etc/nagios3/conf.d/localhost_nagios2.cfg

En este archivo indicaremos las paginas web que deseemos monitorear, para ello ingresaremos con nuestro editor de texto favorito (vi, vim, nano, etc) las siguentes lineas:

define service{
use generic-service ; Name of service template to use
host_name localhost
service_description www.paginaweb.com
check_command check_http!www.paginaweb.com
}

Básicamente le estamos indicando a Nagios que revise la pagina web www.paginaweb.com por medio del comando check_http. Despues tan solo nos restaría ingresar tantas webs como nosotros necesitemos monitorear.

La bondad de este sistema es que nos envía correos electrónicos con alertas como se aprecia en la siguiente imagen:

monitoreo-web-con-nagios-3
monitoreo-web-con-nagios-3

O en su caso si lo requerimos, lleva un histórico del servicio, a lo largo de un periodo de tiempo (Muy útil para cuando un cliente dice que su servidor estuvo caído y no fue así …. 🙂 ).

Monitoreo-Paginas-Web
Monitoreo-Paginas-Web

En definitiva una herramienta muy útil, no me quise extender ya que el tema de Nagios es definitivamente un tema muy extenso. Pero si lo deseas puedes dejarme todas tus dudas y/o complicaciones en la sección de comentarios, o si lo deseas puedes darle una leída a mi anterior articulo sobre Nagios.