viernes, 1 de julio de 2011

Optimiza tu servidor proxy creando un ramdisk! acelera las consultas al cache

Por cada petición de página web que realizan los clientes al servidor proxy, éste tiene que buscar en el disco duro a ver si tiene el contenido de la página y leerlo para enviarlo al cliente.

Cuando aumenta el número de consultas, el acceso al disco se dispara creando un cuello de botella entre la velocidad de procesamiento del servidor y la capacidad de lectura del disco.

La solución más óptima es eliminar ese cuello de botella y crear un disco duro virtual en la memoria ram y colocar allí la cache del proxy. De esta manera las páginas se incrementará la velocidad de respuesta del servidor y no se degradará tan rápido el disco duro del servidor.

La recomendación es tener al menos 16 GB de memoria RAM para poner a trabajar el servidor proxy con ramdisk. Considerando que squid consume gran parte de la memoria RAM del servidor, con 16GB es posible utilizar 8GB para el ramdisk y el resto para la operatividad del servidor.

Para realizar esta optimización debes seguir los siguientes pasos:

1. Creación del ramdisk
Se crea la carpeta donde vamos a apuntar ese disco duro virtual que puede ser en /cache y luego se procede a reasignar el espacio de memoria RAM a esa carpeta

En la terminal en modo superusuario se ejecutan los siguientes comandos:

#mkdir /cache
#mount -t tmpfs -o size=8G tmpfs /cache/

2. Modificación de las opciones del squid.conf

Y se modifican las opciones en el archivo de configuración squid.conf


################## squid.conf #################################
cache_log /cache/var/log/squid/cache.log
access_log /cache/var/log/squid/access.log
cache_store_log /cache/var/log/squid/store.log
cache_swap_log /cache/var/log/squid/swap.log

cache_dir ufs /cache 7500 16 256
coredump_dir /cache

###############################################################

No olvide crear las rutas para los logs dentro del directorio /cache y asignarle los permisos respectivos

mkdir /cache/var/log/squid

3. Creación de la estructura de directorios de cache y puesta en marcha

Para crear la estructura de directorios de la cache se invoca al squid con la opción -z. Debe estar detenido el servicio para ejecutar este comando.

Ejemplo:
/opt/squid/sbin/squid -z

Por último iniciamos el servicio de squid y ya queda lista la optimización
/opt/squid/sbin/squid

La única desventaja de este tipo de discos es que al momento de reiniciar el servidor se borra toda la cache y la estructura de directorios que tenemos creada, es por ello que se debe crear un script que al iniciar el servidor cree el ramdisk y la estructura de directorios.

En próximos post explicaré como crear este script de inicio.

jueves, 30 de junio de 2011

Cómo analizar el tipo de peticiones que le hacen a tu servidor proxy con squid

Para saber como está respondiendo nuestro servidor proxy podemos revisar directamente el archivo "access.log" y de alguna manera contar cuántas consultas han resultado con TCP_MISS/200, o TCP_HIT/200, o TCP_DENIED/403, o TCP_REFRESH_UNMODIFIED/304 inclusive podríamos detectar errores si nos aparece TCP_SWAPFAIL_MISS/200 entre otras cosas.

Para obtener la cuenta de todas estas peticiones lo que debemos hacer es ejecutar el siguente comando como superusuario en la terminal del servidor proxy y automáticamente nos devolverá un resultado como el mostrado mas adelante. Es recomendable ejecutar este comando al final de la tarde o en la noche por que generalmente este archivo de log rota diariamente y al final del dia es que posee la mayor cantidad de datos para analizar el comportamiento.

El comando es el siguiente:

cat "archivo access.log" |gawk '{print $4}'|sort|uniq -c|sort -nr

Ejemplo:

cat /var/log/squid/access.log |gawk '{print $4}'|sort|uniq -c|sort -nr

Y nos devolverá una salida como la mostrada a continuación:

1771732 TCP_MISS/200
382329 TCP_HIT/200
156018 TCP_MEM_HIT/200
127122 TCP_IMS_HIT/304
113732 TCP_DENIED/403
99512 TCP_REFRESH_UNMODIFIED/304
75567 TCP_MISS/503
74932 TCP_REFRESH_UNMODIFIED/200
69298 TCP_MISS/302
66133 TCP_NEGATIVE_HIT/404
52287 TCP_MISS/304
45430 TCP_MISS/204
43921 TCP_MISS/000
23179 TCP_REFRESH_MODIFIED/200
20036 TCP_CLIENT_REFRESH_MISS/200
18005 TCP_CLIENT_REFRESH_MISS/304
18002 TCP_MISS/404
16565 TCP_MISS/400
15074 TCP_MISS/206
10655 TCP_MISS/301
10621 TCP_NEGATIVE_HIT/503
10064 TCP_NEGATIVE_HIT/204
4964 TCP_IMS_HIT/200
4142 TCP_MISS/502
2788 TCP_MEM_HIT/302
2592 TCP_MISS/403
1872 TCP_HIT/000
1851 NONE/400
1730 TCP_HIT/206
1407 TCP_SWAPFAIL_MISS/200
863 TCP_MISS/303
699 TCP_REFRESH_MODIFIED/302
645 TCP_HIT/301
642 TCP_MEM_HIT/301
626 TCP_CLIENT_REFRESH_MISS/204
601 TCP_REFRESH_MODIFIED/206
541 TCP_NEGATIVE_HIT/502
540 TCP_NEGATIVE_HIT/403
540 TCP_MISS/504
462 TCP_MISS/500
385 TCP_SWAPFAIL_MISS/304
298 TCP_CLIENT_REFRESH_MISS/404
292 TCP_HIT/302
276 TCP_MISS/405
270 TCP_MISS/401
210 TCP_CLIENT_REFRESH_MISS/000
189 TCP_MISS/308
178 TCP_MEM_HIT/206
169 TCP_NEGATIVE_HIT/400
136 TCP_NEGATIVE_HIT/500
133 TCP_CLIENT_REFRESH_MISS/400
110 TCP_REFRESH_FAIL/200
106 TCP_MISS/410
61 TCP_MISS/408
59 TCP_MISS/999
58 TCP_CLIENT_REFRESH_MISS/503
47 TCP_REFRESH_UNMODIFIED/206
38 TCP_MISS/307
37 TCP_REFRESH_MODIFIED/408
26 TCP_SWAPFAIL_MISS/000
26 TCP_MISS/201
18 TCP_MISS/207
17 TCP_MISS/202
16 TCP_CLIENT_REFRESH_MISS/206
15 NONE/411
13 TCP_MISS/416
12 TCP_MISS/414
12 TCP_MISS/413
12 TCP_CLIENT_REFRESH_MISS/302
10 TCP_MISS/456
9 TCP_REFRESH_MODIFIED/404
9 TCP_MISS/406
8 TCP_REFRESH_MODIFIED/403
8 TCP_MISS/415
8 TCP_CLIENT_REFRESH_MISS/301
7 TCP_CLIENT_REFRESH_MISS/403
5 TCP_MISS/501
5 TCP_MISS/453
5 TCP_CLIENT_REFRESH_MISS/500
4 TCP_SWAPFAIL_MISS/301
4 TCP_REFRESH_MODIFIED/301
4 TCP_CLIENT_REFRESH_MISS/408
3 TCP_MISS/840
3 TCP_MISS/300
3 TCP_MISS/203
3 TCP_CLIENT_REFRESH_MISS/502
2 TCP_SWAPFAIL_MISS/302
2 TCP_MISS/409
2 TCP_CLIENT_REFRESH_MISS/504
1 TCP_MISS/841
1 TCP_MISS/422
1 TCP_MISS/412
1 TCP_CLIENT_REFRESH_MISS/303

jueves, 9 de junio de 2011

¿Cómo ver páginas IPv4 desde IPv6?

Puedes navegar a traves de toda la red utilizando a sixxs como gateway/proxy IPv6-IPv4 y de esta manera abrir páginas que no están en la red IPv6

¿Cómo acceder?

En el explorador coloca la dirección de la página a la que quieres acceder agregandole ".sixxs.org" o ".ipv6.sixxs.org"

Ejemplo:
http://www.cnn.com.sixxs.org
http://www.wikipedia.org.sixxs.org
http://www.noticias24.com.sixxs.org

Más información en: http://www.sixxs.net/tools/gateway/

Como navegar en firefox utilizando direcciones IPv6

¿Quién se ha preguntado como ir a una dirección IPv6 utilizando la dirección IP directamente el el navegador?

La solución a continuación:

Coloque la IP entre corchetes []

http://[2a00:1450:4008:c00::6a]

Pruebalo ahora!

martes, 7 de junio de 2011

Miniproyecto IVR asterisk

Este miniproyecto consta de la implementación de un IVR en asterisk, para el centro de atención al cliente de la Dirección de Tecnologías de Información de la UCAB.

A continuación se le presenta el diagrama de flujo del IVR




1.Diagrama de Flujo IVR
Menu1: Bienvenido al centro de atención al cliente de la Dirección de Tecnologías de Información UCAB. Si desea información acerca de nuestros productos y servicios, Marque 1. Si desea reportar una falla, Marque 2.

Menu2: Los servicios que ofrece la DTI son: Mensajería, Modulo 7, Soporte técnico a usuarios. Si desea conocer más sobre el servicio de mensajería, Marque 1. Si desea conocer más sobre el servicio de Modulo 7, marque 2.

Menu3: El servicio de mensajería contempla correo electrónico zimbra para profesores, y gmail para estudiantes. También posee chat interno y envío masivo de sms para los estudiantes. Si desea hablar con uno de nuestros ingenieros para profundizar en el tema, marque 1. Para regresar al menú anterior marque 9.

Menu4: Módulo7 es una interfaz interactiva y amigable que permite al Profesor de la UCAB poner a disposición de sus estudiantes materiales, asignaciones, entrega de tareas y foros. Si desea solicitar su clave de modulo7 marque 1. Si Tiene alguna duda acerca de cómo usar el sistema, marque 2. Para regresar al menú anterior marque 9.

Especificaciones adicionales:
Debe crear la extensión 3001 para que el profesor pueda registrarse en la central telefónica y probar el IVR

Todas las voces serán generadas con el software “Loquendo”. Éste permite crear la voz del IVR según el texto introducido.

Extensiones:
La extensión del Centro de atención al cliente será la 4398.
Las extensiones de las operadoras de atención al cliente son 4441 y 4321
Las extensiones de soporte técnico son la 4396, 4397 y la 4355
Las extensiones del departamento de Redes y Seguridad son 4531
La extensión del profesor será la 3001

Timbrado simultaneo (Grupo de timbrado)

Asterisk soporta repicar multiples extensiones al mismo tiempo. Esto se hace con la funcion Dial()

Dial(type1/identifier1[&type2/identifier2[&type3/identifier3... ] ], timeout, options, URL)

Un ejemplo de esto es:

Dial(SIP/101&SIP/110&SIP/115)

Lo que hace esta aplicación es llamar a la extensión 101 y a la 110 y a la 115 al mismo tiempo.

De esta manera podemos realizar grupos de timbrado en un IVR.

miércoles, 1 de junio de 2011

Ejemplo IVR asterisk

[interno]

exten => 0800,1,Answer()
exten => 0800,n,Goto(menu1,s,1)

[menu1]
exten => _s,1,Answer()
exten => _s,n,BackGround(hello-world)
exten => _s,n,Waitexten(2)
exten => 1,1,Goto(menu2,s,1)
exten => 2,1,Goto(menu3,s,1)
exten => t,1,Goto(menu1,s,1)
exten => i,1,Goto(menu1,s,1)

[menu2]
exten => _s,1,Answer()
exten => _s,2,PlayBack(tt-monkeys)
exten => _s,3,Hangup()

[menu3]
exten => _s,1,Answer()
exten => _s,2,PlayBack(vm-intro)
exten => _s,3,Hangup()

martes, 31 de mayo de 2011

Primeros Pasos con asterisk: Configurando extensiones y plan de marcado

Los archivos de configuración de nuestra central telefónica de voz sobre ip se encuentran en la carpeta:

/etc/asterisk/

Allí hay dos archivos muy importantes para la configuración de la central que son:
sip.conf
extensions.conf


Parte 1.
Configurar 1 extensión y registrarla en asterisk.
Archivos afectados sip.conf

En la terminal de linux ejecute el siguiente comando:

nano /etc/asterisk/sip.conf

/// Agregar al final del archivo la extensión 3001.

[3001]
;Tipo de usuario peer, friend, user.
type=friend
;Clave
secret=3001
;Tipo de dispositivo
host=dynamic
;Si se permite hacer llamadas directas entre los dos teléfonos.
canreinvite=no
;Tonos dtmf
dtmfmode=rfc2833
;Mide el retardo para detectar si está activo o no
qualify=yes
;Contexto principal
context=interno
;Si permite NAT
nat=yes
;Nombre
callerid="UNO" <3001>
;Idioma
language=es
;Deshabilita todos los codecs
disallow=all
;Primera prioridad
allow=gsm
;Segunda prioridad
allow=alaw
;Tercera prioridad
allow=ulaw

/// Guarde el archivo y ejecute el siguiente comando en la terminal para refrescar los cambios.

asterisk -rx reload

Ahora Configure su softphone para que se registre a la central telefónica.
Recomiendo utilizar en linux: Twinkle y en Windows Xlite.

Compruebe que se ha registrado utilizando la consola de asterisk y ejecutando el comando sip show peers.

Esto se hace desde la terminal con el comando:
asterisk -rv

y luego el comando

sip show peers


Parte 2
Configure 1 servicio de llamada en su asterisk.
Cuando marques 90 te dicta el numero 90 como nueve, cero.
Archivos afectados: extensions.conf

Ejecuta en la terminal el comando:
nano /etc/asterisk/extensions.conf

/// Agrega al final del archivo el contexto interno.

[interno]
exten => 90,1,Answer()
exten => 90,n,SayDigits($EXTEN)
exten => 90,n,Hangup()

/// Para finalizar, guarda el archivo y ejecuta el siguiente comando en la terminal para refrescar los cambios.

asterisk -rx reload

Ahora puedes probar desde tu softphone llamando a la extension 90.

Parte 3
Configure otra extensión en su central telefónica y registre un segundo softphone para realizar una llamada.
Archivos afectados: extensions.conf sip.conf

Ejecute el comando en la terminal:

nano /etc/asterisk/extensions.conf

//Agregue al final del contexto interno el plan de marcado para los numeros privados de la central.

[interno]

exten => _3XXX,1,Answer()
exten => _3XXX,n,Dial(SIP/${EXTEN})
exten => _3XXX,n,Hangup()

/// Guarde el archivo.

Ejecute en la terminal el comando:

nano /etc/asterisk/sip.conf

/// Agregue al final del archivo la extensión 3002.

[3002]
;Tipo de usuario peer, friend, user.
type=friend
;Clave
secret=3002
;Tipo de dispositivo
host=dynamic
;Si se permite hacer llamadas directas entre los dos teléfonos.
canreinvite=no
;Tonos dtmf
dtmfmode=rfc2833
;Mide el retardo para detectar si está activo o no
qualify=yes
;Contexto principal
context=interno
;Si permite NAT
nat=yes
;Nombre
callerid="DOS" <3002>
;Idioma
language=es
;Deshabilita todos los codecs
disallow=all
;Primera prioridad
allow=gsm
;Segunda prioridad
allow=alaw
;Tercera prioridad
allow=ulaw
Generalidades del archivo extensions.conf

Extensiones predefinidas
- i - Inválida
- s - Start
- h - Hangup
- t - Timeout
- T - AbsoluteTimeout
- o - Operator


Patrones de extensiones:
Si una extensión comienza con '_', se considera un patrón.
Cuando usamos patrones utilizamos los siguientes caracteres especiales:
- X - cualquier dígito entre 0-9
- Z - cualquier dígito entre 1-9
- N - cualquier dígito entre 2-9
- [12679] - cualquier dígito que esté entre paréntesis (en este ejemplo: 1,2,6,7,9)
- . - (punto) Es un comodín. Puede coincidir con lo que se marque de allí en adelante
_1234. - Ejemplo: Usando el comodín . (punto) es válido utilizar todo número que empiece con 1234 Es válido por ejemplo 1234888 o 1234554 etc.

lunes, 23 de mayo de 2011

Guia para instalar asterisk 1.4

Guia de Instalación ASTERISK 1.4 en ubuntu server.
Por: Ing. Felipe Vicens.



1. Primero instalamos los paquetes básicos para poder compilar asterisk.
En la terminal de linux en modo superusuario ejecutamos los siguientes comandos:
sudo aptitude install ncurses-base ncurses-bin ncurses-term
sudo aptitude install libncurses5 libncursesw5 libxml2-dev
sudo aptitude install libncurses5-dev libncursesw5-dev build-essential
sudo aptitude install zlib1g zlib1g-dev
sudo aptitude install linux-headers-$(uname -r)
sudo aptitude install curl openssl

2. Descargamos las fuentes
cd /tmp
wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.9.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.25.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.4.8.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-2.6.1.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-2.1.0.2.tar.gz

3. Las descomprimimos en /usr/local/src
tar -zxvf /tmp/libpri-1.4.9.tar.gz -C /usr/local/src
tar -zxvf /tmp/asterisk-1.4.25.tar.gz -C /usr/local/src
tar -zxvf /tmp/asterisk-addons-1.4.8.tar.gz -C /usr/local/src
tar -zxvf /tmp/dahdi-linux-2.6.1.tar.gz -C /usr/local/src
tar -zxvf /tmp/dahdi-tools-2.1.0.2.tar.gz -C /usr/local/src

4. Compilamos las fuentes.
El orden de compilación es:
libpri
dahdi-linux
dahdi-tools
asterisk
asterisk-addons

4.1 Instalación de libpri.
cd /usr/local/src/libpri-1.4.9
make clean
make install

4.2 Instalación de dahdi-linux
cd /usr/local/src/dahdi-linux-2.6.1
make clean
make
make install

4.3 Instalación de dahdi-tools
cd /usr/local/src/dahdi-tools-2.1.0.2
./configure
make menuselect
make
make install
make config



4.4 Instalación de Asterisk
cd /usr/local/src/asterisk-1.4.25
./configure
make menuselect
make
make install
make samples
make config


4.5 Instalación de Asterisk-addons
cd /usr/local/src/asterisk-addons-1.4.8
./configure
make menuselect
make
make install
make samples

5.1 Iniciamos Dahdi y luego asterisk
/etc/init.d/dahdi start
/etc/init.d/asterisk start