Si alguna vez has sentido que diagnosticar problemas en Asterisk es como buscar las llaves en una piscina olímpica llena de pirañas, te presentamos sngrep: el visor de trazas SIP que hará que tu vida sea (ligeramente) menos miserable y mucho más entretenida.
sngrep es la navaja suiza de los administradores de VoIP: te permite ver, en tiempo real o desde capturas, todo el tráfico SIP que pasa por tu servidor, con diagramas de flujo tan bonitos que dan ganas de imprimirlos y pegarlos en la nevera. Sirve para:
Instalar sngrep es tan fácil que hasta tu cuñado podría hacerlo:
yum install sngrep # o en Debian/Ubuntu apt install sngrep
Si necesitas el repo extra, consulta la documentación oficial. No queremos que este artículo se convierta en un tutorial de 500 páginas.
Para ver la magia en acción, simplemente ejecuta:
sngrep
Verás aparecer una lista de llamadas SIP como si fueran Pokémon esperando ser atrapados. Cada fila es un diálogo SIP, con información útil como origen, destino, y método usado. Para centrarte solo en llamadas (y no en registros aburridos), puedes usar:
sngrep -c
¿Quieres guardar lo que ves para torturarte después? Usa:
sngrep -O captura.pcap
Si tu red es tan ruidosa como una fiesta de cumpleaños infantil, filtra por puerto SIP:
sngrep port 5060 and udp
Dentro de sngrep, pulsa / para buscar cadenas, o f para aplicar filtros avanzados. Si te pierdes, h siempre muestra la ayuda contextual.
Imagina que tu jefe te llama, furioso, porque "no se oye nada" al marcar a la extensión 101. Tú, con cara de póker, abres sngrep y ves el siguiente flujo SIP:
INVITE sip:101@asterisk.local SIP/2.0 ... m=audio 12345 RTP/AVP 18 0 8 a=rtpmap:18 G729/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 ... 200 OK ... m=audio 54321 RTP/AVP 0 a=rtpmap:0 PCMU/8000
¿Qué ha pasado aquí? El INVITE ofrece varios códecs (G729, PCMU, PCMA), pero el 200 OK solo responde con PCMU. Si tu teléfono solo soporta G729 y Asterisk responde con PCMU, la llamada se establece, pero el audio es como el silencio de una biblioteca a las 3 de la mañana.
Diagnóstico: Negociación de códec fallida. ¡A revisar los códecs permitidos en sip.conf y en el endpoint!
sngrep no solo muestra la señalización SIP, sino que también te ayuda a identificar problemas de RTP (la voz en sí). Si ves que la llamada se establece pero nadie escucha nada, probablemente el RTP esté perdido en el Triángulo de las Bermudas digital.
En el flujo SIP, busca las líneas m=audio y los puertos asignados. Si el INVITE dice:
m=audio 12345 RTP/AVP 0
Y el ACK responde con otro puerto, pero no ves tráfico RTP entre esos puertos (puedes comprobarlo con tcpdump udp port 12345), tienes un problema de NAT o de firewall. A veces, el audio va en una sola dirección, o simplemente no va.
Solución: Revisa la configuración de NAT en Asterisk y en los endpoints. Y recuerda abrir los puertos correctos en el firewall, a menos que quieras seguir jugando al escondite con los paquetes RTP.
sngrep es tu mejor aliado para diagnosticar problemas en Asterisk: desde negociaciones de códecs fallidas hasta misterios de RTP. Y si todo falla, siempre puedes usarlo para impresionar a tus colegas con diagramas de flujo que parecen arte moderno.
¡Feliz caza de bugs y que el SIP esté siempre de tu lado!