Asterisk en Rocky Linux 9: instalación completa y configuración PJSIP paso a paso

Rocky Linux 9 se ha consolidado como una de las distribuciones enterprise más confiables tras la discontinuación de CentOS, y Asterisk continúa siendo el corazón de innumerables sistemas de telefonía IP alrededor del mundo. En esta guía actualizada para 2025, aprenderás a instalar Asterisk desde el código fuente y configurar PJSIP, el stack SIP moderno que ha reemplazado a chan_sip como la opción recomendada.

Rocky Linux 9 ofrece estabilidad enterprise con soporte extendido hasta 2032, lo que lo hace ideal para sistemas de producción. PJSIP, por su parte, proporciona mejor rendimiento, soporte IPv6 nativo, y una arquitectura más robusta que el antiguo chan_sip. Si estás comenzando un proyecto nuevo en 2025, esta combinación es la elección correcta.

Antes de comenzar, asegúrate de tener:

  • Un servidor con Rocky Linux 9 (mínimo 2GB RAM, 2 CPU cores)
  • Acceso root o sudo
  • Conexión a internet estable
  • Conocimientos básicos de Linux y línea de comandos

Primero, actualizamos el sistema y habilitamos el repositorio EPEL, que contiene dependencias necesarias:

sudo dnf update -y
sudo dnf install epel-release -y
sudo dnf config-manager --set-enabled crb
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
reboot

Asterisk requiere numerosas librerías y herramientas de compilación. Instalamos todo lo necesario:

sudo dnf install -y gcc gcc-c++ make wget tar bzip2 \
  libuuid-devel jansson-devel libxml2-devel sqlite-devel \
  libedit-devel openssl-devel ncurses-devel newt-devel \
  kernel-devel kernel-headers elfutils-libelf-devel \
  libtiff-devel gtk2-devel libsrtp-devel speex-devel \
  speexdsp-devel gsm-devel libogg-devel libvorbis-devel \
  opus-devel corosync-devel neon-devel \
  libical-devel openldap-devel freeradius-devel \
  freetds-devel unixODBC-devel mariadb-devel postgresql-devel \
  lua-devel patch libtool libtool-ltdl-devel libsamplerate-devel

En 2025, la versión LTS recomendada es Asterisk 20. Descargamos el código fuente desde el sitio oficial:

cd /usr/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
sudo tar -xvzf asterisk-20-current.tar.gz
cd asterisk-20.*

Nota: Verifica siempre la versión más reciente en el sitio oficial de Asterisk.

Ejecutamos el script de instalación de dependencias de Asterisk:

sudo contrib/scripts/install_prereq install

Este script detecta automáticamente Rocky Linux y descarga dependencias adicionales.

Ahora configuramos la compilación:

sudo ./configure --with-jansson-bundled

Usamos las versiones bundled de jansson y pjproject para garantizar compatibilidad total. Esto es especialmente importante para PJSIP.

Seleccionamos los módulos a compilar:

sudo make menuselect

En el menú interactivo:

  • Revisa que en Codec Translators todo los modulos presentes debajo de la etiqueta External estén selecionados
  • Asegúrate de que res_pjsip y todos los módulos res_pjsip_* estén seleccionados (en "Resource Modules")
  • Verifica que chan_pjsip esté habilitado (en "Channel Drivers")
  • Opcionalmente, desmarca chan_sip si no planeas usarlo (en "Channel Drivers")
  • En "Core Sound Packages" y "Music On Hold File Packages", selecciona el idioma español y el formato de audio que prefieras (recomendado: WAV o ULAW)

Guarda y sal del menú (botón "Save & Exit" o tecla 'x').

Compilamos e instalamos:

sudo make -j$(nproc)
sudo make install
sudo make samples
sudo dnf -y install chkconfig initscripts
sudo make config sudo ldconfig

El proceso de compilación puede tomar entre 10 y 30 minutos dependiendo de tu hardware.

Por seguridad, ejecutamos Asterisk con un usuario sin privilegios:

sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk:asterisk /etc/asterisk
sudo chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk:asterisk /usr/lib/asterisk

Configuramos Asterisk para usar este usuario editando /etc/sysconfig/asterisk:

sudo nano /etc/sysconfig/asterisk

Descomenta y modifica estas líneas:

AST_USER="asterisk"
AST_GROUP="asterisk"

También edita /etc/asterisk/asterisk.conf:

sudo nano /etc/asterisk/asterisk.conf

En la sección [options], agrega o modifica:

runuser = asterisk
rungroup = asterisk

Rocky Linux 9 usa firewalld por defecto. Abrimos los puertos necesarios para SIP y RTP:

sudo firewall-cmd --permanent --add-port=5060/udp
sudo firewall-cmd --permanent --add-port=5060/tcp
sudo firewall-cmd --permanent --add-port=10000-20000/udp
sudo firewall-cmd --reload

El rango 10000-20000 es para tráfico RTP. Puedes ajustarlo según tus necesidades en /etc/asterisk/rtp.conf.

PJSIP utiliza un archivo de configuración centralizado: /etc/asterisk/pjsip.conf. Vamos a crear una configuración básica funcional.

Primero, respaldamos el archivo de ejemplo:

sudo mv /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.original

Creamos una nueva configuración:

sudo nano /etc/asterisk/pjsip.conf

Contenido básico:

[global]
type=global
endpoint_identifier_order=ip,username,anonymous

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
external_media_address=TU_IP_PUBLICA
external_signaling_address=TU_IP_PUBLICA
local_net=192.168.1.0/24

[transport-tcp]
type=transport
protocol=tcp
bind=0.0.0.0:5060

[basic-endpoint](!)
type=endpoint
context=from-internal
disallow=all
allow=ulaw
allow=alaw
allow=opus
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

[basic-auth](!)
type=auth
auth_type=userpass

[basic-aor](!)
type=aor
max_contacts=1
remove_existing=yes

; Extensión 1000
[1000](basic-endpoint)
auth=1000
aors=1000

[1000](basic-auth)
password=password1000
username=1000

[1000](basic-aor)
contact=sip:1000@localhost

; Extensión 1001
[1001](basic-endpoint)
auth=1001
aors=1001

[1001](basic-auth)
password=password1001
username=1001

[1001](basic-aor)
contact=sip:1001@localhost

Importante: Reemplaza TU_IP_PUBLICA con tu IP pública real si el servidor está detrás de NAT, y 192.168.1.0/24 con tu red local.

Entendiendo la configuración PJSIP

PJSIP utiliza un sistema de objetos modular:

  • transport: Define cómo Asterisk escucha conexiones SIP (UDP, TCP, TLS)
  • endpoint: Representa un dispositivo o cliente SIP
  • auth: Maneja la autenticación
  • aor (Address of Record): Gestiona las ubicaciones de contacto

Las plantillas (con !) permiten reutilizar configuraciones comunes.

Editamos /etc/asterisk/extensions.conf:

sudo nano /etc/asterisk/extensions.conf

Al final del archivo agregamos un contexto básico para llamadas internas:

[from-internal]
exten => 1000,1,NoOp(Llamada a extensión 1000)
 same => n,Dial(PJSIP/1000,20)
 same => n,Hangup()

exten => 1001,1,NoOp(Llamada a extensión 1001)
 same => n,Dial(PJSIP/1001,20)
 same => n,Hangup()

exten => 100,1,Answer()
 same => n,Playback(demo-congrats)
 same => n,Hangup()

La extensión 100 es una prueba simple para verificar que el sistema funciona.

Editamos /etc/asterisk/codecs.conf para optimizar la calidad de audio:

sudo nano /etc/asterisk/codecs.conf

Configuración recomendada de OPUS (añadir al final del archivo):

[opus]
type=opus
max_playback_rate=48000
packet_loss=10
complexity=10
fec=true

Opus es el codec más moderno y ofrece la mejor calidad/ancho de banda en 2025.

Editamos /etc/asterisk/rtp.conf:

sudo nano /etc/asterisk/rtp.conf

Ajustamos el rango de puertos RTP:

[general]
rtpstart=10000
rtpend=20000
strictrtp=yes
icesupport=yes

Iniciamos el servicio:

sudo systemctl start asterisk
sudo systemctl enable asterisk

Verificamos el estado:

sudo systemctl status asterisk

Conectamos a la consola de Asterisk:

sudo asterisk -rvvv

Verificamos que PJSIP esté cargado:

pjsip show endpoints

Deberías ver las extensiones 1000 y 1001. Para más detalles:

pjsip show endpoint 1000
pjsip list transports

Descarga un softphone compatible con PJSIP como:

  • Zoiper (Windows, macOS, Linux, móvil)
  • Linphone (multiplataforma)
  • MicroSIP (Windows)

Configura una cuenta con estos parámetros:

  • Usuario: 1000
  • Contraseña: password1000
  • Dominio/Servidor: IP_DE_TU_SERVIDOR
  • Puerto: 5060
  • Transporte: UDP

Registra el softphone y llama a la extensión 100 para probar el audio.

Los endpoints no se registran

Verifica los logs en tiempo real:

sudo asterisk -rvvv
pjsip set logger on

Luego intenta registrar nuevamente y observa los mensajes.

No hay audio en las llamadas

Problema común de NAT. Verifica:

  1. Que external_media_address y external_signaling_address estén configurados correctamente
  2. Que los puertos RTP estén abiertos en el firewall
  3. Que direct_media=no esté configurado en los endpoints

Asterisk no inicia

Revisa los logs:

sudo journalctl -u asterisk -n 50
sudo tail -f /var/log/asterisk/messages

Habilitar logs estructurados

Edita /etc/asterisk/logger.conf:

[logfiles]
console => notice,warning,error
messages => notice,warning,error
full => notice,warning,error,debug,verbose

Configurar fail2ban

Protege tu servidor contra ataques de fuerza bruta:

sudo dnf install fail2ban -y

Crea /etc/fail2ban/jail.local:

[asterisk]
enabled = true
port = 5060,5061
protocol = udp
filter = asterisk
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 3600

Reinicia fail2ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Monitoreo con pjsip

Comandos útiles para monitorear:

# Ver estadísticas de endpoints
asterisk -rx "pjsip show endpoints"

# Ver llamadas activas
asterisk -rx "pjsip show channels"

# Ver registros
asterisk -rx "pjsip show registrations"

# Ver subscripciones
asterisk -rx "pjsip show subscriptions"

Ahora tienes un sistema Asterisk funcional con PJSIP en Rocky Linux 9. Algunos temas avanzados para explorar:

  • Configurar troncales SIP con proveedores VoIP
  • Implementar IVR (Interactive Voice Response)
  • Integrar WebRTC para llamadas desde navegador
  • Configurar colas de llamadas (queues)
  • Implementar grabación de llamadas
  • Configurar voicemail con PJSIP
  • Integración con bases de datos para configuración dinámica

La combinación de Rocky Linux 9 y Asterisk con PJSIP representa el estándar moderno para sistemas de telefonía IP empresarial en 2025. Esta configuración te proporciona una base sólida y escalable para construir soluciones de comunicación robustas.

PJSIP ofrece ventajas significativas sobre chan_sip: mejor rendimiento, arquitectura más limpia, soporte IPv6 nativo, y manejo superior de NAT. Si estás migrando desde chan_sip, vale la pena el esfuerzo de aprender esta nueva configuración.

Recuerda mantener tu sistema actualizado, implementar medidas de seguridad apropiadas, y monitorear regularmente el rendimiento de tu PBX. ¡Buena suerte con tu implementación de Asterisk!


Creado por CLAUDE, certificado por Andrea

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Asterisk en Rocky Linux 9: instalación completa y configuración PJSIP paso a paso" Suscribirse a VozToVoice - Todos los comentarios