sábado, 18 de junio de 2011

Utilizar FreeSWITCH como Gateway Skype para Asterisk - CentOS 5.6 32bit

La primera repercusión de la compra de Skype por parte de Microsoft es el anuncio de Digium que el soporte para el modulo chan_skype terminará el 26 de julio de 2013


, mientras las ventas el próximo 26 de julio 2011. Quienes han adquirido un considerable numero de licencias (canales) tienen que empezar a pensar como poder seguir brindando este tipo de servicio después del 2013. Por mi parte, investigando un poco, he encontrado una solución que me parece hasta mejor del chan_skype, antes que nada, porque es totalmente gratuita. Esta solución se llama mod_skypopen y la soporta FreeSWITCH. Para aquellos que no lo conocen, FreeSWITCH es un software de telefonía parecido a Asterisk pero, desde mi punto de vista, mucho más solido. Si queremos seguir utilizando Asterisk y al mismo tiempo tener un Gateway hacia la red de Skype, esta es la mejor solución disponible. ¿Cómo funciona el modulo mod_skypopen? Este modulo crea un driver entre FreeSWITCH y Skype apoyándose a un cliente Skype instalado en la misma maquina donde es presente FreeSWITCH. Este canal utiliza lasAPI de Skype. Para cada canal configurado se creará una nueva instancia del cliente. El único “defecto” es que cada canal configurado consuma alrededor de 70MB de memoria RAM. La ventaja es que podemos configurar cualquier usuario Skype sin el limite del chan_Skype de Asterisk, que permite configurar solamente usuarios Skype de tipo empresarial, es decir, creados desde el Skype Manager. En esta guía veremos como instalar FreeSWITCH en CentOS 5.6 32bit, el modulo skypopen y como configurar FreeSWITCH como Gateway hacia Skype para Asterisk.


Para empezar instalamos las librerías Vorbis:


yum install libvorbis libvorbis-devel vorbis-tools libogg libogg-devel


seguimos con la librería curl:


yum install curl curl-devel libidn-devel


algunos programas y librerías para compilar FreeSWITCH:


yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool bison bison-devel openssl-devel bzip2 bzip2-devel wget newt newt-devel subversion flex gdbm-devel db4-devel


El servidor MySQL para las base de datos:


yum install mysql mysql-server mysql-devel


ODBC:


yum install unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl-devel


unas librerías necesarias para el modulo FAX de FreeSWITCH


yum install libtiff libtiff-devel libxml2 libxml2-devel libjpeg libjpeg-devel


otras librerías para el protocolo XMPP (para conectarse a GoogleTalk):


yum install gnutls gnutls-devel gnutls-utils


OpenLDAP:


yum install compat-openldap openldap openldap-clients openldap-devel openldap-servers


las librerías del protocolo SNMP:


yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils


un servidor de correo electrónico:


yum install sendmail sendmail-devel sendmail-cf


Instalamos la interfaz grafica X11, las librerías alsa y el paquete devel del kernel


yum install libX11-devel Xvfb alsa-utils libXv libXScrnSaver xorg-x11-fonts* alsa-lib-devel libXScrnSaver kernel-devel alsa-lib libXScrnSaver libXv


y para terminar unas dependencias para la compilación de GIT:


yum install tcl tcl-devel


Terminada la instalación de estos paquetes, descargamos y compilamos GIT:


cd /usr/src


wget http://www.kernel.org/pub/software/scm/git/git-1.7.3.tar.gz


tar -xf git-1.7.3.tar.gz


cd git-1.7.3


./configure --prefix=/usr 
make 
make install


Ahora podemos descargar la ultima versión disponible de FreeSWITCH (que normalmente es también la más estable):


cd /usr/src


git clone git://git.freeswitch.org/freeswitch.git


cd freeswitch


./bootstrap.sh


./configure


Compilamos, instalamos las locuciones y los archivos de configuración predefinidos.


make && make install && make hd-sounds-install && make hd-moh-install && make samples


Este paso es previo a la compilación del modulo skypopen porque primero hay que instalar la música en espera y las locuciones de 16Khz. Una vez terminado podemos modificar el archivo donde se configuran los módulos que se quieren instalar con FreeSWITCH:


nano modules.conf


se modifica esta línea:


#endpoints/mod_skypopen


para que quede:


endpoints/mod_skypopen


Con el comando make install, se instalará el modulo mod_skypopen:


make install


Seguimos con la compilación de una falso driver OSS para Skype:


cd /usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss


make clean


make


insmod ./skypopen.ko


mknod /dev/dsp c 14 3


Ahora es junto el momento de la configuración de los usuarios y los canales Skype que queremos utilizar con FreeSWITCH. Esto se hace a través de uno script de instalación.


cd /usr/src/freeswitch/src/mod/endpoints/mod_skypopen/install


./install.pl


Contestamos todas las preguntas (bastantes intuitivas). En mi caso he configurado un usuario Skype con 4 canales disponibles.


skypopen1


Indicamos la carpeta donde se descargará el cliente Skype.


skypopen2


Indicamos la carpeta donde se instalará el cliente Skype.


skypopen3


El script instalará automáticamente el archivo de configuración del modulo mod_skypopen en la carpeta donde se guardan todas las configuraciones de los módulos.


skypopen4


Indicamos la carpeta donde instalar el driver audio “de mentira” para Skype.


skypopen5


Indicamos la carpeta donde instalar la configuración del cliente Skype.


skypopen6


Indicamos la carpeta donde instalar el script para iniciar el cliente Skype.


skypopen7


Indicamos la carpeta para la creación de un enlace simbólico al script de inicio del cliente Skype.


skypopen8


Indicamos el numero de instancias del cliente Skype ´(canales) que se iniciarán.


skypopen9


Si queremos que los 4 canales sean asociados al mismo usuario Skype elegimos “one”, si  queremos asignar cada canal a un distinto usuario Skype, elegimos “multi”.


skypopen10


Indicamos el nombre del usuario Skype.


skypopen11


Indicamos la contraseña del usuario Skype fulano. En la pantalla que sigue veremos un resumen de toda la configuración y si todo es correcto, escogemos “sure” y confirmamos con “y”. Ahora que tenemos nuestros canales configurados, iniciamos las 4 instancias del cliente Skype:


sh /usr/local/freeswitch/skypopen/skype-clients-startup-dir/start_skype_clients.sh


Instalamos el script de arranque de FreeSWICTH


cd /usr/src/freeswitch/build/


cp freeswitch.init.redhat /etc/init.d/freeswitch


nano /etc/init.d/freeswitch


Cambiamos las líneas que siguen:


PID_FILE=${PID_FILE-/opt/freeswitch/run/freeswitch.pid} 
FS_USER=${FS_USER-freeswitch} 
FS_FILE=${FS_FILE-/opt/freeswitch/bin/freeswitch} 
FS_HOME=${FS_HOME-/opt/freeswitch} 
FREESWITCH_ARGS="-nc"


Para que queden:


PID_FILE=${PID_FILE-/usr/local/freeswitch/run/freeswitch.pid} 
FS_USER=${FS_USER-root} 
FS_FILE=${FS_FILE-/usr/local/freeswitch/bin/freeswitch} 
FS_HOME=${FS_HOME-/usr/local/freeswitch} 
FREESWITCH_ARGS="-nc -nonat"


Volvemos ejecutable el archivo


chmod +x /etc/init.d/freeswitch


lo añadimos a la lista de servicios:


chkconfig --add freeswitch


y lo configuramos para que se inicie en automático:


chkconfig freeswitch on


Las llamadas procedentes de Asterisk llegarán al contexto publico de FreeSWITCH. Lo abrimos:


nano /usr/local/freeswitch/conf/dialplan/public.xml


y después de estas líneas:


<include> 
  <context name="public">


ponemos:


   <extension name="skype_uri"> 
      <condition field="destination_number" expression="^skype/(.*)$"> 
        <action application="set" data="skype_get_inband_dtmf=true"/> 
        <action application="bridge" data="skypopen/RR/$1"/> 
      </condition> 
    </extension>


Una pequeña explicación. Con la segunda línea declaramos que todas las llamadas con destinatario skype/nombreusuarioskype se procesarán en este bloque del dialplan. Con la tercera activamos la opción de enviar tonos DTMF a lo largo de la llamada SIP –> Skype y con la cuarta conectamos la llamada SIP  con el usuario Skype llamado a través del Gateway configurado en FreeSWITCH; RR está por Round Robin y permite utilizar el primer canal disponible de los cuatro configurados.


Ahora tenernos que modificar el archivo de configuración del modulo de mod_skypopen:


nano /usr/local/freeswitch/conf/autoload_configs/skypopen.conf.xml


Cambiamos estas dos líneas indicando que todas las llamadas para el usuario Skype fulano hay que transferirlas a la extensión 3200 del contexto Skype del dialplan:


<param name="context" value="default"/> 
<param name="destination" value="5000"/>


para que queden:


<param name="context" value="skype"/> 
<param name="destination" value="3200"/>


Guardamos los cambios y creamos el contexto skype:


nano /usr/local/freeswitch/conf/dialplan/skype.xml


<?xml version="1.0" encoding="utf-8"?> 
<include> 
  <context name="skype">


    <extension name="skype-call"> 
      <condition field="destination_number" expression="^(3[1-5]00)$">  
       <action application="set" data="skype_get_inband_dtmf=true"/> 
      <action application="bridge" data="sofia/gateway/asterisk/$1"/> 
      </condition> 
    </extension> 
  </context> 
</include>


Con este bloque de dialplan indicamos que todas las llamadas para las extensiones de 3100 a 3500 hay que enviarlas al servidor Asterisk a través de la troncal que vamos a crear en seguida. De esta forma si configuramos un nuevo usuario Skype en FreeSWITCH, podemos transferir la llamada a otra extensión Asterisk.


nano /usr/local/freeswitch/conf/sip_profiles/external/asterisk.xml


<include> 
  <gateway name="asterisk"> 
  <param name="username" value="freeswitch"/> 
  <param name="realm" value="IPServidorAsterisk"/> 
  <param name="from-domain" value="IPServidorAsterisk"/> 
  <param name="password" value="password"/> 
  <param name="extension" value="freeswitch"/> 
  <param name="proxy" value="IPServidorAsterisk"/>--> 
  <param name="expire-seconds" value="3600"/> 
  <param name="register-transport" value="udp"/> 
  <param name="retry-seconds" value="30"/> 
  <param name="extension-in-contact" value="true"/> 
  <param name="ping" value="25"/> 
  </gateway> 
</include>


 


ASTERISK


El servidor Asterisk puede ser instalado en el mismo servidor de FreeSWITCH o en otro. Si está instalado en el mismo, en unos de los dos hay cambiar el puerto predefinido (5060) para la señalización SIP o sino tendremos un conflicto entre los dos servidores. Si cada PBX se instala en un servidor distinto, no hay ningún problema.


Primero creamos la extensión freeswitch en el sip.conf


nano /etc/asterisk/sip.conf


[freeswitch] 
type=peer 
context=from-skype 
host=dynamic 
fromuser=freeswitch 
defaultuser=freeswitch 
secret=password 
qualify=yes 
port=5080 
directmedia=no 
dtmfmode=rfc2833 
disallow=all 
allow=ulaw,alaw


Se guardan los cambios y se continua con el dialplan. Como hemos configurado en la extensión freeswitch el contexto from-skype, todas las llamadas que proceden de FreeSWITCH la procesamos en ese contexto:


nano /etc/asterisk/extensions.conf


[from-skype] 
exten => 3200,1,Dial(SIP,${EXTEN}) 
same => n,Hangup


para las llamadas hacia usuarios skype, en nuestro contexto internal, ponemos:


[internal] 
exten => _[a-z].,1,Set(prefix=skype/) 
same => n,NoOp(${prefix}${EXTEN}) 
same => n,Dial(SIP/freeswitch/${prefix}${EXTEN}) 
same => n,Hangup


Guardamos los cambios y recargamos la configuración de Asterisk:


/etc/init.d/asterisk reload


Ahora volvemos a FreeSWITCH y lo iniciamos:


/usr/local/freeswitch/bin/freeswitch –nonat


skypopen12


Cargamos el modulo skypopen:


freeswitch@skypopen> load mod_skypopen:


skypopen13


Ahora desde un cliente Skype  para Windows llamamos el usuario configurado en FreeSWITCH. Debería timbrar la extensión 3200 de Asterisk. Como segunda prueba, desde una extensión conectada a Asterisk, llamamos el usuario Skype que estamos utilizando en el Cliente Skype de Windows.


¿Funcionó? Debería.


Si queremos que el modulo se cargue en automático al iniciar FreeSWITCH:


nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml


en el bloque “endpoints”, añadimos esta línea:


<load module="mod_skypopen"/>


Guardamos los cambios y iniciamos nuevamente FreeSwitch:


/etc/init.d/freeswitch start


Para entrar en la consola:


/usr/local/freeswitch/bin/fs_cli


para ver la lista de canales:


skypopen14


Que aprovechen!!!!


Wiki FreeSWITCH


Fuente: Voz To Voice

No hay comentarios.:

Publicar un comentario