debugging IAX en Asterisk 1.4
Debido a algunos problemas con un carrier de Voip que me provee sus enlaces via IAX2 he tenido que aprender a tomar la investigación por mi propia cuenta, en realidad voy a describir un poco las herramientas que he utilizado hasta el momento para tratar de encontrar el error.
Primero y lo mas basico vamos a habilitar los logs de asterisk a su mayor capacidad, para esto modificaremos el archivo Logger.conf
[root@srv-pbx asterisk]# pwd /etc/asterisk [root@srv-pbx asterisk]# ls -lha logger.conf -rw-r--r-- 1 root root 144 Sep 9 11:23 logger.conf
En este archivo asterisk define tanto el nivel de reportes, como el nombre de los archivos generados para guardar los mismos.
- debug
- notice
- warning
- error
- verbose
- dtmf
Ejemplos:
debug => debug
console => notice,warning,error
messages => notice,warning,error
full => notice,warning,error,verbose
syslog.local0 => notice,warning,error
[root@srv-pbx asterisk]# cat logger.conf [logfiles] debug => debug console => notice,warning,error messages => notice,warning,error,debug,verbose full => notice,warning,error,verbose
Luego de realizadas estas modificaciones desde nuestro CLI vamos a ejecutar “logger reload” para poner a funcionar los nuevos logs
para no perdernos entre tanta información que a veces asterisk despliega en su consola vamos a colocar un “mute”
srv-pbx*CLI> set verbose 0 Verbosity is now OFF
Seguido esto podemos iniciar a tomar trazas de nuestra actividad IAX2
srv-pbx*CLI> iax2 set debug IAX2 Debugging Enabled
De esto podremos obtener un poco de información que esta relacionada con nuestro trafico/registro/identificación
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00017ms SCall: 03132 DCall: 00000 [172.20.1.141:4569] Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: ACK Timestamp: 00023ms SCall: 03132 DCall: 00001 [172.20.1.141:4569] Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00004ms SCall: 11911 DCall: 00000 [127.0.0.1:39767] Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00004ms SCall: 07223 DCall: 00000 [172.20.1.169:4569] Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00004ms SCall: 13976 DCall: 00000 [127.0.0.1:40726] Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00004ms SCall: 07951 DCall: 00000 [172.20.1.141:4569] Timestamp: 00004ms SCall: 13976 DCall: 00000 [127.0.0.1:40569]
si esta información no bastara vamos a bajar un poco mas de nivel utilizando tcpdump tanto en el puerto como protocolo
tcpdump -w trace.cap -p -n -s 0 "udp" tcpdump -w trace.cap -p -n -s 0 port 4569
* -p : no iniciar en modo promiscuo y solo los paquetes de asterisk in/out seran capturados
* -n : no utilizar la resolución de DNS para evitarnos nombres innecesarios en nuestra traza
* -s 0 : aqui capturaremos todo el contenido de los paquetes tanto SIP como RTP debido a que nos interesa todo el trafico.
0 significa la información completa del frame.
* -w : con esto mandaremos a escribir la información a un archivo especifico
* 4569 es el puerto estandard en el cual se conecta asterisk via IAX2
ahora el archivo resultante lo podremos analizar mucho mejor con el Wireshark y sus plugs de telefonia