Esta misma semana he tenido un problema “domestico” con el NAT, ya que mi router no abría correctamente los puestos (gracias Elio por la ayuda
) y eso me incitó a escribir sobre el tema.
Mi idea es escibir 2 o 3 posts sobre el NAT y sus posibles soluciones, ya que es el eterno problema de las conexiones SIP. No obstante, como esto será largo, si estas buscando una respuesta rápida y en una sola línea que solucione todos tus problemas de NAT aquí la tienes:
No utilices SIP, usa IAX y no tendrás problemas de NAT.
Para los demás, podéis seguir leyendo
PARTE 1: Introducción al NAT
En esta primera parte trataré de explicar lo mejor posible qué es el NAT (no todo el mundo lo tiene claro), qué tipos de NAT existen, y porqué esto resulta un problema para las conexiones SIP en Asterisk.
¿Qué es el NAT?
Las siglas NAT significan Network Address Translation, vamos, Traducción de Direcciones de Red. Básicamente consiste en cambiar las direcciones IP y puertos cuando la conexión atraviesa un router o un firewall.
“Supuestamente” para el 2010 se acabarán las IPs versión 4, por eso no podemos tener cada uno una IP pública para todos nuestros ordenadores. Al no poder tener una IP pública por cada PC, algo hay que usar para poder realizar la navegación: NAT. Con el NAT, solo tenemos una IP púlica, y cada vez que mandamos un paquete al exterior el router se encarga de cambiar la dirección de origen, cambiando la IP interna del host de la red por la IP externa (la única que tenemos). De la misma manera, si deseamos ofrecer algún servicio al exterior, como p.e. un servidor web, tendremos que mapear un puerto a una IP interna.
¿Mapear?
Cuando estamos detrás de un router con NAT, da igual que tengamos una red con 1000 hosts, ya que lo único visible desde Internet será el router. Entonces, si queremos ofrecer algún servicio, como una web, deberemos añadir una nueva entrada en la tabla NAT de nuestro router, indicando la dirección IP destino y el puerto. Por ejemplo, si abrimos el puerto 80 en nuestro router y lo dirigimos a la máquina 192.168.1.100, cuando alguien haga una petición al puerto 80 desde el exterior (es decir, a la dirección externa), la petición será modificada, cambiando el destino e indicando que es la máquina 192.168.1.100
Tipos de NAT existentes
No todos los NAT son iguales, hay ciertas variaciones en cuanto a su comportamiento, que veremos a continuación:
Full cone NAT: Todas las peticiones de la misma IP y puerto internas son mapeadas a la misma IP y puerto externas. Una máquina externa puede mandar un paquete a una interna haciéndolo a la dirección externa mapeada.

Restricted cone NAT: Todas las peticiones de la misma IP y puerto internas son mapeadas a la misma IP y puerto externas. A diferencia del Full cone NAT, una máquina externa SOLO puede mandar un paquete a una máquina interna si esta ya le ha mandado un paquete primero.

Port restricted cone NAT: es como el Restricted cone NAT, pero la restricción afecta también a los números de puerto. Una máquina externa solo podrá mandar un paquete a un puerto de una máquina interna si esta ya lo ha hecho antes.

NAT simétrico: Todas las peticiones de la misma dirección IP interna y puerto a un destino específico son mapeados a una IP externa y puerto único. Si la misma IP interna y puerto intenta mandar un paquete a otra IP distinta, se utilizará un mapeo distinto. Solo un host que ha YA ha recibido un paquete puede mandar otro de vuelta.

NOTA: Actualmente la clasificación de tipos de NAT no es tan estricta ya que se mezclan tipos, pero lo he comentado por tener una base teórica en el asunto xD.
Los problemas del NAT y la VoIP
En este punto vamos a centrarnos en SIP. El protocolo SIP solo lleva la señalización de la llamada, mientras que el tráfico de audio (RTP) se intenta llevar a cabo de extremo a extremo. El problema viene por que el puerto al que se manda el audio es aleatorio. El router es capaz de dirigir correctamente la señalización, pero es incapaz de saber si el tráfico RTP es de esa llamada, y no sabe a donde mandarlo (debería mandárselo al mismo que la señalización). Como consecuencia, el audio no fluye correctamente entre los 2 interlocutores.
En un principio, todo parece ir bien, se inicia la llamada, se escucha el tono, y suena el teléfono de destino. El problema viene al descolgar, es decir, cuando el audio se establece entre los participantes de la conversación. En este punto, pueden pasar 2 cosas: que el llamante lo escuche a su interlocutor (el famoso “one way audio”) o que no haya audio en absoluto.
La solución a este tipo de problemas no suele ser fácil, ya que depende de varios factores: quién sufre NAT, Asterisk o el usuario,… ambos…
En la parte 2…
Describiremos los distintos escenarios y sus posibles soluciones. Estad atentos.
Fuentes:
http://en.wikipedia.org/wiki/Network_address_translation
http://www.voip-info.org/wiki-Asterisk+SIP+NAT+solutions
http://www.voip-info.org/wiki/view/NAT+and+VOIP
PD: Si hay algún dato erróneo me encantaría que me avisarais, ya que uno es humano y no esta en poder de la sabiduría mundial…














Pingback: “Atravesando” el NAT con OpenSIPS 1.6 y MediaProxy | Mi Brain-Training Personal