HOWTO: Solucionando problemas de NAT en Asterisk (Parte 1)

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.

709px-full_cone_natsvg.png

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.

709px-restricted_cone_natsvg.png

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.

709px-port_restricted_cone_natsvg.png

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.

709px-symmetric_natsvg.png

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… 😉

16 thoughts on “HOWTO: Solucionando problemas de NAT en Asterisk (Parte 1)

  1. uta justo necesito esa parte
    stoy en la situación de que milagrosamente agarre la wifi de mi vecino
    entonces de hay ago pruebas con el nateo 😛 configurando el sip.conf con eternal ip y local algo asi en general y además con un dns de estos que se adecuan a los cambios de ip de mi router 😛
    e podido conectarme de esta red a mi red 😛
    bueno el problema que se me presenta es que no se escucha nadita
    solo se escucha el ring ring de mi sjphone y al revés el ring ring de mi celular 😛 y despues de eso contesto y se escucha un sexi silencio 😛
    bueno pucha si puedes darme una ayudita nose seria genial
    o una fecha para saber cuando tara lista la 2da parte 😀 seria genial

    saludos

  2. Holas, none esta la parte 2 me dejaste picao, jajjaja, me estaba entusiasmando con la lectura y no esta la parte 2, aaaaaaaaaaa, hasta aca vamos de pelicula muy claro y bien entendido pero la dossss please. Saludos y gracias por lo compartido.

  3. se pasaron la segunda parte!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  4. Por favor necesito la segunda parte o que alguien me ayude. Eso es exactamente lo que me esta pasando con el tema del sonido, llama pero no escucho la voz de ninguna de las dos partes.
    Por favor, ayuda…
    Muchas gracias.
    saludos.

  5. Sin ninguna novedad de la parte 2?
    Hace tiempo que estoy sufriendo con problemas de configuracion en mi central telefonica y me vendria excelente saber las formas de solucionar todo esto.

    Ojala te inspires y escribas la segunda parte!

    Saludos!!!!!

    PD: excelente la primer parte

  6. Man, sos groso, por primera vez en la historia que uso Asterisk entendí el maldito NAT, ahora vendría bien la segunda parte, por fa.

    Saludos.-

  7. Es lo que estaba buscando y me quedo super claro lo del NAT, ahora espero con muchas ansias la segunda parte, voy a mirar dentro de este blog a ver si la encuentro. espero tener suerte!

    PD: Felicitaciones la explicacion es MUY CLARA

  8. mmmmmmmmm, a veces se habla mucho y no dice nada, la parte 2 seria tan solo abrir los puertos correspondientes en el router, y se soluciona configurando en sip.conf externip y
    el localnet, solo eso, saludos y gracias.

  9. la segunda parte como que nunca llego y ya ni se acordaran los que participaron en este foro tendrán hijos y se habrán retirado del mundo de las redes porque la segunda parte nunca llego 😉

  10. simplemente hay que agradecer el tiempo que se tomo en escribir y explicar varios factores no hay que ser negativos hay que seguir buscando en la web

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *