Protocolo SIP y problemas NAT

Descifrar NAT es una de las problemáticas  que conlleva las comunicaciones SIP. Con una buena red de internet, todos los dispositivos podrían comunicarse de principio a fin, sin ninguna intermediación, exceptuando los routers. Esto implica que cada dispositivo tiene una dirección IP pública, esto es, una identidad pública en Internet.

Actualmente muchos dispositivos conectados a través de Internet están utilizando una función NAT, que tiene lugar en el router. La función detiene Internet para iniciar la conexión con el dispositivo (lo cual es malo para la telefonía IP u otras formas de comunicación de igual a igual) pero también protege a los usuarios de ataques maliciosos. Con NAT, uno también puede conectar varios dispositivos a internet utilizando sólo una IP pública. Además, NAT tiene sus ventajas e inconvenientes al mismo tiempo.

¿Por qué el protocolo SIP no funciona con NAT por defecto?

La razón es que muchos de los parámetros de comunicación en SIP se transmiten con un mensaje. Estos parámetros pueden ser la IP y números de los puertos utilizados para señalización y otros medios.

Un protocolo SIP no se sabe cómo podrá verse desde Internet si sólo se conocen su dirección IP y los puertos donde corre la aplicación SIP. Una vez que empieza la comunicación con Internet, el dispositivo NAT traduce la combinación privada IP:Puerto del dispositivo SIP conectado en la interfaz NAT privada para un mapeo temporal de un IP:Puerto público en la interfaz conectada a Internet.

Cómo arreglar problemas NAT

La respuesta depende del tipo de NAT que tengas. Hay varios tipos (según el RFC):

Cono completo: NAT mapeará la dirección IP y puerto interno a una dirección y puerto público diferentes. Además, cualquier servidor externo puede enviar un paquete al servidor interno (enviándolo a la dirección del mapeado externo).

 

Cono restringido: En este caso de la conexión restringida, la IP y puerto externos de NAT son abiertos cuando el host de la red privada quiere comunicarse con una dirección IP específica fuera de su red. El NAT bloqueará todo tráfico que no venga de esa dirección IP específica.

 

Cono restringido de puertos: En una conexión restringida por puerto NAT bloqueará todo el tráfico a menos que el host de la red privada haya enviado previamente tráfico a una IP y puerto especifico, entonces solo en ese caso ésa IP:puerto tendrán acceso a la red privada.

 

Simétrico: En este caso la traducción de dirección IP privada a dirección IP pública depende de la dirección IP de destino donde se quiere enviar el tráfico.

Para los 3 primeros tipos de NAT puedes utilizar un servidor STUN. STUN es un protocolo de red del tipo cliente-servidor. Un teléfono IP o un paquete de software quizá incluya un cliente STUN, el cual enviará una solicitud a un servidor STUN. Luego, el servidor devuelve al cliente la IP pública del router y el puerto que abrió NAT que permite al tráfico que entra volver a la red. La respuesta también permite al cliente determinar qué tipo de NAT está en uso de entre los diferentes tipos, gestionando los paquetes UDP entrantes de forma diferenciada.

El servidor STUN no funcionará con NAT simétrico (también conocido como NAT bidireccional) el cual se encuentra normalmente en las redes de empresas grandes. Con NAT simétrico, la dirección IP del servidor STUN es diferente de la del punto de destino y además, el mapeado NAT del servidor también sería diferente al mapeado que el destino final utilizaría para enviar paquetes a través del cliente.

Una vez que un cliente ha descubierto sus direcciones externas, puede decírselas a sus iguales. Si las NAT son de cono completo, cualquiera de ellos puede iniciar comunicación. Si son de cono restringido o restringido de puertos, ambos lados deben empezar a transmitir juntos. Los protocolos SIP utilizan paquetes UDP para transmitir señales de video, audio o texto por Internet. Desafortunadamente, como los dos extremos están normalmente detrás de NAT, la conexión no puede ser configurada de la manera tradicional. Aquí es donde entraría el servidor STUN. Éste, contacta con el puerto UDP 3478, sin embargo el servidor da a entender a los clientes que tienen que hacer pruebas con las diferentes IP´s  y también con el número del puerto (Los servidores STUN tienen dos direcciones IP). El RFC indica que este puerto y la IP son arbitrarios.

Otras opciones

  • Eliminar NAT completamente de tu configuración de red, creando una red VPN entre tus teléfonos y tu servidor.
  • Otra solución sería forzar tus dispositivos a acortar el transcurso de  tiempo entre los paquetes REGISTRAR y OPCIONES enviados al servidor. Haciendo esto, los servidores siempre sabrán donde está tu dispositivo. Desde que la mayoría de dispositivos dejan caer las conexiones NAT después de 120 segundos, debes configurar el TIEMPO LIMITE DE REGISTRO o el TIEMPO MAXIMO DE REGISTRO (el nombre difiere dependiendo del fabricante) a menos de 120 segundos. Para la mayoría de los dispositivos, 60 segundos es suficiente. Sin embargo, en algunos casos debes ponerlo en menos de 30 segundos.
  • Tienes problemas NAT cuando puedes llamar pero no recibes las llamadas, a no ser que acabaras de hacer una llamada o registrado el dispositivo. En Asterisk, el estado de tu extensión se muestra como DESCONOCIDO.

 

[contact-form-7 id=”3259″ title=”Distribución”]