Un ejemplo del funcionamiento de una conexión entre dos equipos mediante NAPT (Network Address and Port Translation). Indicamos qué es el NAPT, las ventajas e inconvenientes del uso del NAT, así como el nuevo NAT444.

NAPT Network Address and Port Translation

Con el objeto de evitar el problema de los NAT dinámicos (asignación de direcciones completas a sistemas privados) se diseñó la técnica Network Address and Port Translation (NAPT), también conocida en entornos Linux por masquerading.

Consiste en compartir las direcciones públicas entre los distintos sistemas privados mediante la asignación individual de sus puertos. Cada vez que se detecta una comunicación saliente, se le asigna un puerto libre de una de las direcciones públicas, en vez de asignarle la dirección completa. De esta forma, cada dirección pública es capaz de soportar del orden de 65536 (=216) conexiones TCP o el mismo número de flujos UDP.

Esta modalidad de NAT es la más utilizada en la actualidad, por su eficiencia en la utilización de las direcciones públicas. Úti| cuando sólo se dispone de una dirección pública. Cada conexión utiliza un puerto distinto de la dirección pública.

De esta forma se pueden multiplexar varias conexiones utilizando una única dirección.

Es unidireccional (no permite conexiones entrantes).

Ejemplo de funcionamiento de NAPT

Vamos a mostrar un ejemplo básico que representa la forma simplificada del funcionamiento de un NAT cuando un sistema privado A decide establecer una conexión con un sistema público S.

Ejemplo de funcionamiento de NAPT

Para entender el funcionamiento de un NAT es necesario saber que el algoritmo de traducción se realiza por completo dentro del sistema NAT, sin intervención de los sistemas origen y destino de la comunicación. Esto es, los sistemas A y S no son conscientes de la traducción:

  • A cree que se está comunicando directamente con el sistema S, sin ser consciente de que su dirección es privada.
  • S cree que se está comunicando con un sistema cuya dirección es 192.1.1.1, sin ser consciente de que el destinatario final es un sistema en una red privada.

Cuando A genera el primer datagrama de la comunicación, que típicamente transportará el segmento SYN de establecimiento de una conexión TCP, incluirá en él la dirección y puerto destino de la aplicación en S (138.4.3.130:80) y como dirección y puerto origen su dirección privada (10.0.0.1) y un puerto libre (1234).

Ejemplo de funcionamiento de NAPT

Cuando el primer datagrama llega al NAT, éste consultará sus tablas para ver si existe una entrada en ellas para esta comunicación. Al no existir:

  • Buscará un puerto libre de la dirección pública (5678) y creará una nueva entrada que asocie ese puerto a la dirección privada y puerto origen de la comunicación.
  • Traducirá el paquete saliente, sustituyendo la dirección origen por la dirección pública (192.1.1.1) y el puerto origen por el puerto asignado (5678).
  • Enviará el datagrama hacia Internet.

Cuando el datagrama llegue al destino (S), éste contestará a la solicitud de conexión enviando un datagrama hacia la dirección y puerto destino origen del datagrama recibido. Este datagrama será encaminado por la red pública hacia el interfaz público del NAT.

Ejemplo de funcionamiento de NAPT

Al llegar el datagrama respuesta de S al NAT, éste consultará sus tablas de NAT para buscar la entrada correspondiente a esa comunicación. Una vez localizada la entrada correspondiente al puerto 5678, traducirá el datagrama, sustituyendo la dirección y puerto destino por la que indica la entrada en la tabla (10.0.0.1:80).

Si no existiese ninguna entrada en la tabla asociada al puerto 5678, el datagrama entrante se descartaría.

En caso de que el NAT tuviese asignadas varias direcciones públicas, existiría una tabla NAT por cada una de las direcciones públicas (o una columna adicional en la tabla que indicase a que dirección pública corresponde la entrada).

Ejemplo de tablas NAPT

Las tablas NAPT incluyen campos adicionales como la dirección pública y puerto de destino.

El NAT permite establecer todas las combinaciones posibles:

  • Múltiples conexiones desde un sistema privado a un servidor público.
  • Múltiples conexiones desde un sistema privado a múltiples servidores públicos.
  • Múltiples conexiones desde distintos sistemas privados a un mismo servidor público.
Ejemplo de tablas NAPT

Las entradas en las tablas tienen asignado un temporizador para borrarlas en caso de que caduquen.

Existen dos tablas NAT en un sistema:

  • Una tabla para TCP.
  • Otra tabla para UDP.

NAT444

Los NAT descritos anteriormente necesitan tener asignada, al menos, una dirección pública. Debido a la escasez de direcciones IPv4, en la actualidad los operadores de Internet (ISP) no tienen direcciones suficientes para asignar una dirección pública a cada cliente.

Por ello, se diseñó un nuevo tipo de NAT, el NAT444, que realiza una doble traducción:

  • Al router del cliente se le asigna como dirección externa una dirección privada del rango de direcciones asignado a la red privada de acceso del operador.
  • A la salida de la red de acceso del operador es donde se localiza el sistema CGN (Carrier-Grade NAT o CG-NAT, también conocido como NAT masivo o NAT a gran escala, Large-Scale NAT o LSN), que es quien tiene asignadas las direcciones IP públicas y que realiza la segunda traducción de los datagramas.
  • En este caso, cada dirección pública se comparte entre varios routers de redes de clientes.

Para el funcionamiento de los CGN fue necesario definir un nuevo rango de direcciones privadas distinto del de los asignados en la RFC 1918: 100.64.0.0/10 (definido en la RFC 6598).

NAT444

Ventajas e inconvenientes del uso de NAT

Algunas de las ventajas del uso de NAT son:

  • Compartición de direcciones de Internet.
  • Coexistencia de planes de numeración privados/públicos.
  • Seguridad, NAT es unidireccional.

Los sistemas NAT han contribuido enormemente a que la red de Internet haya podido crecer todos estos años, hasta alcanzar un tamaño que está por encima de lo que su capacidad de direccionamiento permite.

Algunos de los inconvenientes del uso de NAT son:

  • Unidireccional: la accesibilidad desde el exterior es complicada, sólo es posible con NAT bidireccional.
  • Reducción de prestaciones. El procesado de datagramas es costoso.
  • Coste de gestión y dificultad de diagnóstico de problemas.
  • Rompe el principio de diseño extremo-a-extremo de Internet.
  • Incompatibilidad con IPSec.
  • Costoso para aplicaciones con sesiones inter-dependientes (H.323).

Por todo ello, la solución a largo plazo a los problemas de escasez de direcciones es el uso e implantación del protocolo IPv6, que proporciona direcciones de gran tamaño (128 bits) que eliminan por completo la necesidad de utilizar NAT.