Saltearse al contenido

Presentación 6: PJSIP a Fondo

Arquitectura modular, Wizard y prácticas de producción en Asterisk 22

🧠 Arquitectura, Wizards y Prácticas de Producción en Asterisk 22

Sección titulada «🧠 Arquitectura, Wizards y Prácticas de Producción en Asterisk 22»

🧭 Recapitulación: El Fin de una Era, El Comienzo de una Arquitectura

Sección titulada «🧭 Recapitulación: El Fin de una Era, El Comienzo de una Arquitectura»

En la presentación de “Generalidades”, establecimos una regla fundamental: chan_sip está muerto. Entender las limitaciones del pasado nos ayuda a apreciar el poder del presente.

  • Los Problemas de chan_sip:
    • Monolítico y difícil de mantener
    • Confusión de conceptos (peer, user, type=friend)
    • Un dispositivo por extensión
    • Manejo de NAT deficiente y propenso a errores

  • PJSIP es pjproject: Biblioteca multimedia de comunicación, abierta y muy usada.
  • Asterisk lo adopta desde v12: Nace chan_pjsip.
  • Hitos:
    • Asterisk 13.8.0: empaquetado de pjproject como opción
    • Asterisk 15.0.0: empaquetado por defecto
    • Asterisk 22: chan_sip eliminado; PJSIP es la única opción

🏭 La Arquitectura Modular de PJSIP: La Fábrica de Teléfonos

Sección titulada «🏭 La Arquitectura Modular de PJSIP: La Fábrica de Teléfonos»

Imaginemos una línea de ensamblaje:

  • transport (Muelle de Carga): protocolo y puerto de escucha
  • auth (Guarda de Seguridad): credenciales y autenticación
  • aor (Agenda de Contactos): localización y contactos (IPs/puertos)
  • endpoint (Hoja de Especificaciones): códecs, contexto, CallerID y vínculos a auth/aor/transport

Dimensiónchan_sip (legacy)chan_pjsip (actual)
DiseñoMonolíticoModular (transport/auth/aor/endpoint/identify)
Múltiples dispositivos por usuarioLimitadoNatural vía aor con múltiples contactos
NATParámetros heredados y frágilesrtp_symmetric, rewrite_contact, force_rport bien definidos
Seguridadtype=friend ambiguoSeparación clara de roles; ACLs, TLS más simple
ExtensibilidadDifícilBasado en pjproject con mejoras continuas
ConfiguraciónMenos verbosa pero poco flexibleVerbosa pero con pjsip_wizard.conf muy simple
Estado del proyectoEliminado en Asterisk 22Único driver SIP soportado

  • Estabilidad y soporte continuo (respaldado por pjproject).
  • Manejo de NAT robusto y explícito.
  • Multi-dispositivo por usuario listo de fábrica.
  • Wizard reduce errores humanos y acelera despliegues.
  • Logging y diagnóstico granulares (pjsip set logger ...).

🧾 Configuración Visual: chan_sip vs. pjsip.conf

Sección titulada «🧾 Configuración Visual: chan_sip vs. pjsip.conf»

Ejemplo clásico de sip.conf (pasado):

;--- sip.conf (Pasado) ---
[1001]
type=friend
secret=unaclavemuysegura
host=dynamic
context=internal
disallow=all
allow=ulaw

El mismo caso en pjsip.conf (presente) modulando objetos:

;--- pjsip.conf (Presente) ---
; Muelle de Carga
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
; Hoja de Especificaciones
[1001]
type=endpoint
context=internal
disallow=all
allow=ulaw
auth=auth-1001 ; vincula guardia
aors=1001 ; vincula agenda
transport=transport-udp
; Guarda de Seguridad
[auth-1001]
type=auth
auth_type=userpass
username=1001
password=unaclavemuysegura
; Agenda de Contactos
[1001]
type=aor
max_contacts=1

🪄 La Solución a la Verbosidad: pjsip_wizard.conf

Sección titulada «🪄 La Solución a la Verbosidad: pjsip_wizard.conf»

El Wizard automatiza la creación de objetos PJSIP con una sintaxis más simple.

  • Sin Wizard (pjsip.conf): configuración extensa y repetitiva para troncales
  • Con Wizard (pjsip_wizard.conf):
[my-itsp]
type=wizard
sends_auth = yes
sends_registrations = yes
remote_hosts = sip.my-itsp.net
outbound_auth/username = my_username
outbound_auth/password = my_password
endpoint/context = from-trunk

📈 Diagrama: Flujo de Registro de un Endpoint (PJSIP)

Sección titulada «📈 Diagrama: Flujo de Registro de un Endpoint (PJSIP)»

📈 Diagrama: Llamada de Salida usando Wizard (Troncal ITSP)

Sección titulada «📈 Diagrama: Llamada de Salida usando Wizard (Troncal ITSP)»

🛡️ Troubleshooting y Seguridad: Prácticas Esenciales

Sección titulada «🛡️ Troubleshooting y Seguridad: Prácticas Esenciales»
  • Logger dirigido:
Terminal window
*CLI> pjsip set logger on <endpoint_name>
*CLI> pjsip set logger host <ip_address>
# Para detener: pjsip set logger off
  • ACLs en producción:
[acl-trunk-provider]
type=acl
permit=203.0.113.5/32 ; IP del proveedor
[mi-troncal]
type=endpoint
...
acl=acl-trunk-provider
  • Fail2Ban y contraseñas fuertes
  • TLS para señalización cuando sea posible

  • Arquitectura modular de PJSIP y por qué supera a chan_sip
  • pjproject como base y el rol de chan_pjsip
  • Simplificación con pjsip_wizard.conf
  • Herramientas de troubleshooting y seguridad imprescindibles

🚀 Taller 7 - Troncal SIP y Enrutamiento de Salida

¿Listos para conectar nuestra PBX al mundo? En el próximo taller, usaremos pjsip_wizard.conf para configurar nuestra primera troncal SIP real y crearemos el dialplan para realizar llamadas salientes.

👉 Ir al Taller 7: Troncal SIP y Enrutamiento de Salida