Instalación de OpenSIPs 1.11.X en CentOS 6.6 64 bit

En este articulo veremos como instalar OpenSIPs 1.11.X (la versión con soporte a la largo plazo) en un servidor virtual de Digital Ocean de 512Kb de memoria.

OpenSIPs es un servidor SIP Proxy Open Source que permite procesar cualquier tipo de solicitud SIP. Es modular con un corazón muy liviano. Esto permite ir añadiendo módulos según el tipo de configuración que se necesite. Los módulos se cargan directamente desde el archivo de configuración respetando las dependencias de cada uno. En la documentación oficial de OpenSIPs se explica, por cada modulo, las dependencias, los parámetros y en que parte del script de configuración de OpenSIPs se pueden utilizar las funciones activadas por el modulo. Las funcionalidades más importantes de OpenSIPs son:

  • Servidor Proxy, Servidor Registrar, Servidor Location, Servidor Redirect

  • Procesamiento de las peticiones SIP de forma Statefull y Stateless

  • Soporte para los protocolos de trasporte UDP, TCP, TLS, SCTP

  • IPv4 e IPv6

  • Soporte para los registros DNS SRV y NAPTR

  • Soporte Multi dominio

  • Autenticación vía Digest (RFC2617) y sobre IP

  • Servidor de presencia

  • Soporte para NAT para trafico SIP y RTP

  • Balanceamiento de carga y respaldo

  • Configuración de Gateway para la conexión a la red PSTN y/o proveedores VoIP.

Una vez adquirido el VPS se accede vía SSH y se inicia actualizando el sistema:

yum update -y

Se instalan los repositorios Epel:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Se guardan los cambios y se continua con la configuración de la zona horaria (personalizar según su país):

rm /etc/localtime

ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

Se instala el editor Nano:

yum install nano -y

Se configura el idioma (español):

nano /etc/sysconfig/i18n

se borra el contenido del archivo y se pegan las líneas que siguen:

LANG="es_CO.iso88591"
SYSFONT="latarcyrheb-sun16"

Se guardan los cambios.

Se instala el paquete del network time protocol para tener actualizada la hora del servidor:

yum install ntp -y

Se configura para que arranque en automático:

chkconfig ntpd on

Se inicia:

service ntpd start

Se instalan las fuentes del Kernel instalado:

yum install -y kernel-devel-$(uname -r)

Se crea la partición de Swap ya que en los VPS de Digital Ocean no viene por defecto:

dd if=/dev/zero of=/swapfile bs=1024 count=512k

mkswap /swapfile

swapon /swapfile

Se configura la partición de swap para que arranque con el sistema:

nano /etc/fstab

al final del archivo se añade la línea que sigue:

/swapfile swap swap defaults 0 0

Se cambian los permisos del archivo recién creado:

chmod 0600 /swapfile

Se reinicia el sistema:

reboot

Se accede nuevamente vía SSH y se instalan la dependencias para la compilación de OpenSIPs:

yum install mysql mysql-devel mysql-server gcc gcc-c++ bison bison-devel flex make expat expat-devel net-snmp-devel -y

yum install libxml2 libxml2-devel openssl-devel xmlrpc-c-devel lynx pcre pcre-devel ncurses-devel ncurses-libs gdb git -y

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

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

Se descarga la ultima versión disponible de OpenSIPs de la rama 1.11:

cd /usr/src

git clone https://github.com/OpenSIPS/opensips.git -b 1.11 opensips_1_11

Se entra en la carpeta creada:

cd opensips_1_11

Se ejecuta el comando que permite la configuración e instalación desde un menú de texto:

make menuconfig

en el menú que aparece:

image

se escoge la opción “Configure Compile Options”:

image

en el siguiente menú se selecciona “Configure Excluded Modules”:

image

image

image

Se seleccionan los módulos que aparecen en las tres imágenes. Se vuelve al menú anterior con la tecla ←

image

Se selecciona el menú “Configure Install Prefix”:

image

y se pone la / come carpeta de instalación. Se presiona la tecla Enter y se selecciona la opción “Save Changes”:

image

Se presiona la tecla Enter hasta que no aparezcan más notificaciones en la línea de comando. Se vuelve al menú anterior con la tecla ←

image

En el menú principal se selecciona “Compile And Install OpensSIPs”. Empezará la compilación de OpenSIPs. Terminada la operación aparecerá el siguiente mensaje:

 image

Se presiona la tecla Enter y se volverá el menú Principal:

image

Para salir del menuconfig se selecciona la opción “Exit & Save Changes” y se presiona la tecla Enter hasta volver al prompt de Linux.

Se instala el script de inicio de Opensips:

cd packaging/fedora

nano opensips.init

Como el programa se ha instalado en la carpeta /sbin, se modifica esta línea:

opensips=/usr/sbin/$prog

para que quede:

opensips=/sbin/$prog

Se guardan los cambios y se continua volviendo el archivo ejecutable y añadiéndolo a la lista de script de arranque del sistema:

chmod +x opensips.init

cp opensips.init /etc/init.d/opensips

chkconfig --add opensips

chkconfig opensips on

Se crea usuario y grupo “opensips” requerido por el script de arranque:

groupadd opensips

mkdir /var/run/opensips

useradd -d /var/run/opensips/ -s /bin/false -g opensips opensips
useradd: aviso: el directorio personal ya existe.
No se copia ningún fichero del directorio skel en él.

chown -R opensips.opensips /var/run/opensips

Se configura MySQL para luego utilizarlo al momento de la creación de la base de datos que se usará para la configuración de algunos módulos de OpenSIPs:

/etc/init.d/mysqld start

se configura para que arranque en automático:

chkconfig mysqld on

y se crea una contraseña para el usuario root de MySQL (sesamo):

IMPORTANTE: para un sistema en producción utilizar siempre contraseñas fuertes

mysqladmin -u root password sesamo

Para poner en seguridad el servidor MySQL se ejecuta el programa:

mysql_secure_installation

Se contestan las preguntas como sigue:

Enter current password for root (enter for none): sesamo

OK, successfully used password, moving on...

Change the root password? [Y/n] n

... skipping.

Remove anonymous users? [Y/n] y

... Success!

Disallow root login remotely? [Y/n] y

... Success!

Remove test database and access to it? [Y/n] y

- Dropping test database...

... Success!

- Removing privileges on test database...

... Success!

Reload privilege tables now? [Y/n] y

... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MySQL

installation should now be secure.

Thanks for using MySQL!

Se configura la zona horaria en MySQL:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -psesamo mysql
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.

Se abre el archivo de configuración de MySQL:

nano /etc/my.cnf

Bajo la etiqueta [mysqld] se añade (personalizar según su país):

default-time-zone = America/Bogota

Se guardan los cambios y se reinicia el servidor MySQL:

service mysqld restart

Se averigua si la zona horaria se ha configurado correctamente:

mysql -u root -psesamo

mysql> SELECT @@global.time_zone, @@session.time_zone;

+--------------------+---------------------+

| @@global.time_zone | @@session.time_zone |

+--------------------+---------------------+

| America/Bogota | America/Bogota |

+--------------------+---------------------+

1 row in set (0.00 sec)

Se sale del cliente MySQL:

mysql> quit

Se modifica el archivo de configuración de OpenSIPs. Por ahora es importante saber que se divide en tres bloques:

  • el primer bloque es donde se configuran los parámetros globales de OpenSIPs

  • el segundo bloque es donde se configuran los módulos con relativos parámetros

  • el tercer bloque es el script que procesará cada petición SIP que llegue al servidor

cd /etc/opensips/

nano opensips.cfg

Se cambia esta línea:

listen=udp:127.0.0.1:5060 # CUSTOMIZE ME

para que quede:

listen=udp:IPPUBLICA:5060

De esta forma se pone OpenSIPs en escucha sobre el puerto 5060 y la dirección IP Publica del servidor. Cambiar IPPUBLICA con la IP publica del servidor.

Se guardan los cambios. Para guardar los registros de la actividad de OpenSIPs en un archivo dedicado se modifica la configuración de Rsyslog:

nano /etc/rsyslog.conf

antes de esta línea:

local7.* /var/log/boot.log

se pone:

local0.* -/var/log/opensips.log

Se guardan los cambios y se crea el archivo donde se guardarán los registros de OpenSIPs como se acaba de configurar en rsyslog:

touch /var/log/opensips.log

se reinicia rsyslog:

/etc/init.d/rsyslog restart

Se continua con la creación de la base de datos opensips que se realiza a partir de la configuración de un archivo especifico. Se renombra el predefinido:

mv /etc/opensips/opensipsctlrc /etc/opensips/opensipsctlrc.old

Se crea uno nuevo:

nano /etc/opensips/opensipsctlrc

copiando las líneas que siguen:

SIP_DOMAIN=IPPUBLICA
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=opensips
DBRWUSER=opensips
DBRWPW="opensipsrw"
DBROOTUSER="root"
INSTALL_EXTRA_TABLES=ask
INSTALL_PRESENCE_TABLES=ask
ALIASES_TYPE="DB"
OSIPS_FIFO="/tmp/opensips_fifo"
VERIFY_ACL=1
PID_FILE=/var/run/opensips.pid

Antes de guardar los cambios hay que modificar la primera línea y en lugar de IPPUBLICA se pone la IP publica del servidor. Se guardan los cambios. La aplicación para crear la base de datos es opensipsdbctl. Ejecutando la utilidad sin opciones aparecerán todos los comandos disponibles. En nuestro caso se utiliza create:

opensipsdbctl create

MySQL password for root:
INFO: test server charset
INFO: creating database opensips ...
INFO: Core OpenSIPS tables succesfully created.
Install presence related tables? (y/n):
y
INFO: creating presence tables into opensips ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute userblacklist b2b cachedb_sql registrant call_center? (y/n):
y
INFO: creating extra tables into opensips ...
INFO: Extra tables succesfully created.

Primero preguntará por la contraseña de root (sesamo) y luego si se quieren crear también las tablas para el modulo de presencia y para otros módulos disponibles en OpenSIPs. Se contesta con yes a las dos preguntas.

Ahora que la base de datos está creada, el paso a seguir es instalar un media proxy cuya función es permitir que los dispositivos que se encuentran detrás de una NAT, puedan comunicarse sin problemas de audio. En este caso se instalará la ultima versión de RTPProxy. Primero se descarga:

cd /usr/src

git clone https://github.com/sippy/rtpproxy.git

Se entra en la carpeta creada y se compila e instala:

cd rtpproxy

./configure --libdir=/usr/lib64

make

make install

Se continua creando el archivo de configuración de RTPProxy:

nano /etc/sysconfig/rtpproxy

Se copia la siguiente línea:

OPTIONS="rtpproxy -F -l IPPublica -s udp:localhost:12221 -m 30000 -M 40000 -d DBUG:LOG_LOCAL1"

Las distintas opciones:

  • -l direcciones IPs versión 4 donde se pondrá a la escucha el programa. Si se indican 2 separadas por un / RTPProxy trabajará en modo puente, es decir que enviará el flujo media de una IP a otra y viceversa.

  • -s protocolo de transporte, dirección ip y puerto donde RTPProxy se pondrá a la escucha de comandos enviados desde otros programas (en este caso OpenSIPs)

  • -m puerto UDP inicial del rango de puertos que RTPProxy utilizará para el flujo media

  • -M puerto UDP final del rango de puertos que RTPProxy utilizará para el flujo media

  • -d el nivel de DEBUG que se configurará en el programa y la salida para el LOG

Antes de guardar los cambios, modificar IPPublica con la IP publica del servidor. Se continua modificando nuevamente rsyslog para guardar los datos de LOG de RTPProxy en un archivo dedicado:

nano /etc/rsyslog.conf

Antes de esta línea:

local7.* /var/log/boot.log

se añade:

local1.* -/var/log/rtpproxy.log

touch /var/log/rtpproxy.log

/etc/init.d/rsyslog restart

Se continua creando el script de arranque de RTPProxy para CentOS 6.6:

nano /etc/init.d/rtpproxy

se copian las líneas que siguen:

#!/bin/bash
#
# Startup script for rtpproxy
#
# chkconfig: - 80 15
# description: A symmetric RTP proxy
#
# processname: rtpproxy
### BEGIN INIT INFO
# Provides: rtpproxy
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $network $syslog
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: A symmetric RTP proxy
# Description: A symmetric RTP proxy
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
prog=rtpproxy
rtpproxy=/usr/local/bin/$prog
lockfile=/var/lock/subsys/$prog
pidfile=/var/run/$prog.pid
OPTIONS=
# User-defined options and/or overrides of the variables,
# listed above, should go there:
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
RETVAL=0
start() {
echo -n $"Starting $prog: "
# check whether rtpproxy was already started
if pidofproc -p $pidfile > /dev/null 2>&1 ; then
echo -n "already running" && warning && echo
return 0
fi
daemon $rtpproxy -p $pidfile -u rtpproxy $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch $lockfile
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
# check whether rtpproxy was already started
if ! pidofproc -p $pidfile > /dev/null 2>&1 ; then
echo -n "not running" && warning && echo
return 0
fi
killproc -p $pidfile $prog
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $lockfile $pidfile
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $pidfile $prog
RETVAL=$?
;;
restart|force-reload)
stop
start
;;
reload)
echo -n $"Reloading $prog: not supported" && failure && echo
RETVAL=3
;;
condrestart|try-restart)
if [ -f $pidfile ] ; then
stop
start
fi
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
RETVAL=2
esac
exit $RETVAL

Se guardan los cambios y se termina la configuración:

chmod +x /etc/init.d/rtpproxy

chkconfig --add rtpproxy

chkconfig rtpproxy on

Se añade el usuario rtpproxy para que el programa no se ejecute con el usuario root (seguridad):

useradd rtpproxy

Se inicia:

service rtpproxy start

Iniciando rtpproxy: [ OK ]

En el archivo de LOG del media proxy:

nano /var/log/rtpproxy.log

se encontrará una línea parecida a la que sigue:

Jun 15 09:50:55 sip10 rtpproxy[22821]: INFO:main:GLOBAL: rtpproxy started, pid 22821

Ahora que el Proxy Media está instalado y funcionando, se averigua que la configuración de OpenSIPs esté sin errores. El comando para realizar esta operación es:

opensips -c /etc/opensips/opensips.cfg

El resultado será:

Jul 28 08:44:25 [22906] WARNING:core:warn: warning in config file //etc/opensips/opensips.cfg, line 49, column 13-16: tls support not compiled in
Listening on
             udp: 104.131.17.76 [104.131.17.76]:5060
Aliases:

Jul 28 08:44:25 [22906] NOTICE:core:main: config file ok, exiting...

En teoría parece que todo está bien. Se inicia OpenSIPs:

service opensips start

Starting opensips: [ OK ]

Si no aparecen errores significa que el programa se ha iniciado con éxito. Se puede revisar el archivo de LOG para ver si hay algún problema/Error:

nano /var/log/opensips.log

Ya OpenSIPs está instalado y funcionando.

En la próxima parte veremos como crear usuarios y registrarlos en el proxy SIP.

Vota el Articulo: 

No votes yet
Evalúa la calidad del articulo

2 Comments

Como eliminar OpenSips

Andrea, espero que te encuntres bien.

Primero, quiere aclarar que mi pregunta esta basada al curso que se realizo de OPENSIPS y A2B en Marzo del 2015, aproximadamente.

Tengo dos preguntas, 

¿Cual serían los motivos por la cual no podría iniciar OpenSips?

Según las configuraciones realizadas, no debería tener problemas:

RESULTADO: opensips -c /etc/opensips/opensips.cfg

Nov 30 23:59:54 [3878] WARNING:core:warn: warning in config file //etc/opensips/opensips.cfg, line 50, column 13-16: tls support not compiled in

Listening on 

             udp: 159.2******* [159.2*******]:5060

Aliases: 

Nov 30 23:59:54 [3878] NOTICE:core:main: config file ok, exiting...

TRATANDO DE INICIAR OPENSIPS

service opensips start

Iniciando opensips:                                        [FALLÓ]


STATUS OPENSIPS: "opensips inactivo pero subsistema bloqueado"


¿Cual es la forma correcta de eliminar o limpiar OpenSips?

Adjunto busqueda FIND:

/usr/src/opensips_1_11: find / -name opensips


/etc/opensips

/etc/rc.d/init.d/opensips

/var/spool/mail/opensips

/var/lock/subsys/opensips

/var/lib/mysql/opensips

/var/run/opensips

/lib64/opensips

/usr/src/opensips_1_11/opensips

/usr/src/opensips_1_11/scripts/dbtext/opensips

/usr/src/opensips_1_11/scripts/db_berkeley/opensips

/share/opensips

/share/opensips/dbtext/opensips

/share/doc/opensips

/sbin/opensips

SALUDOS ANDREA

Jorge García

Re: Como eliminar OpenSIPs

Hola,

borras los archivos/carpetas indicados pero en la carpeta /sbin además de opensips hay otros programas relacionados con OpenSIPs:

/sbin/opensips  /sbin/opensipsctl  /sbin/opensipsdbctl  /sbin/opensipsunix

El comando:

opensips -c /etc/opensips/opensips.cfg

no te garantiza que el archivo de configuración esté sin errores. Te garantiza solamente que lo módulos y las funciones presentes están correctamente configurados. En el LOG puede encontrar la causa de error y quizás es alguna paréntesis, punto y coma que hace falta. En opensips.log te debería aparecer la linea donde se encuentra el error.

Saludos

Subscribe to Comments for "Instalación de OpenSIPs 1.11.X en CentOS 6.6 64 bit" Subscribe to VozToVoice - All comments