Dentro del ecosistema VoIP Asterisk, prácticamente todo el mundo ha configurado en algún momento determinado el famoso parámetro qualify del fichero de configuración sip.conf, pero ¿sabemos realmente que función realiza? ¿Que ocurre internamente cuando lo activamos o desactivamos?. En el presente tema, ahondaremos en la materia e intentaremos resolver las cuestiones anteriores.
Parámetro Qualify, ¿Qué es y para que sirve?
La administración del mismo se realiza en el fichero de configuración sip.conf
Formato: qualify=xxx|no|yes
Podemos configurarlo como propósito general y que afecte a todos los peers del sistema, incluyéndolo en el contexto [general].
Si por el contrario queremos ser mas restrictivos y que únicamente afecte a uno/s determinados Peers VoIP, podemos incluirlo dentro del contexto/s del peer en cuestión.
Véase el siguiente ejemplo:
[agente01]
type=friend
host=dynamic
secret=xxx
qualify=yes
disallow=all
allow=ulaw
allow=gsm
Recordad, que en caso de ser incluido en el contexto [general] y del propio [peer], siempre será mas restrictivo la configuración realizada del peer.
- Con qualify=yes
Asterisk monitoriza el estado del peer o peers periódicamente (por defecto cada 60 segundos).
¿Cómo lo hace?
Asterisk envía peticiones SIP OPTIONS regularmente cada 60 segundos hacia el peer o peers y espera una respuesta del mismo. Podría asemejarse al tradicional PING que todo el mundo ha usado alguna vez.
Veamos un ejemplo, del intercambio de mensajes entre un UA y un servidor VoIP Asterisk.
<------------->
Reliably Transmitting (NAT) to 192.168.1.11:5061:
OPTIONS sip:agente01@192.168.1.11:5061;rinstance=e57bc28bae3c3965;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.1.30:5060;branch=z9hG4bK38b8da91;rport
Max-Forwards: 70
From: "asterisk" <sip:asterisk@192.168.1.30>;tag=as577edbc1
To: <sip:agente01@192.168.1.11:5061;rinstance=e57bc28bae3c3965;transport=UDP>
Contact: <sip:asterisk@192.168.1.30:5060>
Call-ID: 751d2e582dd524841d4fb63f42538311@192.168.1.30:5060
CSeq: 102 OPTIONS
User-Agent: Asterisk PBX 1.8.11-cert2
Date: Sat, 17 Nov 2012 17:43:53 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Content-Length: 0
<--- SIP read from UDP:192.168.1.11:5061 --->
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.30:5060;branch=z9hG4bK38b8da91;rport=5060
Contact: <sip:192.168.1.11:5061>
To: <sip:agente01@192.168.1.11:5061;rinstance=e57bc28bae3c3965;transport=UDP>;tag=3f5c2106
From: "asterisk"<sip:asterisk@192.168.1.30>;tag=as577edbc1
Call-ID: 751d2e582dd524841d4fb63f42538311@192.168.1.30:5060
CSeq: 102 OPTIONS
Accept: application/sdp, application/sdp
Accept-Language: en
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Supported: replaces, norefersub, extended-refer, X-cisco-serviceuri
User-Agent: Zoiper rev.11137
Allow-Events: presence, kpml
Content-Length: 0
Esta petición SIP OPTIONS es el método usado para preguntar a un UA u otro servidor sobre sus capacidades y actual disponibilidad. La respuesta a la misma, evidencia el estado del UA y además lista en el campo Allow sus capacidades o métodos soportados.
Es importante recalcar, que por defecto Asterisk espera 2000ms (2s) para dar por buena una respuesta.
Gracias a esta respuesta, Asterisk puede determinar dos datos importantes:
- Estado.
- Latencia o tiempo de retardo del peer VoIP.
En este caso:
- Con qualify=no
Asterisk deja de monitorizar el estado del peer o peers VoIP y de esta forma omite las peticiones SIP OPTIONS hacia sus destinos.
En este caso:
- Con qualify=xxx
Idem que qualify=yes, aunque en este caso seteamos la variable con el tiempo máximo en milisegundos que estamos dispuestos a esperar la respuesta. Recordad que por defecto esta opción tiene un valor de 2000ms.
Después de esta explicación, es hora de hacerse la siguiente pregunta:
¿Sabemos realmente que función realiza?
Básicamente dos:
- Evidenciar problemas en la red o sistemas.
- Asterisk descartará lanzar llamadas a dispositivos VoIP que están off-line.
Buenas practicas VoIP
Personalmente creo que en la utilidad de qualify y por defecto lo activaría en cualquier sistema Asterisk, pero veo un problema, las redes con altas latencias o retardos, por ejemplo conexiones VPN entre diferentes sedes por Internet con anchos de banda ajustados.
Para estos casos, considero que tenemos dos opciones, desactivarlo para evitar el trasiego de trafico SIP “inutil” o afinar de alguna manera qualify para que el impacto sea el menor posible.
Si queremos bajar el trafico SIP, hay un parámetro de configuración a nivel de sip.conf muy útil, qualifyfreq (disponible a partir de la versión 1.6 de Asterisk). Con este parámetro decidimos cada qué frecuencia queremos que Asterisk envíe las peticiones SIP OPTIONS. Para que os hagáis una idea, si decimos iniciarlo con un valor de 120 segundos, estamos reduciendo a la mitad el número de peticiones SIP OPTIONS a lo largo de un día (60 segundos es el valor por defecto).
Formato: qualifyfreq=xxx (sec)
Una forma de evitar los indeseables UNREACHABLE de los peers en redes con problemas de latencia, sería aumentar el tiempo máximo de respuesta establecido por qualify, es decir, dar un valor por encima de los 2000 ms que se establece por defecto.
Seria interesante escuchar más opiniones e ideas al respecto de este tema.