Continuamos con los artículos de FreeSWITCH ya hemos dados los primeros pasos:
Instalación de FreeSWITCH
Archivos de configuracion de FreeSWTICH
Ahora comenzaremos con la configuración de extensiones de FreeSWITCH. Estas se encuentran en el directorio /usr/local/freeswitch/conf/directory/ en una instalación por defecto. Dentro de este directorio encontramos lo siguiente:
default.xml : Archivo que contiene informacion general de la extensiones como el dominio, variables generales y grupos de llamados.
default/ : Directorio donde se guardan los archivos de las extensiones configuradas en nuestro freeswitch, por defecto trae extensiones creadas del 1000.xml en adelante y la estructura es la siguiente:
En FreeSWITCH cada archivo xml incluido dentro de esta carpeta corresponde a una extension o numero telefonico, los parametros mas importantes son:
user id: Este corresponde al usuario y el numero telefonico del telefono.
password: es la clave del teléfono, la variable $${default_password} corresponde a la clave definida en el archivo vars.xml que por defecto es 1234, por seguridad este campo en producción debe ser una clave fuerte.
vm-password: clave del buzón de voz.
toll_allow: esta variable se utiliza para permitir acceso a rutas telefónicas.
user_context: Aqui se define el contexto en el cual las llamadas seran procesadas, por defecto FreeSWITCH solo tiene el contexto default.
Con esto ya podemos configurar un telefono, en este caso utilizaremos el linphone (compatible con Linux, Windows, Mac y Android entre otros)
debemos ingresar a Opciones→Manage SIP Accounts
Y seleccionamos añadir
Al aceptar nos pedirá la clave de la extensión.
Para probar puedes llamar a la extensión 9198 y debería sonar la música de tetris con tonos. Ademas puedes configurar otra extensión y llamar entre ellas y ademas enviar mensajes!
Un ayuda memorias para temas de redes, telefonía y programación
domingo, junio 01, 2014
Configuracion de Extensiones en FreeSWTICH
Etiquetas:
asterisk,
cisco,
FreeSWITCH,
linux,
sangoma,
telefonia IP,
VoIP
sábado, mayo 31, 2014
Nueva version estable de FreeSWITCH, la version 1.4.5
El equipo de desarrollo de FreeSWITCH, anuncio el cambio de estado de la rama 1.4 de beta a estable, lo cual lo habilita a utilizar en ambientes de produccion(en general en FreeSWITCH estable es estable). Esta nueva version incluye las siguientes mejoras:
Soporte estable para WebRTC incluyendo Opus, DTLS y mas.
Desacoplamiento del RTP de la Pila de SIP.
La eliminación de varias dependencias de librerías de terceros. actualizaciones relacionadas con este cambio de las librerías que dependen SQLite, OpenSSL, entre otras.
Un gran número de mejoras de seguridad y estabilidad.
Anuncio en la lista:
http://lists.freeswitch.org/pipermail/freeswitch-users/2014-May/105420.html
Todavia no esta completa la documentación de instalacion para la nueva version, existen algunas dependencias nuevas, pero eso no impide instalar la nueva version.
Guia de instalacion
https://confluence.freeswitch.org/display/FREESWITCH/Linux+Quick+Install+Guide
Otro punto importante es que ahora recomiendan Debian para las implementaciones de FreeSWITCH, no significa que las otras distribuciones no se pueda, debido a que los desarrolladores la utilizan.
Para descargar la ultima version estable de la rama 1.4 via git el comando es el siguiente:
git clone -b v1.4 git://git.freeswitch.org/freeswitch.git
Etiquetas:
asterisk,
cisco,
FreeSWITCH,
linux,
programación,
telefonia IP,
VoIP
lunes, marzo 17, 2014
Otro Video de FreeSWITCH
Etiquetas:
asterisk,
FreeSWITCH,
sangoma,
telefonia IP,
ubuntu server,
VoIP
Video sobre FreeSWITCH
Video sobre FreeSWITCH
Interesante video donde se explica como esta hecho FreeSWITCH
Etiquetas:
asterisk,
FreeSWITCH,
sangoma,
telefonia IP,
ubuntu server,
VoIP
martes, diciembre 31, 2013
martes, diciembre 24, 2013
Archivos de configuracion de FreeSWITCH
Esto se basa en lo publicado en este blog
FreeSWITCH es configurado en base ha archivos XML, los cuales se encuentran ubicados por defecto en la carpeta conf del directorio de FreeSWITCH. ejemplo:
/usr/local/freeswitch/conf/
En la carpeta conf tendremos como principales archivos de configuracion los siguientes:
La sintaxis usada para definir una variable es:
El valor de una variable previamente definida se obtiene así:
${nombre_variable} o $${nombre_variable}
La diferencia entre $ y $$ es el tipo de acceso, con $ el valor se obtiene
cuando se usa la variable, con $$ se maneja como valor de pre-procesador y se obtiene durante la carga de FreeSWITCH o se recarga la configuración del archivo freeswicth.xml con el comando relaodxml. La diferencia básica es que el valor con $ es expandido en el uso mientras con $$ es expandió en la carga del sistema.
base_dir: define el directorio raíz donde se ejecuta FreeSWITCH
sound_prefix: define el direcotrio donde se encuentran los archivos de audio (esta variable esta en revisión todavia aunque se usa en la actualidad)
local_ip_v4: dirección IP local, esta variable la define automáticamente FreeSWITCH
domain: define el dominio por defecto para identificar las extensiones registradas, asignado por defecto como $${local_ip_v4}
global_codec_prefs: codecs disponibles para la negociación con las extensiones registradas
outbound_codec_prefs: ocedecs disponibles para la negociación con gateways
outbound_caller_name: este nombre se usa para mostrarlo en el teléfono cuando se hace una llamada
outbound_caller_id: número usado para mostrarlo en el teléfono cuando se hace una llamada
Las extensiones que pueden registrarse con FreeSWITCH se encuentran en el directorio directory, esto lo veremos en mas detalle en otra entrada del blog.
Este archvio determina que módulos se van a carga durante el inicio de FreeSWITCH
Archivo de configuración para definiciones SIP
FreeSWITCH es configurado en base ha archivos XML, los cuales se encuentran ubicados por defecto en la carpeta conf del directorio de FreeSWITCH. ejemplo:
/usr/local/freeswitch/conf/
En la carpeta conf tendremos como principales archivos de configuracion los siguientes:
freeswitch.xml
Es el archivo maestro de la configuración de FreeSWITCH, éste incluye los demas archivos de configuración convirtiéndose en el punto de entrada en la carga de la configuración y pre-procesamiento de variables.vars.xml
Define variables globales al sistema que pueden ser accedidas desde un plan de marcación, este archivo contiene algunas líneas con la marca especial X-PRE-PROCESS, estas líneas no pueden ser comentados.La sintaxis usada para definir una variable es:
El valor de una variable previamente definida se obtiene así:
${nombre_variable} o $${nombre_variable}
La diferencia entre $ y $$ es el tipo de acceso, con $ el valor se obtiene
cuando se usa la variable, con $$ se maneja como valor de pre-procesador y se obtiene durante la carga de FreeSWITCH o se recarga la configuración del archivo freeswicth.xml con el comando relaodxml. La diferencia básica es que el valor con $ es expandido en el uso mientras con $$ es expandió en la carga del sistema.
base_dir: define el directorio raíz donde se ejecuta FreeSWITCH
sound_prefix: define el direcotrio donde se encuentran los archivos de audio (esta variable esta en revisión todavia aunque se usa en la actualidad)
local_ip_v4: dirección IP local, esta variable la define automáticamente FreeSWITCH
domain: define el dominio por defecto para identificar las extensiones registradas, asignado por defecto como $${local_ip_v4}
global_codec_prefs: codecs disponibles para la negociación con las extensiones registradas
outbound_codec_prefs: ocedecs disponibles para la negociación con gateways
outbound_caller_name: este nombre se usa para mostrarlo en el teléfono cuando se hace una llamada
outbound_caller_id: número usado para mostrarlo en el teléfono cuando se hace una llamada
dialplan/
Los planes de marcación se definen en el directorio dialplan, esto lo veremos en mas detalle en otra entrada del blog.
directory/
Las extensiones que pueden registrarse con FreeSWITCH se encuentran en el directorio directory, esto lo veremos en mas detalle en otra entrada del blog.
autoload_configs/
El directorio autoload_configs contiene los archivos de configuración basicos de FreeSWITCH y de los distintos modulos se utilizar por FreeSWITCH como pueden ser el call center, lua, etcmodules.conf.xml
Este archvio determina que módulos se van a carga durante el inicio de FreeSWITCH
sofia.conf.xml
Archivo de configuración para definiciones SIP
Etiquetas:
asterisk,
FreeSWITCH,
sangoma,
telefonia IP,
ubuntu server,
VoIP
jueves, diciembre 19, 2013
Instalacion de FreeSWITCH en Ubuntu
Introducción
FreeSWITCH
es uno de los mejores proyectos de comunicaciones de código abierto que
hay en la actualidad, como lo describen en su sitio oficial http://www.freeswitch.org/
“FreeSWITCH
is an open source telephony platform designed to facilitate the
creation of voice and chat driven products scaling from a soft-phone up
to a soft-switch. It can be used as a simple switching engine, a PBX, a
media gateway or a media server to host IVR applications using simple
scripts or XML to control the callflow.”
FreeSWITCH (escribiendo
SWITCH en mayúscula) es una plataforma de telefonía de código abierto
diseñada para facilitar la creación de productos de voz y chat escalando
desde un soft-phone hasta un soft-switch. Puede ser usado como un motor
de conmutación, una PBX, un media Gateway o un servidor de medios
(media server) para alojar aplicaciones de IVR usando simples scritps o
archivos XML para el control de flujo de la llamada.
En otras
palabras FreeSWITCH se puede comportar como un simple soft-phone, una
PBX o en realidad un soft-switch, por ello el campo de aplicación de
esta plataforma resulta tan interesante.
Otra característica
importante para los usuarios y programadores del mundo Windows es que
puede ser construido y correr nativamente sobre Windows, también sobre
Linux, Mac OS, BSD y Solaris tanto para 32 como para 64 bits (http://wiki.freeswitch.org/wiki/Specsheet).
Instalación de dependencias
Se deben instalar las dependencias necesarias para poder compilar FreeSWITCH, para esto se utilizara el sistema de gestión de paquetes de Ubuntu, aptitude.
sudo aptitude install git-core build-essential autoconf automake libtool libncurses5 /
libncurses5-dev make libjpeg-dev pkg-config unixodbc unixodbc-dev zlib1g-dev
sudo apt-get install libcurl4-openssl-dev libexpat1-dev libssl-dev /
libtiff4-dev libx11-dev unixodbc-dev python-dev zlib1g-dev /
libzrtpcpp-dev libasound2-dev libogg-dev libvorbis-dev libperl-dev /
libgdbm-dev libdb-dev python-dev uuid-dev bison
Descarga de FreeSWITCH e instalación
Para compilar la ultima versión estable de FreeSWITCH se deben descargas las fuentes vía la aplicación GIT. La FreeSWITCH debe descargarse en la carpeta /usr/src/ , que esta carpeta estándar para códigos fuentes.
#ingresamos a la carpetas de códigos
cd /usr/src
#DescargamosFreeSWITCH
git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.git
#Ingresamos a la carpeta descargada
cd freeswitch/
# ejecutamos el bootstarp
./bootstrap.sh
Ahora se definirán los módulos que son necesarios compilar en FreeSWITCH, esto se
realiza en el archivo modules.conf, usando el editor NANO para realizar los cambios.
nano modules.conf
Se deben descomentar las siguientes lineas como ejemplo:
applications/mod_spy
languages/mod_python
say/mod_say_es
Echo esto comenzamos con los pasos de compilación.
./configure # comando que verifica dependencias
make # este comando compila FreeSWITCH
make install # aquí instalamos los archivos compilados
make uhd-moh-install # descargamos la musica de espera
make samples # instala las configuraciones por defecto
Con estos pasos FreeSWITCH esta instalado en la carpeta /usr/local/freeswitch/.
Necesitamos realizar los últimos pasos de instalación, que son crear los accesos directos,crear el archivo init de arranque y definir que freeswitch arranque al iniciar el servidor.
ln -s /usr/local/freeswitch/bin/fresswitch /usr/bin/
ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/
creamos el archivo de inicio de FreeSWITCH
nano /etc/init.d/freeswitch
e insertamos el contenido del archivo puesto freeswitch.init al final y cambiamos los permisos del archivo creado
chmod +x /etc/init.d/freeswitch
Incluimos el archivo recién creado en la lista de arranque del Sistema Operativo
update-rc.d -f freeswitch defaults
Verificación de instalación
Para realizar la verificación de la instalación de FreeSWITCH se debe arrancar este
manualmente a través del siguiente comando
freeswitch
Si todo funciona bien deberías entrar a la consola de FreeSWITCH
FreeSWITCH Started
Max Sessions [1000]
Session Rate [30]
SQL [Enabled]
freeswitch@ubuntu-server>
Dentro de la consola ejecutar el comando shutdown para salir y parar FreeSWITCH.
Para el inicio y arranque estándar de FreeSWITCH de usar los siguientes comandos.
/etc/init.d/freeswitch start
/etc/init.d/freeswitch stop
Archivo freeswitch.init
#!/bin/bash
### BEGIN INIT INFO
# Provides: freeswitch
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Freeswitch debian init script.
# Author: Matthew Williams
#
### END INIT INFO
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Freeswitch"
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/$NAME
DAEMON_ARGS="-nc"
PIDFILE=/usr/local/freeswitch/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
FS_USER=root
FS_GROUP=daemon
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
ulimit -c unlimited
ulimit -d unlimited
ulimit -f unlimited
ulimit -i unlimited
ulimit -n 999999
ulimit -q unlimited
ulimit -u unlimited
ulimit -v unlimited
ulimit -x unlimited
ulimit -s 240
ulimit -l unlimited
return 0
}
#
# Function that starts the daemon/service
#
do_start()
{
# Set user to run as
if [ $FS_USER ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
fi
# Set group to run as
if [ $FS_GROUP ] ; then
DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
fi
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null -- \
|| return 1
do_setlimits
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
Etiquetas:
FreeSWITCH,
linux,
sangoma,
telefonia IP,
ubuntu,
ubuntu server,
VoIP
Usar Web2py con servidor web embebido
En muchas situaciones podría ser útil utilizar Web2py sin un servidor web como Apache o Nginx, ya que no va haber mucha concurrencia de usuarios o por otros motivos, aqui les mostrare los pasos necesarios para realizar esto.
1.- Instalar Web2py
Esto lo puedes ver en http://cabildocl.blogspot.com/2013/12/instalacion-minima-de-web2py.html
2.- Crear certificados para utilizar HTTPS
Web2py no permite ingresar a la aplicacion admin si no es por HTTPS y para eso necesitamos generar las claves privadas y los certificados.
Generar clave privada
openssl genrsa -out server.key 2048
Creamos el certificado
openssl req -new -key server.key -out server.csr
Después auto firmamos el certificado
openssl x509 -req -day 3650 -in server.csr -signkey server.key -out server.crt
Ahora podemos arrancar web2py con el certificado creado
python web2py.py -c server.crt -k server.key --ip=0.0.0.0
Con esto podras entrar de manera remota a la administracion de web2py sin necesidad de servidor web externo.
#! /bin/sh
# Script de inicio y arranque de web2py
case "$1" in
start)
echo "Starting web2py"
# run application you want to start
python /web2py/web2py.py -c server.crt -k server.key --ip=0.0.0.0 -a password &
;;
stop)
echo "Stopping web2py"
# kill application you want to stop
pkill -9 -f web2py
;;
*)
echo "Usage: /etc/init.d/web2py {start|stop}"
exit 1
;;
esac
exit 0
1.- Instalar Web2py
Esto lo puedes ver en http://cabildocl.blogspot.com/2013/12/instalacion-minima-de-web2py.html
2.- Crear certificados para utilizar HTTPS
Web2py no permite ingresar a la aplicacion admin si no es por HTTPS y para eso necesitamos generar las claves privadas y los certificados.
Generar clave privada
openssl genrsa -out server.key 2048
Creamos el certificado
openssl req -new -key server.key -out server.csr
Después auto firmamos el certificado
openssl x509 -req -day 3650 -in server.csr -signkey server.key -out server.crt
Ahora podemos arrancar web2py con el certificado creado
python web2py.py -c server.crt -k server.key --ip=0.0.0.0
Con esto podras entrar de manera remota a la administracion de web2py sin necesidad de servidor web externo.
Bonus
Como regalo les dejo un script simple que les permite controlar el arranque de web2py. Deben copiarlo en /etc/init.d/#! /bin/sh
# Script de inicio y arranque de web2py
case "$1" in
start)
echo "Starting web2py"
# run application you want to start
python /web2py/web2py.py -c server.crt -k server.key --ip=0.0.0.0 -a password &
;;
stop)
echo "Stopping web2py"
# kill application you want to stop
pkill -9 -f web2py
;;
*)
echo "Usage: /etc/init.d/web2py {start|stop}"
exit 1
;;
esac
exit 0
Etiquetas:
https,
linux,
python,
ubuntu server,
web2py
domingo, diciembre 15, 2013
Instalacion minima de Web2py
Esta entrada mostrara como instalar y arrancar Web2py con 5 simples pasos:
Paso 1: Instalar dependencias
sudo apt-get install python psycopg2
Paso 2: Descargar fuentes
wget http://www.web2py.com/examples/static/web2py_src.zip
Paso 3: Descomprimir archivos
unzip web2p_src.zip
Paso 4: Ingresar a la carpeta
cd web2py
Paso 5: Arrancar Web2py
python web2py.py
Ya estamos corriendo web2py!
Paso 1: Instalar dependencias
sudo apt-get install python psycopg2
Paso 2: Descargar fuentes
wget http://www.web2py.com/examples/static/web2py_src.zip
Paso 3: Descomprimir archivos
unzip web2p_src.zip
Paso 4: Ingresar a la carpeta
cd web2py
Paso 5: Arrancar Web2py
python web2py.py
Ya estamos corriendo web2py!
Etiquetas:
html,
linux,
programación,
python,
servidor web,
web2py
Definir seleccion por defecto en Grub2
Hace poco estábamos en la instalación un FreeSWITCH y una tarjeta E1 Sangoma, nos sucedió el problema de que los dirver Sangoma no eran compatible con el kernel 3.8 de Ubuntu Server 12.04. Después de varias pruebas estos drivers si funcionaron con el kernel 3.5 pero teniamos la problemtica que el servidor arrancaba por defecto con el kernel 3.8, asi que dimos con esta solucion.
Definir Kernel en Grub2
El primer paso es ver el menu con el siguiente comando
fgrep menuentry /boot/grub/grub.cfg
nos mostrara todas las entradas en el menu de grub como la siguiente imagen
Seleccionamos y copiamos una entrada con la que muestra el ejemplo: 'Ubuntu, with Linux 3.2.0-31-generic'
Despues necesitamos editar el siguiente archivo:
nano /etc/default/grub
Y editamos las siguiente linea
GRUB_DEFAULT=0
y la dejamos asi
GRUB_DEFAULT='2>Ubuntu, with Linux 3.2.0-31-generic'
Nota: la opcion 2> le dice a grub que utilice el submenu entras anteriores de linux
Realizado esto necesitamos actualizar el kernel y esto lo realizamos con el comando
update-grub
Y ya podemos probar lo realizado reiniciando la maquina.
Definir Kernel en Grub2
El primer paso es ver el menu con el siguiente comando
fgrep menuentry /boot/grub/grub.cfg
nos mostrara todas las entradas en el menu de grub como la siguiente imagen
Seleccionamos y copiamos una entrada con la que muestra el ejemplo: 'Ubuntu, with Linux 3.2.0-31-generic'
Despues necesitamos editar el siguiente archivo:
nano /etc/default/grub
Y editamos las siguiente linea
GRUB_DEFAULT=0
y la dejamos asi
GRUB_DEFAULT='2>Ubuntu, with Linux 3.2.0-31-generic'
Nota: la opcion 2> le dice a grub que utilice el submenu entras anteriores de linux
Realizado esto necesitamos actualizar el kernel y esto lo realizamos con el comando
update-grub
Y ya podemos probar lo realizado reiniciando la maquina.
sábado, octubre 08, 2011
Presentacion de Telefonia IP
Esto es una prueba de las presentaciones con audio de slideshare, muy bueno. Telefonia
View another webinar from Julio Saldivar
Etiquetas:
asterisk,
cisco,
FreeSWITCH,
sangoma,
telefonia IP,
VoIP
viernes, septiembre 16, 2011
Grabar llamadas en Asterisk y administrarlas via Web
Aqui les mostre un pequeño sistema de grabacion hecho en Asterisk y con administracion Web. El diagrama del sistema es el siguiente:

Dialplan
En el dialplan necesitamos ejecutar la aplicacion MixMonitor la cual creara el archivo de audio de la llamada, esta sera guardar en un disco RAM, cuando concluye la grabacion ejecutamos el script grabacion y le entregamos varios datos entre ellos la ubicacion de la grabacion.
[grabacion]
;Prueba de grabacion
exten=>20,1,set(tiempo=${UNIQUEID})
exten=>20,n,set(GRABACION=/mnt/ramdisk/${tiempo}.wav)
exten=>20,n,set(LLAMANTE=${CALLERID(num)})
exten=>20,n,set(LLAMADO=${EXTEN})
exten=>20,n,set(FECHA=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
exten=>20,n,MixMonitor(/mnt/ramdisk/${tiempo}.wav||python /var/lib/asterisk/agi-bin/grabacion.agi ${LLAMANTE} ${LLAMADO} ${CDR(duration)} ${GRABACION})
exten=>20,n,Dial(SIP/${EXTEN},30,hrtT)
exten=>20,n,hangup()
Script
El Script se ejecuta al finalizar mixmonitor, y su trabajo en subir la informacion a la base de datos.
#!/usr/bin/python
#utilizaremos las librerias para manejo de SQL de Web2py
from gluon.sql import DAL, Field
import sys
# Definimos la base de datos
db=DAL("mysql://root:password@127.0.0.1/grabaciones")
# Definimos la tabla
db.define_table('trabajos',Field('llamante'),Field('llamado'),Field('fecha'),Field('grabacion','upload',uploadfolder='/home/www-data/web2py/applications/grabacion/uploads'),migrate=False)
llamante=sys.argv[1]
llamado=sys.argv[2]
fecha=sys.argv[3]
grabacion=sys.argv[4]
audiograbacion = open(grabacion,'rb')
# insertamos los datos en la base de datos
db.trabajos.insert(llamante=llamante,llamado=llamado,fecha=fecha,grabacion=db.trabajos.grabacion.store(audiograbacion,grabacion))
db.commit()
Aplicacion Web
Para realizar la aplicacion web utilizamos Web2py. Esta aplicacion lo que hace es conectarse a la misma base de datos que utiliza el script y asi se puede visualizar. Adjunto la aplicacion, eso si para utilizarla debes tener instalado Web2py.
Descarga Aplicacion
miércoles, agosto 24, 2011
Como bloquear paginas en HTTPS en Zentyal
Este problema es recurrente para los administradores de redes que utilizan proxys con Squid para controlar las paginas que se acceden a Internet. Normalmente uno bloquea una pagina vía las reglas del proxy, pero esto no aplica a paginas https como facebook, gmail y otras, ya que el proxy no puede bloquear en https, debido a que este va encriptado y no lo puede diferenciar. Además de lo expuesto anteriormente no podemos bloquear todo el trafico https por el tema de acceso a paginas importantes como Bancos, servicios publicos, etc. Aqui explicare como bloquear en especifico facebook vía el firewall de Zentyal.
Obtener IPs de Facebook y creando objeto facebook
Para obtener las ips de facebook es necesario realizar un ping a las direcciones:
facebook.com
www.facebook.com
login.facebook.com
De esto se obtienen 3 ips de las cuales debemos obtener sus rangos, para eso existe http://whois.arin.net/ui, y creamos un objeto llamado facebook con estos rangos como vemos en la siguiente imagen.
Creando servicio HTTPS
En la seccion de servicios creamos el servicio https como se ve en la siguiente imagen.
Creando la regla de firewall
En el firewall de Zentyal, en la zona filtro para reglas internas, creamos una regla como la siguiente:
Y con esto facebook via https no debería esta permitido, verifica esto en el logs de firewall.
lunes, noviembre 23, 2009
Alta disponibilidad y sincronizacion de configuraciones
Objetivos
En este documento se mostrara la forma de implementar un cluster Activo/Pasivo con replicacion de configuración, todo esto de manera simple, sin necesidad de particiones o características especiales del núcleo de Linux.
Escenario
El escenario se muestra en la figura siguiente:

Es necesario mantener una IP virtual activa, la 192.168.100.20, por la cual se prestaran los servicios, ademas es necesario mantener sincronizado ciertos archivos de configuración, esto se realizara usando ssh y unison.
IP Virtual
Para la creación y mantencion de la IP virtual, es necesario tener instalado el paquete ucarp:
sudo apt-get install ucarp
ucarp es una aplicación de espacio de usuario que controla una Ip virtual entre distintos nodos, es una variante de vrrp pero totalmente libre de patentes.
Configurar ucarp en el Servidor Primario
El primer paso es crear los scripts de inicio y parada de ucarp, o sea cuando un nodo ucarp pasa a estado máster se ejecuta el script de inicio y cuando el nodo pasa a estado backup se ejecuta el script de parada. Desde el script de inicio es necesario activar la IP virtual y ademas se pueden activar servicios necesarios para servir desde la IP virtual. Desde el script de parada es necesario desactivar la IP virtual y desactivar los servicios dados por la IP virtual.
El segundo paso es activar el ucarp desde la consola, esto también se puede hacer desde el inicio de Linux.
Paso 1
En el Servidor Primario y Secundario
sudo nano /etc/vip-up.sh
#!/bin/bash
/sbin/ifconfig eth0:1 192.168.100.20/24 up
/etc/init.d/asterisk start
sudo nano /etc/vip-down.sh
#!/bin/bash
/sbin/ifconfig eth0:1 down
/etc/init.d/asterisk stop
Paso 2
En el Servidor Secundario
ucarp -i eth0 -s 192.168.100.4 -v 10 -p secret -a 192.168.100.20 --upscript=/etc/vip-up.sh –downscript=/etc/vip-down.sh
[INFO] Local advertised ethernet address is [54:52:00:14:a6:80]
[WARNING] Switching to state: BACKUP
SIOCSIFFLAGS: Cannot assign requested address
[WARNING] Spawning [/etc/vip-down.sh eth0]
En el Servidor Primario
ucarp -i eth0 -s 192.168.100.3 -v 10 -p secret -a 192.168.100.20 --upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh -P
[INFO] Local advertised ethernet address is [54:52:00:14:a6:80]
[WARNING] Switching to state: MASTER
[WARNING] Spawning [/etc/vip-up.sh eth0]
Con esto el servidor Primario quedara con la IP Virtual activa y el Secundario queda como Backup.
Paso 3
Para que ucarp arranque al inicio del sistema operativo es necesario agregar el comando de ucarp al arranque:
sudo nano /etc/rc.local
ucarp -i eth0 -s 192.168.100.3 -v 10 -p secret -a 192.168.100.20 --upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh -P
Etiquetas:
Alta disponibilidad,
hsrp,
kernel,
programación,
telefonia IP,
ubuntu server,
ucarp,
VoIP,
vrrp
miércoles, julio 08, 2009
Felicitaciones a Universidad de Chile, importante despues de 9 campeonatos sin ganar, ademas con esto superan a Universidad Catolica en titulos en los ultimos 30 años, recorda que Cobreloa tiene esa edad, con eso se convierte en el tercer equipo de Chile, y como dicen ser tercer es perder. Tal motivo les envio esta pequeña estadistica.
Campeones los ultimos 30 años del Futbol Chileno
Campeones los ultimos 30 años del Futbol Chileno
| Equipo(Insigna proporcional a la cantidad de titulo) | Titulos ultimos 30 años (1979-2009) |
Colo Colo | 17 Titulos |
Cobreloa | 8 Titulos |
Universidad de Chile ![]() | 6 Titulos |
Universidad Catolica ![]() | 5 Titulos |
miércoles, mayo 28, 2008
Netkit: Virtualizacion de red para los pobres
Hola de nuevo, ahora tocare un tema mas especifico, el cual es la virtulizacion de sistemas operativos, este se refiera a la posibilidad de correr una parte o todo un sistema operativo sobre otro, osea tener dos "computadores" en uno.
¿pero como se logra esto?
esto se logra engañando al sistema operativo virtualizado haciendole cree que corre sobre hardware. esto se logra tomando todas las señales que envia el sistema operativo virtualizado al hardware y desviarlas via un programa al sistema operativo local para que las realice, mejor vamos a una grafica para entender mejor la idea.
SOV
v
Interprete
v
SOL
v
Hardware
ahi se ve como el sistema operativo virtualizado envia las intrucciones que toma el interprete las traduce de forma que el sistema operativo local las entienda y este las envia al hardware. para las respuestas de hardware es lo mismo pero al reves.
¿Que sistema de virtulizacion usaremos?
Usaremos UML(user mode linux) el mejor sistema de virtulizacion y que ademas esta incluido en la fuentes del kernel desde las ultimas versiones 2.4. este sistema de virtulizacion solo sirve para correr Linux sobre Linux.
Aunque UML es muy facil de ocupar e instalar mejor usaremos una variante de este especialmente diseñado par virtulizar redes NetKit. Netkit es una serie de script que se ocupan en conjunto con UML para facilitar tanto la creacion de maquinas virtulaes(sistemas operativos virtulizados) como todo lo necesario para conectarlos en una red(switch virtuales).
¿pero que puedo hacer no esto?
de todo lo posible en redes, desde crear una red lan hasta multiples sistemas autonomos corriendo BGP(vease documentacion netkit.org) y esto corriendo solo en un computador normal(ejemplo el mio es solo un duron de 1.4GHz y 256MB de ram).
¿pero como lo hago?
Instalacion
la instalacion de Netkit es muy facil y las dependencias son comandos estardares de GNU/Linux:
-descarga las fuentes desde Netkit.org
-Descomprime todo.
-ahora en la cosola debes agregar esto al PATH para que puedas despues encontrar los comando(y se encuentren entre ellos)
export NETKIT_HOME=/home/foo/netkit2
export MANPATH=:$NETKIT_HOME/man
export PATH=$NETKIT_HOME/bin:$PATH
-luego corre el archivo de verificacion de la instalacion
./check_configuration.sh
y si todo esta bien estamos listos
¿pero que es todo esto?
Ahora te voy a explicar bien que es UML. UML es un kernel modificado para poder correr sobre otro kernel, pero para el kernel pueda hacer algo necesita un sistema de ficheros, archivos y programas. al descargar netkit-2.4.tar.bz2 descargas el kernel modificado y las herramientas para crear redes, ya l descargar netkit-filesystem-F3.0a.tar.bz2 descragas el sistema de ficheros.
¿como lo ocupo?
Bueno si la instalacion te sali perfecta, para crear una maquina virtual solo debes usar el comando
vstart [nombre_MV] [Interface_de_red]
y tendras otro "computador corriento. para detenerlo
vhalt [nombre_MV]
¿pero como creo una red?
eso es muy facil, supongamos que queremos conectar los maquinas virtuales pc1 y pc2
PC1<------switcha------>PC2
vstart pc1 eth0=A
vstart pc2 eth0=A
y listo puedes hacer ping y ver que las maquinas se comunican y listo.
¿y que hago despues?
bueno puedes crear redes mas complejas. mira la documentacion en netkit.org y podras ver un gran numero de posiblidades.
Espero incluir unas configuraciones mas complejas en el foro asi que esperen
pd: si quieren algun tema en especial de redes pidan haber si puedo hacer algo
_________________
Quienes son capaces de renunciar a la libertad esencial a cambio de una pequeña seguridad transitoria, no son merecedores ni de la libertad ni de la seguridad.------switcha------>
¿pero como se logra esto?
esto se logra engañando al sistema operativo virtualizado haciendole cree que corre sobre hardware. esto se logra tomando todas las señales que envia el sistema operativo virtualizado al hardware y desviarlas via un programa al sistema operativo local para que las realice, mejor vamos a una grafica para entender mejor la idea.
SOV
v
Interprete
v
SOL
v
Hardware
ahi se ve como el sistema operativo virtualizado envia las intrucciones que toma el interprete las traduce de forma que el sistema operativo local las entienda y este las envia al hardware. para las respuestas de hardware es lo mismo pero al reves.
¿Que sistema de virtulizacion usaremos?
Usaremos UML(user mode linux) el mejor sistema de virtulizacion y que ademas esta incluido en la fuentes del kernel desde las ultimas versiones 2.4. este sistema de virtulizacion solo sirve para correr Linux sobre Linux.
Aunque UML es muy facil de ocupar e instalar mejor usaremos una variante de este especialmente diseñado par virtulizar redes NetKit. Netkit es una serie de script que se ocupan en conjunto con UML para facilitar tanto la creacion de maquinas virtulaes(sistemas operativos virtulizados) como todo lo necesario para conectarlos en una red(switch virtuales).
¿pero que puedo hacer no esto?
de todo lo posible en redes, desde crear una red lan hasta multiples sistemas autonomos corriendo BGP(vease documentacion netkit.org) y esto corriendo solo en un computador normal(ejemplo el mio es solo un duron de 1.4GHz y 256MB de ram).
¿pero como lo hago?
Instalacion
la instalacion de Netkit es muy facil y las dependencias son comandos estardares de GNU/Linux:
-descarga las fuentes desde Netkit.org
-Descomprime todo.
-ahora en la cosola debes agregar esto al PATH para que puedas despues encontrar los comando(y se encuentren entre ellos)
export NETKIT_HOME=/home/foo/netkit2
export MANPATH=:$NETKIT_HOME/man
export PATH=$NETKIT_HOME/bin:$PATH
-luego corre el archivo de verificacion de la instalacion
./check_configuration.sh
y si todo esta bien estamos listos
¿pero que es todo esto?
Ahora te voy a explicar bien que es UML. UML es un kernel modificado para poder correr sobre otro kernel, pero para el kernel pueda hacer algo necesita un sistema de ficheros, archivos y programas. al descargar netkit-2.4.tar.bz2 descargas el kernel modificado y las herramientas para crear redes, ya l descargar netkit-filesystem-F3.0a.tar.bz2 descragas el sistema de ficheros.
¿como lo ocupo?
Bueno si la instalacion te sali perfecta, para crear una maquina virtual solo debes usar el comando
vstart [nombre_MV] [Interface_de_red]
y tendras otro "computador corriento. para detenerlo
vhalt [nombre_MV]
¿pero como creo una red?
eso es muy facil, supongamos que queremos conectar los maquinas virtuales pc1 y pc2
PC1<------switcha------>PC2
vstart pc1 eth0=A
vstart pc2 eth0=A
y listo puedes hacer ping y ver que las maquinas se comunican y listo.
¿y que hago despues?
bueno puedes crear redes mas complejas. mira la documentacion en netkit.org y podras ver un gran numero de posiblidades.
Espero incluir unas configuraciones mas complejas en el foro asi que esperen
pd: si quieren algun tema en especial de redes pidan haber si puedo hacer algo
_________________
Quienes son capaces de renunciar a la libertad esencial a cambio de una pequeña seguridad transitoria, no son merecedores ni de la libertad ni de la seguridad.------switcha------>
Etiquetas:
kernel,
linux,
netkit,
virtualizacion
lunes, abril 09, 2007
configurando la red
una de las cosas mas importantes para poder usar una PC es configurar la red. en linux se puede hacer de distintas maneras, via interface grafica, la manera fome, o via consola, linea de texto. el comando para esto es ifconfig. ejemplo practico. tienes una tarjeta de red tipica, osea ethernet 10/100MB y reconocida por el sistema, y quieres conectarte a la red con la siguientes datos:
Direccion:10.0.0.3
mascara:255.255.255.0
puerta de enlace:10.0.0.1
muy facil abres la consola, y tecleas el siguiente comando:
ifconfig eth0 10.0.0.3 netmask 255.255.255.0
despues para la puerta de enlace
route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.1
para ver si esto funciona usamos ping, primero a nuestra puerta de enlace y despues a la red de de redes Internet ping 10.0.0.1 ping www.ucv.cl y llegan los paquetes es que estamos bien.
Linux a dolor: nacer, vivir y morir en GNU/Linux II
Eligiendo una distro y como conseguirlas.
¿busque en internet pero hay muchos linux no se cual elegir?
bueno esa es la primera duda que aqueja a todos los principiantes, que distro ocupar. Como ya dije depende de la persona cual distro ocupar, pero igual les puedo dar unos consejos, no se si son buenos, para poder elegir la distro.
1- ¿para que la quiero?
Bueno si la quieres para uso hogareño o de oficina y ademas eres nuevo en GNU/Linux desde mi perpectiva Mandriva, mi distro, y Suse corren con ventaja ya que ambas son faciles de instalar, tienes instaladores graficos muy claros, estan hechas para ser faciles de administrar y ocuparlas a es nivel. Otra que asoma como buena alternativa es Ubuntu aunque yo cro que bien con pocos progras, al referir pocos me refiero a 1000, ejemplo mandriva trae cerca de 3000 programas. Quieres montar mi servidor web o como estacion de programacion, aqui Debian y Fedora son las que cumples mejor los requisitos.
2-¿existen usuarios que me puedan ayudar con mi distro?
aunque todas cosas en GNU/Linux se pueden hacer en casi cualquier distro, depende la distro como se hace. a lo que me refiero es que si vas a instalar alguna distro debes por lo menos alguien cercano que ocupe la misma distro que tu para que te apoye o se apoyen mutuamente.
Linux a dolor: nacer, vivir y morir en GNU/Linux
Hola este es el comienzo de una serie de articulos sobre GNU/Linux desde temas basicos hasta cosas bien avanzadas en redes
lo de rigor ¿que es GNU/Linux? Bueno GNU/Linux es un sistema operativo libre compuesto por programas desarrollados bajo el proyecto GNU y el nucleo Linux desarrollado por Linus Torvalds.
GNU/Linux viene normalmente en forma de distros, las cuales son diferentes colecciones de programas que funcionan sobre este sistema operativo, estas se diferencian en que estan dirigidas a distintos usuarios, desde novatos hasta usuarios expertos. algunas son gratuitas y otras son de pago, las mas famosas son: Debian, Red Hat, Mandriva, Slackware, Gentoo, Suse, Fedora, Ubuntu y muchas pero muchas mas.
Pero ¿que puede hacer GNU/Linux por mi? bueno eso dependen para que lo necesitas ya que puede hacer casi todo, bueno no cocina ni hace el aseo, pero desde lo tipico de una pc hogareño, reproducir multimedia, navegar en internet, editar documentos y mas, hasta poder correr sobre una supercomputadora, tambien sobre una tostadora jejejeje.
Pero bueno esta es una pequeña introduccion, no es muy buena pero es algo, al facinante sistema operativo GNU/Linux.
Etiquetas:
kernel,
linux,
programación,
servidor web
Suscribirse a:
Entradas (Atom)









