Installare RTPengine su CentOS/RHEL 7
Guida completa per l’installazione di RTPengine su un server CentOS 7 o RHEL 7
Cos’è RTPengine e a cosa serve
RTPengine è un proxy per il traffico RTP, in genere usato con un SIP Proxy (es. Kamailio) per disacoppiare lo stream audio (RTP appunto) tra un chiamante ed un chiamato, utile ad esempio in scenari in cui il chiamante si trovi su una rete pubblica mentre il chiamato sia confinato all’interno di una subnet privata.
Aggiornare il sistema ed installare il kernel più recente
yum update
yum install kernel-devel
yum update kernel
reboot
Installare iptables
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services iptables-devel
systemctl enable iptables.service
systemctl start iptables.service
iptables -F
service iptables save
Controllare che il servizio iptables sia up & running
systemctl status iptables.service
Installare i pacchetti Linux necessari per compilare RTPengine
Qui occorre fare una prima precisazione, perchè alcuni dei pacchetti necessari appartengono al repository EPEL (Extra Packages Enterprise Linux) e le modalità di installazione del repository sono diverse tra RHEL e CentOS (https://docs.fedoraproject.org/en-US/epel/#_el7).
EPEL su CentOS
yum install epel-release
EPEL su RedHat
subscription-manager repos --enable rhel-*-optional-rpms \
--enable rhel-*-extras-rpms \
--enable rhel-ha-for-rhel-*-server-rpms
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Setup dei pacchetti
yum install glib glib-devel gcc zlib zlib-devel openssl openssl-devel pcre pcre-devel libcurl libcurl-devel xmlrpc-c xmlrpc-c-devel wget
yum install libevent-devel glib2-devel json-c-devel json-glib json-glib-devel gperf libpcap-devel git perl-IPC-Cmd libiptcdata-devel libiptcdata-devel hiredis hiredis-devel redis iptables-devel libwebsockets-devel
yum install spandsp spandsp-devel
Installare FFmpeg
Qui c’è una seconda precisazione da fare, perchè le versioni degli rpm cambiano nel tempo, pertanto è opportuno controllare la versione rilaciata di FFmpeg al link https://download1.rpmfusion.org/free/el/updates/7/x86_64/f/.
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
yum install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
yum localinstall --nogpgcheck http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/opus-1.3-0.4.beta.el8.x86_64.rpm
yum localinstall --nogpgcheck http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/opus-devel-1.3-0.4.beta.el8.x86_64.rpm
mkdir /usr/src/ffmpeg_rpms
cd /usr/src/ffmpeg_rpms/
wget https://download1.rpmfusion.org/free/el/updates/7/x86_64/f/ffmpeg-devel-3.4.12-1.el7.x86_64.rpm
wget https://download1.rpmfusion.org/free/el/updates/7/x86_64/l/libavdevice-3.4.12-1.el7.x86_64.rpm
wget https://download1.rpmfusion.org/free/el/updates/7/x86_64/f/ffmpeg-3.4.12-1.el7.x86_64.rpm
wget https://forensics.cert.org/centos/cert/7/x86_64/ffmpeg-libs-2.6.8-3.el7.nux.x86_64.rpm
yum localinstall *.rpm
yum install bcg729 bcg729-devel
Installare MariaDB
MariaDB è necessario per compilare correttamente RTPengine
yum install mariadb-devel mariadb-client mariadb-shared
Compilare ed installare RTPengine
cd /usr/src/
git clone https://github.com/sipwise/rtpengine.git rtpengine
cd /usr/src/rtpengine
cd /usr/src/rtpengine/daemon
make
cp -fr rtpengine /usr/sbin/rtpengine
cp -fr rtpengine /usr/local/bin/rtpengine
Compilare ed installare le estensioni iptables
cd /usr/src/rtpengine/iptables-extension
make all
cp -fr libxt_RTPENGINE.so /usr/lib64/xtables/.
Compilare ed installare il kernel module xt_RTPENGINE
cd /usr/src/rtpengine/kernel-module
make
cp -fr xt_RTPENGINE.ko /lib/modules/`uname -r`/extra/xt_RTPENGINE.ko
depmod -a
modprobe -v xt_RTPENGINE
Controllare che il kernel module sia stato caricato
lsmod | grep xt_RTPENGINE
Configurare l’avvio del kernel module al boot del sistema
echo "# load xt_RTPENGINE module" >> /etc/modules-load.d/rtpengine.conf
echo "xt_RTPENGINE" >> /etc/modules-load.d/rtpengine.conf
Controllare l’accessibilità di RTPengine
ls -l /proc/rtpengine/control | grep root
l’output dovrà essere del tipo
--w--w----. 1 root root 0 10 gen 12.31 /proc/rtpengine/control
e quindi
ls -l /proc/rtpengine/list
con output del tipo
-r--r--r--. 1 root root 0 10 gen 12.32 /proc/rtpengine/list
Configurazione
Il file di configurazione è /etc/sysconfig/rtpengine e per procedere alla corretta configurazione del sistema è necessario conoscere l’IP esterno esposto dal sistema, da sostituire in 999.999.999.999. Tutti i parametri di configurazione sono descritti qui.
echo "OPTIONS=\"-i 999.999.999.999 -n 127.0.0.1:2223 -m 23000 -M 23100 -L 4 --log-facility=local1 --table=8 --delete-delay=0 --timeout=60 --silent-timeout=600 --final-timeout=7200 --offer-timeout=60 --num-threads=12 --tos=184 –no-fallback\"" > /etc/sysconfig/rtpengine
Configurare i log
Con i parametri di configurazione usati sopra, i log prodotti da RTPengine sono relativi alla facility local1 (–log-facility=local1), quindi per gestirli correttamente si può aggiungere la seguente riga al file /etc/rsyslog.conf
#rtpengine log
local1.* -/var/log/rtpengine/rtpengine.log
Inoltre possiamo disabilitare la scrittura dei log prodotti da RTPengine nel messages
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none /var/log/messages
Configuriamo poi la log rotation, aggiungendo il file /etc/logrotate.d/rtpengine
/var/log/rtpengine/rtpengine.log {
daily
rotate 4
missingok
dateext
copytruncate
compress
}
Infine creiamo il folder ed il file dove verrano prodotti i log
mkdir -p /var/log/rtpengine
touch /var/log/rtpengine/rtpengine.log
systemctl restart rsyslog
Configurazione del servizio RTPengine
Per avviare e gestire RTPengine come servizio possiamo creare lo unit file /etc/systemd/system/rtpengine.service
[Unit]
Description=Kernel based rtp proxy
After=syslog.target
After=network-online.target
After=iptables.service
Requires=network-online.target
[Service]
Type=forking
PIDFile=/var/run/rtpengine.pid
EnvironmentFile=-/etc/sysconfig/rtpengine
ExecStart=/usr/local/bin/rtpengine -p /var/run/rtpengine.pid $OPTIONS
Restart=on-abort
[Install]
WantedBy=multi-user.target
Avvio del servizio
mkdir -p /var/spool/rtpengine
systemctl enable rtpengine.service
systemctl start rtpengine.service