Enviado por admin el
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?
Comentarios recientes