Instalar RTPEngine en Rocky Linux 9 desde cero

RTPEngine es un proxy media muy potente y versatil utilizado por OpenSIPs y Kamailio cuando se necesite gestionar el flujo media, normalmente para dispositivos que se encuentran detrás de un NAT. En algunas ocasiones puede ser que necesiten instalar solamente este programa en un servidor para luego conectarlo a Kamailio. En este articulo veremos como se instala desde cero. Lo primero que hay que hacer el actualizar el sistema:

 

dnf update -y

 

luego instalar un editor de texto, wget, git y los repositorios epel:

 

dnf install nano wget git epel-release -y

 

configurar la zona horaria:

 

timedatectl set-timezone America/Bogota

 

instalar y activar el paquete del network time protocol:

 

dnf install chrony -y

 

systemctl enable chronyd

 

systemctl start chronyd

 

desactivar Selinux:

 

nano /etc/selinux/config

 

se modifican estas dos lineas:

 

SELINUX=disabled

SELINUXTYPE=targeted

 

se reinicia el sistema

 

reboot

 

se accede nuevamente al servidor vía SSH y se instalan los paquetes que permiten compilar programas que se instalan desde las fuentes:

 

dnf group install 'Development Tools' -y

 

se activan los repositorios CRB:

 

dnf config-manager --set-enabled crb

 

se instalan unas dependencias requeridas por RTPEngine:

 

dnf install iptables-devel iptables-services libpcap-devel json-glib-devel libevent-devel perl-IPC-Cmd kernel-modules-extra pandoc iptables-legacy-devel libnftnl-devel spandsp-devel libwebsockets-devel hiredis-devel xmlrpc-c-devel gperf mysql-devel -y

 

las fuentes del Kernel:

 

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

 

FFMPEG desde los repositorios rpmfusion:

 

dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm -y

 

dnf install ffmpeg ffmpeg-devel zeromq libavdevice libavc1394 opus opus-devel -y

 

Ahora si queremos instalar el codec G729 para que RTPEngine pueda hacer transcoding, necesitamos mínimo la versión 3.22 de CMAKE mientras en Rocky Linux 9 la versión instalada es:

 

dnf info cmake

Version : 3.20.2

 

pues hay que instalar cmake desde la fuentes pero primero se desinstala la versión instalada:

 

dnf remove cmake -y

 

luego:

 

cd /usr/src

 

wget https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1....

 

tar -xf cmake-3.27.1.tar.gz

 

cd cmake-3.27.1

 

./bootstrap --prefix=/usr

 

gmake

 

make install

 

cmake --version

cmake version 3.27.1

 

luego se continua con bcg729 desde las fuentes:

 

cd /usr/src

 

git clone https://github.com/BelledonneCommunications/bcg729.git

 

cd bcg729/

 

cmake .

 

make

 

make install

 

Ya se puede descargar y compilar el Media Proxy RTPEngine:

 

cd /usr/src

 

git clone https://github.com/sipwise/rtpengine.git

 

cd /usr/src/rtpengine/daemon

 

make

 

Se copia el programa compilado en la carpeta /usr/local/bin:

 

cp rtpengine /usr/local/bin/

 

Se compila e instala el modulo del Kernel requerido para reenviar los paquetes a nivel de núcleo del Kernel y para realizar configuraciones adicionales:

 

cd /usr/src/rtpengine/kernel-module

 

make

 

Para tener la certeza que esté cargado el ultimo Kernel actualizado, se reinicia el sistema:

 

reboot

 

Se accede nuevamente al servidor vía SSH y se copia el modulo compilado en la fuentes del Kernel en uso:

 

cd /usr/src/rtpengine/kernel-module

 

uname -r

5.14.0-362.13.1.el9_3.x86_64

 

cp xt_RTPENGINE.ko /lib/modules/5.14.0-362.13.1.el9_3.x86_64/extra/xt_RTPENGINE.ko

 

Se realiza un control en todos los módulos del Kernel instalados:

 

depmod -a

 

Se configura el sistema de forma que el modulo se cargue cada vez que se inicie el sistema:

 

nano /etc/modules-load.d/rtpengine.conf

 

se copia la siguiente linea:

 

xt_RTPENGINE

 

y se guardan los cambios. Se carga el modulo, se revisa que esté cargado y se realizan unos cambios necesarios para el correcto funcionamiento del Proxy Media:

 

modprobe xt_RTPENGINE

 

lsmod | grep xt_RTPENGINE

xt_RTPENGINE 61440 0

 

echo 'add 0' > /proc/rtpengine/control

 

IMPORTANTE: cada vez que durante una actualización del sistema, se actualiza el Kernel hay que volver a compilar el modulo y copiarlo en la relativa carpeta del nuevo Kernel; se empieza desde el comando cd /usr/src/rtpengine/kernel-module hasta el comando modprobe xt_RTPENGINE que aparecen en esta guía

 

Para ver la lista de Codec audio soportados por RTPEngine:

 

rtpengine --codecs

 

 

Se continua con el script de arranque de rtpengine para Rocky Linux:

 

cd /usr/src

 

git clone -b 2.1-config https://github.com/etamme/federated-sip.git

 

cd federated-sip/scripts

 

cp rtpengine.service /etc/systemd/system/

 

systemctl enable rtpengine.service

Created symlink from /etc/systemd/system/multi-user.target.wants/rtpengine.service to /etc/systemd/system/rtpengine.service.

 

mkdir -p /var/spool/rtpengine

 

cp rtpengine.sysconfig /etc/sysconfig/rtpengine

 

nano /etc/sysconfig/rtpengine

 

Se modifica esta linea:

 

OPTIONS="--interface xxx.xxx.xxx.xxx --listen-ng xxx.xxx.xxx.xxx:60000 -m 50000 -M 55000 -E -L 7"

 

para que quede:

 

OPTIONS="--interface=pub/IPPublica -n 127.0.0.1:2223 -m 20000 -M 30000 -L 7 --log-facility=local1 --table=0"

 

Las distintas opciones:

 

  • --interface dirección IPs versión 4/6 donde se pondrá a la escucha el programa. Si se indican 2, utilizando la misma opción --interface pero cambiando el nombre, RTPengine podrá trabajar en modo puente, es decir podrá enviar el flujo media, cuando requerido, de una IP a otra y viceversa. Algunos ejemplos:

    • --interface=pub/IPPublica la interfaz de red con nombre pub estará asociada a la IP publica del servidor

    • --interface=local/IPlocal la interfaz de red con nombre local estará asociada a la IP local del servidor

    • --interface=pub/IPPublica;local/IPlocal se indicarán dos IP, una publica y una privada; luego en el archivo de configuración de Kamailio se podrá indicar la dirección del flujo media, de IPpublica a IPlocal y viceversa

    • si se trabaja detrás de un NAT normalmente se utiliza este tipo de configuración: --interface=IPlocal!IPPublica

  • -n dirección ip y puerto donde RTPEngine se pondrá a la escucha de los comandos enviados desde otros programas (OpenSIPs,Kamailio)

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

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

  • -L el nivel de DEBUG que se configurará en el programa. 7 el más alto.

  • --log-facility salida de LOG que luego se configurará en rsyslog

  • --table=0 es la tabla que se utilizará para reenviar los datos del flujo media al modulo del Kernel de RTPEngine

 

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

 

nano /etc/rsyslog.d/rtpengine.conf

 

se copian las siguientes dos lineas:

 

:programname, startswith, "rtpengine" -/var/log/rtpengine.log

& ~

 

Se guardan los cambios y se continua con:

 

touch /var/log/rtpengine.log

 

luego:

 

systemctl restart rsyslog

 

ya se puede iniciar RTPEngine:

 

systemctl start rtpengine

 

En el archivo de LOG del media proxy:

 

nano /var/log/rtpengine.log

 

encontraremos una serie de lineas que terminarán con algo parecido:

 

INFO: [core] Startup complete, version git-master-da134849

 

Para rotar los archivos de LOG de RTPEngine:

 

nano /etc/logrotate.d/rtpengine

 

se copian las lineas que siguen:

 

/var/log/rtpengine.log {

missingok

rotate 7

daily

postrotate

/bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true

endscript

}

 

Es todo… ¿Comentarios?

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Instalar RTPEngine en Rocky Linux 9 desde cero" Suscribirse a VozToVoice - Todos los comentarios