martes, 5 de noviembre de 2013

Sumarización de direcciones IP


Siempre vemos que se trata el tema de la sumarización de redes contiguas. Esto es aplicar CIDR para agrupar muchas direcciones de red en una sola que las contiene a todas.
  • Esto trae muchos beneficios como por ejemplo:
  • Hace más pequeñas las tablas de enrutamiento.
  • Esto hace que las búsquedas en la tabla sean más rápidas.
  • Vuelve más legible la información.
  • Oculta información específica acerca de las redes sumarizadas.
  • Las redes más pequeñas incluídas pueden caerse sin que esto afecte a la publicación del sumario.
  • Los protocolos de enrutamiento dinámico pueden evitar consumir ancho de banda para las actualizaciones.
Hablando propiamente con números podemos decir que las redes:
  • 10.56.248.0/24
  • 10.56.249.0/25
  • 10.56.249.128/26
  • 10.56.249.192/26
  • 10.56.250.0/23

Pueden sumarizarse como: 10.56.248.0/22.

Ahora vamos a ver como hacemos este cálculo:

Paso 1: Escribir las direcciones en binario.

10.56.248.0/24:
00001010.00111000.11111000.00000000

10.56.249.0/25
00001010.00111000.11111001.00000000

10.56.249.128/26
00001010.00111000.11111001.10000000

10.56.249.192/26
00001010.00111000.11111001.11000000

10.56.250.0/23
00001010.00111000.11111010.00000000

Paso 2: Ver cuantos bits coinciden de izquierda a derecha en todas las redes a la vez.


Con esto sacamos el prefijo en bits:
00001010.00111000.11111000.00000000
00001010.00111000.11111001.00000000
00001010.00111000.11111001.10000000
00001010.00111000.11111001.11000000
00001010.00111000.11111010.00000000
22 bits coinciden perfectamente de izquierda a derecha, por lo que vemos que el resultado va a ser un /22.

Paso 3: Ponemos en cero todos los bits que no coinciden y escribimos un número único:

00001010.00111000.11111000.00000000

Paso  4: Pasamos ese número a decimal:

00001010 = 10
00111000 = 56
11111000 = 248
00000000 = 0

= 10.56.248.0

Paso 5: Concatenamos el resultado anterior con el prefijo del paso 2:

10.56.248.0/22

Paso 6: Opcionalmente transformamos el prefijo en máscara decimal:

22 bits = 11111111.11111111.11111100.00000000 = 255.255.252.0
Espero que este método les sirva.

Laboratorio de DHCP con helper address


Ya sabemos que los routers no dejan pasar los broadcasts, por lo que no podríamos tener un servidor de DHCP fuera del {es:Dominio_de_difusión|dominio de broadcast} local. Si no hubiese una solución factible como la que vamos a presentar ahora tendríamos la necesidad de tener un server escuchando en cada subred de nuestra LAN.

Cisco propone una solución que básicamente lo que hace es atrapar los broadcasts (que llegan a las interfaces que a nosotros nos interesen) y reenviarlos como {es:Unicast|unicast} a una dirección IP que nosotros indiquemos.

En este caso tenemos la siguiente distribución de equipos:







  • R2 es un servidor DHCP que tiene varios pooles configurados.
  • R0 es un router de tránsito que hará la conversión broadcast/unicast antes mencionada.
  • R1 emula un equipo que quiere aprender la dirección IP de dos de sus interfaces mediante DHCP.

Veamos las configuraciones:

R2:

ip dhcp excluded-address 192.168.10.1
ip dhcp excluded-address 192.168.11.1
!
ip dhcp pool pepito
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
domain-name pepito
!
ip dhcp pool juancito
network 192.168.11.0 255.255.255.0
domain-name juancito
default-router 192.168.11.1
!
interface FastEthernet0/0
ip address 192.168.1.2 255.255.255.252
duplex auto
speed auto
!
ip route 192.168.10.0 255.255.255.0 192.168.1.1
ip route 192.168.11.0 255.255.255.0 192.168.1.1

R0:

interface FastEthernet0/0
description Enlace a R1
no ip address
duplex auto
speed auto
!
interface FastEthernet0/0.10
encapsulation dot1Q 10
description VLAN 10 de R1
ip address 192.168.10.1 255.255.255.0
 ip helper-address 192.168.1.2
!
interface FastEthernet0/0.11
encapsulation dot1Q 11
description VLAN 11 de R1
ip address 192.168.11.1 255.255.255.0
 ip helper-address 192.168.1.2
!
interface FastEthernet0/1
description Enlace a R2
ip address 192.168.1.1 255.255.255.252
duplex auto
speed auto
!

R1:

interface FastEthernet0/0
description Enlace a R0
no ip address
duplex auto
speed auto
!
interface FastEthernet0/0.10
encapsulation dot1Q 10
description VLAN 10 de R0
 ip address dhcp
!
interface FastEthernet0/0.11
encapsulation dot1Q 11
description VLAN 10 de R0
 ip address dhcp
!

El comando ip helper-address configurado en las interfaces de R0 hace que este reenvíe las peticiones DHCP (y por defecto otros protocolos más) hacia la IP 192.168.1.2 que es el servidor DHCP.

Es muy importante notar que para que R2 entregue las direcciones DHCP tiene que saber como llegar a las redes que entrega, por esto las rutas estáticas que se configuraron en R2 son fundamentales, y en caso de no conocerse dichas redes el servidor DHCP no funcionará.

Ahora vemos que pasa en R1 al momento de levantar las interfaces:
R1#
*Mar  1 00:13:03.315: %SYS-5-CONFIG_I: Configured from console by console
R1#sh ip int bri
Interface                  IP-Address      OK? Method Status       Protocol
FastEthernet0/0            unassigned      YES unset  up              up
FastEthernet0/0.10         unassigned      YES DHCP   up              up
FastEthernet0/0.11         unassigned      YES DHCP   up              up      
FastEthernet0/1            unassigned      YES unset  up              up
R1#
*Mar  1 00:15:18.907: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0.10
assigned DHCP address 192.168.10.2, mask 255.255.255.0, hostname R1

R1#
*Mar  1 00:15:23.091: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0.11
assigned DHCP address 192.168.11.2, mask 255.255.255.0, hostname R1

R1#show ip interface brief
Interface                  IP-Address      OK? Method Status       Protocol
FastEthernet0/0            unassigned      YES unset  up             up
FastEthernet0/0.10         192.168.10.2    YES DHCP   up             up
FastEthernet0/0.11         192.168.11.2    YES DHCP   up             up      
FastEthernet0/1            unassigned      YES unset  up             up

Ahora vemos el lease en R2:


R2#show ip dhcp pool 

Pool pepito :
Utilization mark (high/low)    : 100 / 0
Subnet size (first/next)       : 0 / 0
Total addresses                : 254
 Leased addresses               : 1
Pending event                  : none
1 subnet is currently in the pool :
Current index        IP address range                    Leased addresses
192.168.10.3         192.168.10.1     - 192.168.10.254    1

Pool juancito :
Utilization mark (high/low)    : 100 / 0
Subnet size (first/next)       : 0 / 0
Total addresses                : 254
 Leased addresses               : 1
Pending event                  : none
1 subnet is currently in the pool :
Current index        IP address range                    Leased addresses
192.168.11.3         192.168.11.1     - 192.168.11.254    1

R2#show ip dhcp binding 
Bindings from all pools not associated with VRF:
IP address          Client-ID/       Lease expiration        Type
Hardware address/
User name
192.168.10.2        0063.6973.636f.2d63.    Mar 02 2002 12:15 AM    Automatic
3430.312e.3039.3266.
2e30.3030.302d.4661.
302f.302e.3130
192.168.11.2        0063.6973.636f.2d63.    Mar 02 2002 12:15 AM    Automatic
3430.312e.3039.3266.
2e30.3030.302d.4661.
302f.302e.3131

jueves, 19 de septiembre de 2013

Asterisk CDR en MySQL


Para llevar un completo control de todos los eventos de llamadas en Asterisk o hacer un sistema de facturación no hay como CEL (Channel Event Logging). Sin embargo para ciertas tareas puede ser más que suficiente almacenar los CDR (Call Detail Record) de Asterisk en una BBDD MySQL.
Desde la versión 1.8 ya viene incluido y no hace falta descargarse las “addons”.

Simplemente necesitamos instalar la dependencia “libmysqlclient-dev” y “mysql-server” si la BBDD va a ir en el mismo servior y al compilar asterisk seleccionar la opción “Add-ons > [*]cdr_mysql
Yo voy a tener la BBDD en otro servidor (192.168.3.3). Así que la creamos.
1- Nos conectamos a MySQL:
# mysql -u root -p

2- Creamos la database:

mysql> CREATE DATABASE asteriskCDR;

3- Creamos un usuario “asterisk” para esta database “asteriskCDR”:

mysql> GRANT INSERT ON asteriskCDR.* TO asterisk@localhost IDENTIFIED BY 'password';

4- Creamos la tabla:

mysql> USE asteriskCDR;
Database changed


mysql> CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default '',
`uniqueid` VARCHAR(32) NOT NULL default '',
`linkedid` VARCHAR(32) NOT NULL default '',
`sequence` VARCHAR(32) NOT NULL default '',
`peeraccount` VARCHAR(32) NOT NULL default ''
);

Una vez hecho esto ponemos como índices para optimizar la búsqueda por estos campos:

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

5- Si queremos le damos permiso para acceder solo desde nuestra PBX Asterisk (192.168.3.2):

GRANT ALL ON asteriskCDR.* TO asterisk@'192.168.3.2' IDENTIFIED BY 'nuestro passwd';

Para que se pueda acceder a la BBDD desde otro servidor puede que necesitemos configurar nuestra database editando el archivo /etc/mysql/my.cnf y cambiando la opción “bind-address = 127.0.0.1″ por “bind-address = 0.0.0.0″ y reiniciando el servidor “service mysql restart”.
A continuación configuramos nuestra PBX Asterisk (192.168.3.2) para guardar los CDR en esa database.
Editamos el archivo /etc/asterisk/cdr_mysql.so y ponemos algo tal que así:

[global]
hostname=192.168.3.3 ;ip de nuestra database. Si fuese local pondríamos localhost
dbname=asteriskCDR
table=cdr
password=el que sea
user=asterisk
port=3306
sock=/tmp/mysql.sock


[columns]
;static "" =>
;alias =>
alias start => calldate
alias callerid => clid
;alias src => src
;alias dst => dst
;alias dcontext => dcontext
;alias channel => channel
;alias dstchannel => dstchannel
;alias lastapp => lastapp
;alias lastdata => lastdata
;alias duration => duration
;alias billsec => billsec
;alias disposition => disposition
;alias amaflags => amaflags
;alias accountcode => accountcode
;alias userfield => userfield
;alias uniqueid => uniqueid

Salvamos el archivo y comprobamos desde el CLI> que tenemos soporte para el módulo cdr_mysql.so

CLI> module show like cdr_mysql.so
Module Description Use Count
cdr_mysql.so MySQL CDR Backend 0
1 modules loaded

Para que empiece a grabar los CDR en la database descargamos y cargamos el módulo:

CLI> module unload cdr_mysql.so
== Unregistered 'mysql' CDR backend


CLI> module load cdr_mysql.so
Loaded cdr_mysql.so
== Parsing '/etc/asterisk/cdr_mysql.conf': == Found
-- Found alias start for column calldate
-- Found alias callerid for column clid
Loaded cdr_mysql.so => (MySQL CDR Backend)

Y comprobamos que está todo bien:

CLI> cdr mysql status
Connected to asteriskCDR@192.168.3.3, port 3306 using table cdr for 1 hours, 1 minutes, 49 seconds.
Wrote 2 records since last restart.


CLI> cdr show status


Call Detail Record (CDR) settings
----------------------------------
Logging: Enabled
Mode: Simple
Log unanswered calls: No


* Registered Backends
-------------------
mysql
csv
cdr-custom

y tiene que aparecer entre los “Registered Backends” mysql.
Listo 

NOTA sobre uniqueid
Para habilitar uniqueid hay que seguir este How-To:
http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql
Los únicos campos escribibles son:
${CDR(accountcode)} The channel’s account code (read-write).
${CDR(uniqueid)} The channel’s unique id.
${CDR(userfield)} The channels uses specified field (read-write).

miércoles, 11 de septiembre de 2013

Test para ver el nivel en AsterisK

  1. ¿Qué hace el comando “make config” durante la instalación de Asterisk?
    a) Instala scripts que harán que Asterisk se arranque al inicio en las distribuciones soportadas por Asterisk
    b) Inicia una sesión interactiva para que el administrador pueda configurar detalles sobre  los usuarios PBX
    c) Instala ficheros de configuración en /etc/Asterisk
    d) Nada, make config no es un comando valido en este contexto
  2. ¿Porque DTMF utiliza dos tonos?
    a)      Para mejorar el reconocimiento sobre un solo tono
    b)      Ninguna razón en particular, es solo una decisión de estilo
    c)       Para conseguir un audio superior
    d)      No lo hace, se utiliza un solo tono
  3. En el contexto de Asterisk, ¿que significa CDR?
    a)      Customer Data Resource
    b)      Call Detail Record
    c)       Channel Data Review
    d)      Channel Driver Resource
  4. ¿Para cuál de los siguientes casos, Asterisk no utiliza SDP?
    a)      Renegociar el códec de audio utilizado en la llamada SIP mientras se encuentra activa
    b)      Configurar parámetros iniciales de los medios en una llamada SIP
    c)       Poner una llamada SIP en espera
    d)      Colgar una llamada SIP
  5. ¿Qué comando de CLI puede usarse para ver la configuración actual del Dialplan de Asterisk?
    a)      module show extensións.conf
    b)      core print Dialplan
    c)       module show pbx_config
    d)      dialplan show
  6. ¿Cuál de los siguientes no es un driver de canal en Asterisk?
    a)      CDR
    b)      SIP
    c)       Local
    d)      IAX
  7. ¿Qué fichero es utilizado para configurar los drivers del kernel para dispositivos DAHDI?
    a)      /etc/dahdi/dahdi.config
    b)      /etc/dahdi/system.conf
    c)       /etc/dahdi/chan_dahdi.conf
    d)      /etc/dahdi.conf
  8. ¿Con que protocolo VOIP es utilizado RTP?
    a)      IAX2
    b)      DAHDI
    c)       SIP
    d)      Zaptel
  9. ¿Qué ocurre cuando mandamos el comando a Asterisk “restart gracefully”?
    a)      Asterisk deja de recibir llamadas, y reinicia cuando las llamadas activas llegan a 0
    b)      Asterisk continua recibiendo llamadas, y reinicia cuando las llamadas activas llegan a 0
    c)       Nada. Esto no es un comando valido de Asterisk
    d)      Asterisk reinicia inmediatamente
  10. ¿Cuál es la localización por defecto de la música en espera de Asterisk?
    a)      /var/lib/asterisk/moh
    b)      /var/lib/Asterisk/holdmusic
    c)       /var/log/Asterisk/musiconhold
    d)      /etc/asterisk/musiconhold
  11. ¿Cuál de las siguientes afirmaciones es mas cierta con respecto al registro de un dispositivo en el contexto VOIP?
    a)      El registro permite a Asterisk saber dónde deben ir las llamadas destinadas al dispositivo
    b)      El registro es necesario para que el teléfono pueda chequear el Buzon de Voz
    c)       El registro es principalmente utilizado para asociar a una persona con un dispositivo
    d)      El registro es requerido para que solo los usuarios autentificados puedan hacer llamadas
  12. ¿Cuál es la diferencia entre las aplicaciones VoiceMail y VoiceMailMain en Asterisk?
    a)      VoiceMailMain se utiliza para grabar una mensaje de alguien, y VoiceMail se utiliza para que una persona escuche los mensajes recibidos
    b)      VoiceMail se utiliza para grabar una mensaje de alguien, y VoiceMailMain se utiliza para que una persona escuche los mensajes recibidos
    c)       VoiceMail es utilizado cuando los mensajes son guardados en una base de datos o en una almacen IMAP, VoiceMailMain es utilizando cuando los mensajes han sido guardados en el disco duro
    d)      Nada de lo anterior, las dos aplicaciones son intercambiables
  13. ¿Cuál es el ancho de banda requerido para una llamada bidireccional con G.711?
    a)      ~160Kbps
    b)      ~80Kbps
    c)       ~64Kbps
    d)      ~8Kbps
  14. ¿Cuál de los siguientes, no es una cadena de llamada valida en Asterisk?
    a)      Dial(SIP/100,30)
    b)      Dial(30,SIP/100)
    c)       Dial(SIP/100)
    d)      Dial(SIP/100&SIP/200)
  15. Sobre configuraciones de red ¿Qué es la latencia?
    a)      El retraso desde que un paquete es enviado  hasta que es retrasmitido
    b)      El retraso desde que un paquete es trasmitido hasta que es recibido
    c)       El retraso causado por la transcodificacion de audio?
    d)      El retraso entre la marcación y el timbre
  16. ¿Qué configuración prevendrá Asterisk de negociar entre dos canales SIP de enviarse RTP directamente entre ambos?
    a)      canreinvite = no
    b)      trunk = no
    c)       canreinvite = yes
    d)      canreinivite = never
  17. ¿Para que sirve el comando ‘!’ en la línea de comandos de Asterisk?
    a)      Para nada. El comando ‘!’ no es un comando valido en el CLI de Asterisk
    b)      Rejecuta el comando anterior de nuevo
    c)       Ejecuta un comando Shell de Linux
    d)      Confirma que deseas ejecutar el comando especificado
  18. ¿Cuál de las siguientes estrategias NO puede utilizarse en Asterisk con colas?
    a)      Llamar al agente disponible que haya recibido más llamadas
    b)      Llamar a todos los agentes a la vez
    c)       Llamar a un agente aleatorio
    d)      Llamar al agente disponible que haya recibido menos llamadas
  19. ¿Qué es un ‘call file’ en Asterisk?
    a)      Un fichero de comandos que inicia una llamada saliente
    b)      Un fichero temporal que se crea en /dev/ para un canal activo en Asterisk
    c)       Un fichero con registros CDR para facturación
    d)      Un fichero generado por cada buzon de voz para almacenar información como CallerID, hora, etc
  20. ¿Cuál de las siguientes aplicaciones NO esta por defecto en un Dialplan de Asterisk
    a)      Hold()
    b)      Dial()
    c)       Hangup()
    d)      Playback()
  21. ¿Cuál de los siguientes codecs puede ser utilizado por Asterisk para grabar un mensaje del buzon de voz en Asterisk?
    a)      OGG
    b)      MP3
    c)       GSM
    d)      G.729
  22. ¿Cuál de las siguientes líneas en el extensions.conf NO tiene un error de sintaxis?
    a)      exten => 1,n,Dial,SIP/6000
    b)      exten => 1,n,(dial),Dial(SIP/6000)
    c)       exten => 1,n(dial,Dial(SIP/6000)
    d)      exten => 1,n(dial),Dial(SIP/6000)
  23. ¿Cuál de los siguientes puerto(s) debe ser redirigido en un firewall para permitir que el trafico RTP pueda alcanzar Asterisk?
    a)      5060
    b)      8000-10000
    c)       12000-20000
    d)      Aquellos puertos especificados en el archivo de configuración de Asterisk rtp.conf
  24. ¿Cuál de las siguientes extensiones especiales NO está reconocida por Asterisk?
    a)      fax
    b)      i
    c)       T
    d)      r
  25. ¿Cuál es la ubicación por defecto para los archivos de sonido de Asteirsk?
    a)      /var/log/asterisk/sounds
    b)      /etc/asterisk
    c)       /var/lib/asterisk/sounds/
    d)      /usr/lib/Asterisk/sounds/
  26. ¿Cuál de los siguientes, incluirá el contexto [local] en otro contexto?
    a)      #include => local
    b)      Switch => local
    c)       context => local
    d)      include => local
  27. ¿Cuál de los siguientes es el mensaje inicial enviado por un PRI cuando se realiza una llamada saliente?
    a)      CONNECT
    b)      SETUP
    c)       DIAL
    d)      INVITE
  28. ¿Cuál es el máximo numero de participantes posibles en una sala de conferencias de Meetme de Asterisk?
    a)      30
    b)      1000
    c)       240
    d)      No hay limite
  29. ¿Cuál de los siguientes comandos creara una conexión CLI a una instancia de Asterisk corriendo en el transfondo?
    a)      asterisk
    b)      asterisk –x
    c)       asterisk –r
    d)      Asterisk –vvvvvgc
  30. ¿Cuál de los siguientes representa la forma correcta de dereferenciar una variable en Asterisk?
    a)      {$VARIABLE}
    b)      $__VARIABLE
    c)       $[VARIABLE]
    d)      ${VARIABLE}
  31. ¿Qué hara la siguiente línea del DialPlan?
    exten => 1000,1,GotoIf($[${EXTEN}>1000]?hangup:continue)
    a)      Continua hacia la prioridad continue porque la expresión es falsa
    b)      Nada, es una línea invalida de Dialplan
    c)       Continua con la prioridad hangup porque la expresión es cierta
    d)      Cuelga la llamada, porque la expresión es cierta y el comando cuando es verdadero es el cuelgue
  32. ¿Cuál de los siguientes NO es un códec de audio?
    a)      G.711
    b)      H.323
    c)       G.729
    d)      GSM
  33. ¿Cuál de los siguientes modelos describe exactamente la sintaxis exacta de un Dialplan?
    a)      exten => contexto,extensión,prioridad
    b)      exten => extension, prioridad, aplicacion
    c)       extension => prioridad, etiqueta, aplicación
    d)      exten => extension, prioridad, etiqueta, aplicación
  34. ¿Cuál de los siguientes no es una variable de canal automáticamente ajustada por Asterisk?
    a)      CONTEXT
    b)      UNIQUEID
    c)       CHANNEL_NAME
    d)      TIMESTAMP
  35. ¿Qué puerto(s) pueden ser redirigidos en un firewall para permitir que el trafico SIP llegue a Asterisk?
    a)      1000-2000
    b)      443
    c)       5060
    d)      22
  36. ¿Qué método de señalización debe utilizar un dispositivo FXS?
    a)      Session Initiation Protocol
    b)      ISDN
    c)       Foreign eXchange Office
    d)      Foreign eXchange Subscriber
  37. ¿Qué es DUNDi?
    a)      Un registro global de ITSPs
    b)      Un módulo de driver de canal en Asterisk
    c)       Una herramienta para simplificar el enrutamiento de multiples sitios
    d)      Una marca de PBX de Australia
  38. ¿Cómo se utiliza SDP en Asterisk?
    a)      SDP no se utiliza en Asterisk
    b)      Para transportar los medios  en una llamada SIP
    c)       Para inivitar a un individuo a una llamada SIP
    d)      Para negociar/describir los medios en una llamada SIP
  39. Por defecto, ¿dónde se almacenan los ficheros de log en Asterisk?
    a)      /etc/asterisk/logs
    b)      /var/lib/Asterisk/logs
    c)       /usr/log/asterisk
    d)      /var/log/Asterisk
  40. ¿Qué fichero de configuración de Asterisk especifica los puertos utilizados por los medios en una llamada SIP?
    a)      ports.conf
    b)      rtp.conf
    c)       sip.conf
    d)      media.conf
  41. ¿Qué hara la siguiente línea de dialplan?
    exten => s,1,Set(COUNT=$[${COUNT}+1])
    a)      Nada, es una línea invalida para el Dialplan
    b)      Almacenar la cadena “$[${COUNT}+1]” en una variable llamada COUNT
    c)       Poner el valor de COUNT  a 1, porque la expresión se evalua como verdadera
    d)      Limpiar el valor de la variable COUNT  a su valor anterior mas 1
  42. ¿Cuál de las siguientes aplicaciones del Dialplan hara que Asteirsk NO “escuche” una entrada DTMF?
    a)      Read()
    b)      Wait()
    c)       Background()
    d)      WaitExten()
  43. ¿En que fichero de configuración se manejan los huecos de parking de llamadas?
    a)      callparking.conf
    b)      extensions.conf
    c)       parkinglots.conf
    d)      features.conf
  44. ¿Cómo se utiliza la aplicación Record en Asterisk?
    a)      Para monitorizar otro canal en tiempo real
    b)      Para imprimir contenidos de un registro de base de datos en el CLI de Asterisk
    c)       Para crear un fichero de sonido en el disco con el audio recibido de un canal activo
    d)      Para reproducir los contenidos de un registro de base de datos en un canal de Asterisk utilizando un convertidor de texto a voz.
  45. ¿Cuál de los siguientes no es un soporte de CDR valido por defecto en Asterisk?
    a)      Hoja de cálculo de Excel
    b)      Archivos .csv
    c)       Servidor RADIUS
    d)      Base de datos Relacional
  46. ¿Qué opción de configuración del sip.conf debe realizarse para permitir que un dispositivo se registre contra Asterisk?
    a)      host = dynamic
    b)      host = unknown
    c)       address = any
    d)      ipaddress = dynamic
  47. ¿Bajo qué licencia de software libre está disponible Asterisk?
    a)      LGPL
    b)      BSD
    c)       GPLv2
    d)      GPLv3
  48. ¿En cuál de los órdenes siguientes, los códecs consumen de menos ancho de banda a mayor ancho de banda?
    a)      GSM, G.711, G.729
    b)      G729, G.711, GSM
    c)       G.711, GSM, G.729
    d)      G.729, GSM, G.711
  49. ¿Cuál de los siguientes NO es una forma para generar una llamada de otra forma que no sea un teléfono?
    a)      A través del Asterisk Manager Interface
    b)      A través de un fichero creado específicamente y copiado en /var/spool/asterisk/outgoing
    c)       A través de Asterisk Realtime Architecture
    d)      A través de un comando de CLI “console dial”
  50. En un sistema típico Linux, ¿Cuál de los siguientes comandos NO se utiliza para saber la carga media del sistema?
    a)      Utilizando la herramienta “load”
    b)      Viendo los contenidos de /proc/loadavg
    c)       Utilizando la herramienta “top”
    d)      Utilizando la herramienta “uptime”
  51. ¿Cuál de los siguientes, NO es un método de almacenaje valido para un buzón de voz en un sistema Asterisk sin modificar?
    a)      En la RAM
    b)      Via IMAP
    c)       Via ODBC
    d)      En el sistema de archivos
  52. ¿Sobre qué usuario debería funcionar Asterisk?
    a)      root
    b)      asterisk
    c)       nadie
    d)      Asterisk debería ser lanzado desde cualquier usuario
  53. En Asterisk, ¿Cuál es la diferencia entre formato y códec?
    a)      El formato describe el protocolo usado, y el códec describe los medios usados
    b)      El formato traduce los medios guardados en disco, y el códec traduce los medios a ser trasmitidos en el canal
    c)       El formato describe los medios entrantes y el códec  describe los medios salientes
    d)      El formato describe los medios de video, y el códec describe los medios de audio
  54. ¿Qué archivo de configuración controla los “paths” del sistema que Asterisk utiliza para guardar los modulos, CDR, y logs?
    a)      files.conf
    b)      directory.conf
    c)       asterisk.conf
    d)      logger.conf
  55. ¿Cuál de los siguientes NO es una aplicación de Asterisk comúnmente usada para propósitos de Debug?
    a)      Jitter
    b)      Echo
    c)       Milliwatt
    d)      NoOp
  56. ¿Cuál de los siguientes NO es cierto acerca de Asterisk y DAHDI?
    a)      Asterisk y DAHDI están disponibles bajo licencias Open Source
    b)      Asterisk y DAHDI trabajan juntos para ofrecer interfaces físicas a un sistema PBX
    c)       Asterisk y DAHDI están patrocinados y mantenidos por Digium
    d)      Asterisk y DAHDI solo son compatibles cuando los mismos números de versión son utilizados para ambos
  57. ¿Cuál de los siguientes NO es un fichero de configuración estándar para Asterisk?
    a)      pri.conf
    b)      chan_dahdi.conf
    c)       sip.conf
    d)      iax.conf
  58. ¿Qué es el “jitter”?
    a)      La latencia entre dos puntos VOIP
    b)      Cambios en el volumen/ganancia provocados por la transcodificación
    c)       Variaciones en la latencia entre dos puntos VOIP
    d)      El eco en los enlaces VOIP
  59. ¿Cuál de los siguientes es la sintaxis correcta para configurar un canal SIP que solo permita el códec GSM?
    a)      disallow = all, allow = all
    b)      deny=ulaw,alaw,g729,g723
    c)       allow =gsm
    d)      permit = gsm, deny = all
  60. ¿Cuál es la diferencia entre las salidas de “verbose” y “debug” en el Asterisk CLI?
    a)      La salida Verbose es acerca de los canales, y la salida Debug es acerca de otras partes de Asterisk
    b)      La salida Verbose, suelen ser mensajes de estado útiles para administradores mientras que la salida Debug suelen ser mensajes útiles para desarrolladores
    c)       No existe diferencia. Ambos tipos de salida de consola son lo mismo.
    d)      La salida Debug, suelen ser mensajes de estado útiles para administradores mientras que la salida Verbose suelen ser mensajes útiles para desarrolladores
A continuación, las soluciones que yo creo que son las correctas. Me gustaría que alguien experimentado las revisase tambien, y comentase cuales cree que pueden estar mal, o de las que tengo dudas, que opina al respecto:
Solución 1: a)
Solución 2: a)
Solución 3: b)
Solución 4: d)
Solución 5: d)
Solución 6: a)
Solución 7: b)
Solución 8: c)
Solución 9: a)
Solución 10: a)
Solución 11: a)
Solución 12: b)
Solución 13: c)
Solución 14: b)
Solución 15: b)
Solución 16: a)
Solución 17: c)
Solución 18: a)
Solución 19: a)
Solución 20: a)
Solución 21: c)
Solución 22: d)
Solución 23: d)
Solución 24: d)
Solución 25: c)
Solución 26: d)
Solución 27: b)
Solución 28: b)
Solución 29: c)
Solución 30: d)
Solución 31: a)
Solución 32: b)
Solución: 33: b)
Solución 34: c)
Solución 35: c)
Solución 36: c)
Solución 37: c)
Solucion 38: d)
Solución 39: d)
Solución 40: b)
Solución 41: d)
Solución 42: b)
Solución 43: d)
Solución 44: c)
Solución 45: a)
Solución 46: a)
Solución 47: c)
Solución 48: d)
Solución 49: c)
Solución 50: a)
Solución 51: a)
Solución 52: b)
Solución 53: b)
Solución 54: c)
Solución 55: a)
Solución 56: d)
Solución 57: a)
Solución 58: c)
Solución 59: c)
Solución: 60: b)

Instalando y configurando Asterisk PBX en CentOS

Vamos a tener un pequeño instructivo de cómo instalar Asterisk en CentOS  pero con la salvedad de que no utilizaremos tarjeta FXO (Foreign Exchange Office), la cual se utiliza regularmente para conectar nuestra PBX a una PSTN mediante una línea análoga. En consecuencia, la PBX que configuraremos, nos servirá únicamente para una red local y, si abrimos los puertos correspondientes en nuestro modem DSL, podremos accesarla desde Internet.

Instalando Asterisk PBX

Desde la página oficial de Asterisk podemos descargar el fuente necesario para su compilación e instalación, pero no sin antes instalar los paquetes necesarios para su compilación y la de otros componentes, que para este tutorial no son necesarios, como dadhi-linux y dadhi-tools en CentOS.



# yum install -y gcc ncurses-devel libtermcap-devel kernel-devel gcc-c++ openssl-devel newt-devel zlib-devel unixODBC-devel libtool make
Ahora nos dirigimos a /usr/src para descargar el fuente de Asterisk 1.6.2.19:
# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.19.tar.gz
# tar xzvf asterisk-1.6.2.19.tar.gz
# cd asterisk-1.6.2.19
# ./configure
# make
# make install
# make config
# make samples
Configurando Asterisk PBX
El archivo extensions.conf es la parte central de toda la configuración, dado que es donde se define el dialplan de Asterisk. Se compone de 4 partes principales: contextos, extensiones, prioridades y aplicaciones. El dialplan se divide en secciones denominadas contextos, que están rotuladas y contienen un grupo de extensiones. Los contextos se definen colocando su nombre entre corchetes ([]). Este nombre puede contener caracteres alfanuméricos además del guión y el guión bajo. Por ejemplo: [interno]

Todas las instrucciones son parte del contexto hasta que el próximo contexto es definido. Existen dos contextos especiales:
[general] (variables predefinidas)
[globals] (variables no predefinidas)
Una extensión es una instrucción que será seguida por Asterisk, luego de ser disparada por una llamada entrante o bien por dígitos discados en un canal, definida en el marco de un contexto. La sintaxis de una extensión es la siguiente: exten => nombre,prioridad,aplicación()
exten => 101,1,answer()
Extensions (start): Es una extensión especial que es utilizada si una llamada entra a un contexto sin una extensión destino específica (por ejemplo una llamada en un puerto FXO); la llamada trata de entrar automáticamente a la extensiones.
[interno]
exten => s,1,answer()
Una extensión puede tener varios pasos, denominados prioridades. Las prioridades comienzan con 1 y se ejecutan en orden numérico. Si no existe la prioridad N+1, Asterisk no salta a la siguiente prioridad (N+2). Cada prioridad ejecuta una única aplicación. Por ejemplo:
exten => 101,1,Answer()
exten => 101,2,Hangup()
Prioridades sin numerar
Asterisk introduce el uso de la prioridad n (next). Cada vez que Asterisk encuentra una prioridad n, toma el número de la prioridad anterior y le suma 1. Simplifica el proceso de escritura del dialplan, evitando tener que volver a numerar las prioridades al insertar una prioridad para la misma exten. Por ejemplo:
exten => 103,1,Answer()
exten => 103,n,hago algo
exten => 103,n,Hangup()
Nota como el orden numérico (1,2,3,etc) es reemplazado por la letra n.

Aplicaciones
Las aplicaciones realizan una acción determinada en el canal actual, controlando el comportamiento de la llamada y del sistema en sí. Algunos ejemplos son:
answer(): contesta una llamada
hangup(): cuelga una llamada
dial(): realiza una llamada saliente
playback(): reproduce un archivo de sonido
Ciertas aplicaciones requieren del pasaje de parámetros, estos se incluyen dentro de los paréntesis, separados por coma “,”.

Un Dialplan simple
Basándome en los conceptos anteriores y otros del libro de Asterisk, he creado este Dialplan sencillo y fácil de entener su funcionamiento.

Configuración del fichero extensions.conf (Todo esto va al final del fichero):
[FRATERNEO]
;Las extensiones del usuario 500.
exten => 500,1,Answer( ) ;Costumbre de que asterisk conteste la llamada
exten => 500,n,Dial(Sip/500) ;llamando al usuario 500
exten => 500,n,Voicemail(500@default,u) ;usuario no disponible
exten => 500,n,Voicemail(500@default,b) ;usuario ocupada
exten => 500,n,Hangup()  ;Otra buena costumbre que asterisk finalice proceso

;Las extensiones del usuario 510.
exten => 510,1,Answer( )
exten => 510,n,Dial(Sip/510)
exten => 510,n,Voicemail(510@default,u)
exten => 510,n,Voicemail(510@default,b)
exten => 510,n,Hangup()

;Las extensiones del usuario 520.
exten => 520,1,Answer( ) 
exten => 520,n,Dial(Sip/520) 
exten => 520,n,Voicemail(520@default,u) 
exten => 520,n,Voicemail(520@default,b) 
exten => 520,n,Hangup() 

;Las extensiones del usuario 530.
exten => 530,1,Answer( )
exten => 530,n,Dial(Sip/530)
exten => 530,n,Voicemail(530@default,u)
exten => 530,n,Voicemail(530@default,b)
exten => 530,n,Hangup()
Configuración del fichero sip.conf (Todo esto va al final del fichero):
[500]
context=FRATERNEO  ;El contexto que hablamos en el Extensions.conf
callerid="Claudio" <500> ;Identificador de llamada
secret=500 ;Contraseña
mailbox=500@fraterneo ;Correo de Voz, y esta en el contexto por FRATERNEO
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw

[510]
context=FRATERNEO
callerid="Jose" <510>
secret=510
mailbox=510@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw

[520]
context=FRATERNEO
callerid="Ignacio" <520>
secret=520
mailbox=520@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw

[530]
context=FRATERNEO
callerid="Dario" <520>
secret=530
mailbox=530@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw
Es sumamente importante no tocar el resto del fichero ya que todo está comentado y viene por defecto como ejemplo con sus comentarios y explicaciones.
Ahora procedemos a iniciar el servicio asterisk, hacer que cargue automáticamente al incicio y recargar el el Dialplan para que funcione con la configuración que hemos agregado.
# service asterisk start
# chkconfig asterisk --level 345 on
Para entrar a la consola de Asterisk lo haremos con el comando asterisk -rv (aunque podemos agregar muchas "v" para que sea más "verboso", es decir, nos de más información de lo que está pasando en Asterisk).
# asterisk -rvvvvvvvvvvvvv
>localhost*CLI> dialplan reload
Configurar los clientes
Solo nos queda esta parte de configurar los teléfonos. Estos pueden ser SoftPhones (aplicación) o teléfonos físicos que soporten el protocolo SIP. Un ejemplo de SoftPhone lo es Ekiga, en el cual podemos configurar una cuenta SIP.




Finalmente si abrimos los puertos de nuestro modem DSL que Asterisk utiliza, podremos accesar fuera de nuestra red local y configurar clientes amigos desde Internet. En este enlace pueden ver una lista de comandos del CLI de Asterisk.

Espero les sea de gran utilidad y aprendizaje. Cualquier sugerencia o corrección se las agradeceré en los comentarios!

Asterisk: Configuración del VoiceMail


Algo elemental en Asterisk y en cualquier central telefónica es la configuración de un correo de voz, por tal razón escribo esta pequeña guia que pretende ayudarte en el proceso de configuración de este con Asterisk.
El archivo principal para la configuración del correo de voz es voicemail.conf, podemos encontrar una configuración de ejemplo en la fuente de Asterisk, o podemos crear uno desde cero, como en este caso.

De ejemplo tenemos ya configuradas dos extensiones SIP, 1001 y 1002. Creamos nuestro archivo voicemail.conf en el directorio raiz de Asterisk (Normalmente /etc/asterisk), y vamos agregándole los siguientes parámetros:

==================Fichero voicemail.conf===================
[general]
;Formato en el cual se grabaran los mensajes
format=gsm|wav 
;Remitente del correo que nos llegara con la notificación de que tenemos un voicemail
serveremail=asterisk@punto-libre.org   
;Nombre del remitente del correo que nos llegara
fromstring=Asterisk
;Activamos que nos mande el voicemail junto con la notificación
attach=yes   
;Formato en el cual se enviaran los voicemail por correo
attachfmt=gsm
;Numero de mensajes maximos que se almacenaran por casilla
maxmsg=50   
;Numero de segundos que durará cada mensaje
maxsecs=180  
;Numero de segundos que podra durar el mensaje personalizado de bienvenida
maxgreet=100 
;Numero de milisegundos (1000ms=1segundo) que se podra adelantar un mensaje
skipms=5000
;Numero Maximo de silencio que se podrá durar antes de que termine la grabación 
maxsilence=5
;Parametro que determina lo que se considera ruido, mientras mas bajo... mas sencible
silencethreshold=120
;Numero maximo de veces que podremos intentar un logueo
maxlogins=3
;Mover automaticamente los mensajes oídos a la carpeta de mensajes viejos
moveheard=yes
;Contexto de Voicemail por defecto para los usuarios
userscontext=default
;Permite que se pueda mandar un Voicemail desde el VoicemailMain
sendvoicemail=yes


;Declaramos un Contexto de Voicemail
[PuntoLibreVmail)

;Declaramos las casillas del contexto
;Sintaxis:   Extension => Contraseñá, Nombre, Correo, Opciones 

1001 => 1001, Ramphis Che, rche@prueba.net
1002 => 1002, Wilfredo Che, wche@prueba.net



==================Fichero voicemail.conf===================
Luego procedemos a editar el archivo sip.conf, y le ponemos a cada usuario el contexto de voicemail a usar y el idioma, por ejemplo:

==================Fichero sip.conf=======================
[1001]
type=friend
host=dynamic
username=1001
secret=1001
voicemail=PuntoLibreVmail
language=es
context=internal
dtmfmode=auto

[1002]
type=friend
host=dynamic
username=1002
secret=1002
voicemail=PuntoLibreVmail
language=es
context=internal

dtmfmode=auto

===================Fichero sip.conf======================

Luego editamos nuestro plan de marcado, editando el archivo extensions.conf de la siguiente manera:

==================Fichero extensions.conf===================

[internal]

exten => _10XX,1,Dial(SIP/${EXTEN},10)
exten => _10XX,n,Voicemail(${EXTEN}@voicemail)
include => voicemail

[voicemail]
exten => *99,1,Answer()
exten => *99,n,VoiceMailMain(${CALLERID(num)}@voicemail)
exten => *99,n,Hangup()


==================Fichero extensions.conf===================

De esta manera cuando se marque una extensión, esta va a timbrar por 10 segundos, y luego le pedira que deje un mensaje, y al marcar *99 se podrá entrar a el correo de voz, y le pedirá solamente la contraseña (Ya que se especifica el usuario automáticamente al poner la variable ${CALLERID(num)}).
Finalmente reiniciamos Asterisk y solo faltaría probar:
# service asterisk restart

sábado, 31 de agosto de 2013

Descargar videos de youtube con un combo de teclas.

Siguiendo la línea del post anterior en que uso mplayer para reproducir videos de youtube, se me acaba de ocurrir otro tip estúpido, de esos que simplifican la vida:
Descargar videos de youtube simplemente presionando una combinación de teclas (evitando así eso de instalar extensiones para el navegador que cumplan la misma función y si te pasa como en mi caso, evitando llevar las manos hasta el mouse para hacer click, que soy de los que tienen mas tiempo las manos en el teclado que en el mouse).
La idea es:
  • Copiar la URL (la dirección del video de youtube) al clipboard o portapales – como prefieran
  • Llamar por medio de un atajo de teclado a un script de bash que descargue el video en donde le especifiquemos.
  • Opcional: reproducir el video descargado con mplayer o tu reproductor de cabecera.
Desde un terminal (o si prefieren, en modo gráfico) creen una carpeta en donde almacenar los videos que descargará el script. El siguiente comando crea una carpeta llamada videos dentro de /home/tu_usuario/ :
mkdir  ~/videos
Instalar el paquete youtube-dl y si no lo tienen instalado del post anterior instalen además el paquete xclip. No puedo dar instrucciones específicas para cada distribución. Usen su gestor de paquetes para instalarlos. En Gentoo:
emerge youtube-dl xclip
Crear un archivo en blanco:
touch ytdl.sh
hacerlo ejecutable:
chmod +x ytdl.sh
Editar con su editor de texto de cabecera el archivo ytdl.sh:
nano ytdl.sh
Copiar dentro del archivo el siguiente contenido:
#!/bin/bash
youtube_url=`xclip -o|sed “s/ .*//”|head -n1`
cd ~/videos
#Descomentar la opción que se vaya a usar:
#Opción 1 sin especificar nombre de usuario y contraseña:
#youtube-dl -b -t $youtube_url
#Opción 2, especificado usuario y contraseña:
#youtube-dl -u <usuario> -p <password> -b -t $youtube_url
Crear un atajo de teclado que llame a ytdl.sh:
De nuevo no puedo dar instrucciones específicas pero todos los gestores de ventanas (Gnome, KDE, XFCE, etc…) tienen algún modo de definir atajos de teclado.
He estado mirando un poco y para usar atajos de teclado en XCFE que es el entorno de escritorio que estoy usando hay que ir a Settings / Xfce 4 settings manager / Keyboard / Application shortcuts. (Sepan disculpar pero tengo XFCE instalado en inglés).
Por ejemplo, asociar el combo de teclas CTRL + Y para que al ser pulsado ejecute ytdl.sh o si quieren llamarlo por el path completo, que llame a /usr/bin/ytdl.sh
Es realmente un TIP estúpido ¿No?
Simplifica mucho la vida, eso si…