TCP Keep Alive y Asterisk SIP TLS

Aunque en la mayoría de los casos para la señalización SIP se utiliza el protocolo de transporte UDP, no estaría mal y es muy aconsejado utilizar el protocolo TLS que permite el cifrado de la señalización SIP y se basa en el protocolo de transporte TCP, que es un protocolo orientado a la conexión, es decir que antes de enviar datos hay que establecer una conexión. En el caso que se opte por TLS, para que las comunicaciones funcionen correctamente, hay que solucionar dos tipos de problemas:

  • mantener abierta la conexión en el caso de cortafuegos que trabajan de manera Stateful
  • saber si una extensión/troncal se encuentra o no activa

En el primer caso cuando se crea una conexión, el cortafuegos Stateful activa una serie de temporizadores que mantienen abierta la conexión por el tiempo definido por los mismos. Si pasado ese tiempo, no hubo trafico de datos, la conexión se cierra.

En el segundo caso, una extensión se registra a la PBX pero no sigue enviando datos para mantener la conexión abierta pues cuando llega una llamada, la PBX intenta utilizar la conexión del registro pero no logra alcanzar la extensión porque esa conexión ha sido cerrada o ya no existe. La llamada fallará.

Para solucionar estos dos tipos de problemas hay distintas opciones:

  • mantener abierta la conexión utilizando solicitudes SIP de tipo OPTIONS; en el caso de TLS ambos mensajes tienen que ser cifrados (solicitud y respuesta) y se debe activar toda la pila SIP para crearlos y procesarlos; esto aumenta el numero de recursos de sistema que se utilizarán
  • enviar solicitud SIP de tipo REGISTER con un tiempo de expiración muy bajo de forma que se envíen con mucha frecuencia evitando que la conexión se cierre
  • utilizar la opción keep_alive_interval en la sección global de la configuración del archivo pjsip.conf. En este caso Asterisk, cada N segundos, indicados en el parámetro, enviará un paquete de 2 BYTE a la extensión/troncal para mantener abierta la conexión. Las desventajas son que el paquete tendrá que ser cifrado y los desarrolladores de Asterisk tendrán que mantener el código siempre al día
  • la pila SIP PJSIP que utiliza Asterisk tiene su proprio sistema de Keep Alive que pero es casi igual al implementado por Asterisk pues no habría ningún tipo de ventaja en utilizarlo.

Tomando en cuenta estas consideraciones, los desarrolladores de Asterisk han optado por utilizar el Keep Alive que viene con el protocolo TCP; las ventajas respecto a las soluciones presentadas hasta el momento son:

  • sistema completamente integrado en el Kernel de Linux
  • no hay código que mantener
  • nunca se van a presentar conflictos de implementación
  • no se necesita cifrar los paquetes enviados
  • es posible integrarlo en cualquier tipo de programa
  • El paquete enviado, si la conexión sigue abierta, recibirá SIEMPRE un paquete de respuesta

Muy pronto tendremos esta implementación en las próximas versiones de Asterisk.