martes, 10 de enero de 2012

Protocolo IP de traducción de direcciones de red (NAT)

Les dije que iba a ser semana de redes :) .... La última entrega de Selecciones de la Guía fue en octubre 24, es decir mas de dos meses sin dar golpe al respecto, así que este es el regreso al trabajo. La traducción de direcciones IP NAT era el capítulo que correspondía en el orden y está entre los temas de mayor interés en la parte del protocolo IP, de manera que es muy buen regreso. El original inicia aquí, el capítulo lo traemos dividido en dos partes (es que es bien largo), y esta va de primera. La segunda vendrá pronto (prometido). Es todo, a lo que vinimos y provecho!


Para ayudar a prolongar la vida útil del esquema de direccionamiento IPv4, mientras que el nuevo protocolo IPv6 se desarrolla e implementa, otras tecnologías han sido desarrolladas. De las más importantes de estas tecnologías es la traducción de direcciones de red IP. Esta tecnología permite que un pequeño número de direcciones IP públicas sea compartido por un gran número de hosts con direcciones privadas. Este pequeño "truco" permite a la Internet global albergar muchos mas hosts de lo que su espacio de direcciones le permite en realidad. Al mismo tiempo, proporciona algunos beneficios relativos a la seguridad dado que hace más difícil de alcanzar directamente los hosts desde máquinas externas en la Internet pública.

En esta sección proporciona una descripción de los conceptos detrás de NAT IP y una explicación del funcionamiento de sus diferentes tipos. Empiezo con una revisión general del protocolo y la discusión de sus ventajas y desventajas. Describo la terminología de direcciones que ud necesita conocer para entender cómo funciona NAT y las diferencias entre las diversas técnicas de traducción. Les explico la forma en que se realizan las asignaciones de direcciones y la diferencia entre la asignación de direcciones estáticas y dinámicas.

Entonces explico el funcionamiento de los cuatro principales tipos de NAT:
  1. NAT Unidireccionales (también llamada saliente o NAT tradicional) 
  2. NAT Bidireccional (de entrada o de "doble vía") 
  3. NAT sobrecagada o "basada en puertos" (también llamada NAPT o PAT) 
  4. NAT "Superpuesta" (también llamada "dos veces NAT").
Concluyo algo mas de información sobre los problemas de compatibilidad relacionados con NAT.

Por cierto, la mayoría de la gente la llama simplemente tecnología de "traducción de direcciones de red" sin el "IP". Sin embargo, esto me suena más bien genérico, y dado que la versión que se debate aquí es específica de IP, prefiero dejar claro que esta es una característica del protocolo IP. Dicho esto, para simplificar, a menudo solo diré "NAT" también, ya que es más corto. También debo señalar que hay muy pocas personas que no consideran NAT como un "protocolo" en el sentido estricto de la palabra.

Nota: NAT se desarrolló en gran parte para lidiar con el problema de la escasez de direcciones en IPv4, por lo que se asocia y se utiliza con IPv4. Es posible implementar una versión compatible con IPv6 de NAT, pero la traducción de direcciones no es tan importante en IPv6, el cual fue diseñado para dar a cada dispositivo TCP / IP su propia dirección única. Por esta razón me enfoco en esta sección sobre el uso de NAT con IPv4.

La decisión de dotar las direcciones IP de sólo 32 bits de largo, como parte del diseño original del protocolo de Internet llevó a un serio problema cuando el Internet se disparó en popularidad más allá de las expectativas de todos: el agotamiento del espacio de direcciones. El direccionamiento sin clases (classless) ayudó a hacer un mejor uso del espacio de direcciones, e IPv6 se creó para garantizar que nunca se quedará sin direcciones de nuevo. Sin embargo, classless sólo ha disminuido el consumo de espacio de direcciones en IPv4, e IPv6 ha tardado años en desarrollarse y requerirá aun mas años para implementarse.

La escasez de direcciones IP prometía volverse crítica a finales de la década de 1990 a menos que se diseñara algún tipo de solución hasta que se completara la transición a IPv6. Los ingenieros creativos de la Internet Engineering Task Force (IETF) estuvieron a la altura del desafío. Ellos crearon una técnica que no sólo prevenía el agotamiento del espacio de direcciones, sino que también podría utilizarse para abordar otras dos cuestiones cada vez mas críticas a finales de la década de 1990:

  • El aumento de costos de las direcciones IP: Como cualquier otro recurso que escasea, se vuelve más caro. Incluso cuando hay direcciones IP disponibles, cuestan más conseguir un mayor número de un proveedor de servicio que una cantidad mas pequeña. Era conveniente para su conservación, no sólo por el bien de la Internet como un todo, sino también para ahorrar dinero. 
  • La creciente preocupación por la seguridad: Como el uso de Internet aumentó en la década de 1990, más "chicos malos" empezaron a utilizar la red también. Mientras mas máquinas de una empresa hay conectadas directamente a Internet, mayor es su riesgo de exposición a riesgos de seguridad.

Conectividad indirecta a Internet.

Una solución a los problemas de espacio de direcciones IP y la seguridad fue la creación de un sistema en el que la red de las empresas no estaba conectado directa sino indirectamente a la Internet. La creación de una red de esta manera es posible debido a varias características importantes de cómo la mayoría de las organizaciones utilizan la Internet:
  • La mayoría de los hosts son dispositivos cliente: La Internet está basada en un modelo cliente / servidor, y la mayoría de los hosts son clientes. Por lo general no es necesario acceso público a los dispositivos cliente. Por ejemplo, al utilizar su PC para acceder a la World Wide Web, ud emite solicitudes a los servidores y estos responderán en consecuencia, pero los servidores no tienen ninguna razón para tratar de iniciar el contacto con usted. Por definición la mayoría de la correspondencia es iniciada por los clientes y no por los servidores. 
  • Pocos hosts acceden a la Internet al mismo tiempo: Cuando se tiene un gran número de hosts en la misma red conectada a Internet, en un momento dado por lo general sólo un pequeño número de ellos están tratando de acceder a la red. No es necesario suponer que todos ellos necesitan tener acceso a los servidores a la vez. Incluso mientras navegan activamente por la Web, se hacen pausas de varios segundos de vez en cuando para leer la información, usted solo accede al servidor Web durante el tiempo que tarda en realizar una transacción. 
  • Las comunicaciones en Internet son routeadas: Las comunicaciones entre la red de una organización e Internet pasan a través de un router, que actúa como un "punto de control" de los flujos de tráfico.
La mejor manera de explicar por qué son importantes estos atributos es usando una analogía de cómo los teléfonos se utilizan dentro de una organización, ya que muchos de los mismos atributos que se aplican allí. La mayoría de los teléfonos en una organización típica se utilizan para permitir que los empleados hagan llamadas telefónicas (es decir salientes ndt). Por lo general, no es necesario tener alguna forma de llamar a los empleados directamente, sino un sistema o una persona que pueda manejar todas las llamadas entrantes. Solo unos pocos empleados están siempre haciendo una llamada al "mundo exterior" en un momento dado. Y todas las llamadas se enrutan a través de un punto central que gestiona el sistema telefónico.

Por estas razones, para ahorrar dinero, las organizaciones no establecen líneas telefónicas públicas por separado para escritorio de cada empleado. En su lugar, se establece un sistema telefónico en el que cada empleado recibe una extensión, que es básicamente un número de teléfono local válido sólo dentro de la organización. Un pequeño número de líneas externas está disponible en un pool para compartirlas entre los empleados, y el sistema telefónico hace coincidir las extensiones internas con las líneas exteriores según sea necesario. Un sistema de correo de voz y / o un recepcionista humano maneja el enrutamiento de llamadas en la organización.
(Sí, algunas empresas tienen una relación directa entre los números de las extensiones y los números reales de teléfono. No cree problemas.

Descripción general de la traducción de direcciones IP de red (NAT)

Una técnica muy similar se puede utilizar para conectar los equipos de una organización a Internet. En redes TCP / IP, esta tecnología se formalizó por primera vez en el RFC 1631, el traductor de direcciones de red IP (NAT), aprobada en mayo de 1994. La palabra "traductor" se refiere al dispositivo (router) que implementa NAT. Más comúnmente, la tecnología en su conjunto se denomina traducción de direcciones IP de red (IP NAT o NAT).

Nota: El estado del documento de RFC 1631 es "informativo". Esto significa que, técnicamente, IP NAT no es un estándar oficial de Internet.

Una implementación básica de NAT consiste en la creación de la red interna de una organización empleando uno de los rangos de direccionamiento privado reservados para redes IP locales. Una o más direcciones públicas (Internet) se asignan también a la organización, así, y uno o más routers con capacidades NAT se instala entre la red local y la Internet pública. Las direcciones IP públicas son como "líneas externas" en el sistema telefónico y las direcciones privadas son como "las extensiones internas".

El router NAT desempeña el papel de ordenador del sistema telefónico y el recepcionista. Este relaciona las extensiones internas con las líneas externas, según sea necesario, y también se ocupa de las "llamadas entrantes" cuando sea necesario. Para ello, no solo se ocupa del enrutamiento de los datagramas IP, sino también de su modificación según sea necesario, traduciendo las direcciones IP en los datagramas de la red privada en direcciones públicas para su transmisión en Internet, y viceversa.

Con el tiempo, se han creado nuevas versiones de NAT para resolver otros problemas o proporcionar capacidades adicionales. Port-Based (basada en puertos ndt) NAT permite compartir aun mas hosts en un número limitado de direcciones IP, al permitir que dos o más dispositivos compartan una dirección IP a la vez. El llamado "twice-NAT" (dos veces NAT) ayuda con la implementación de redes privadas virtuales (VPN) mediante la traducción de ambas direcciones, origen y destino tanto de los datagramas entrantes como de los salientes.


Concepto clave: La traducción de direcciones IP de red (IP NAT o NAT) es una técnica que permite a una organización establecer una red con direcciones privadas, sin dejar de ser capaz de comunicarse en la Internet pública. Un router con capacidad NAT traduce direcciones privadas a públicas y viceversa, según sea necesario. Esto permite que un pequeño número de direcciones IP públicas sean compartidas entre un gran número de dispositivos, y ofrece otros beneficios (pero también tiene algunos inconvenientes).

Ventajas de NAT

NAT es una de las tecnologías que tiene una larga lista de ventajas y desventajas. Esto significa que puede ser muy útil en una variedad de escenarios, pero también problemática en otros. Las principales ventajas son:

  • Compartir direcciones IP públicas: Un gran número de máquinas pueden compartir un pequeño número de direcciones IP públicas. Esto ahorra dinero y también conserva el espacio de direcciones IP. 
  • Expansión mas fácil: Dado que los dispositivos de la red local emplean direcciones privadas y no se necesita una dirección IP pública para cada uno de ellos, es fácil agregar nuevos clientes a la red local. 
  • Un mayor control local: Los administradores obtienen todos los beneficios del control resultantes de administrar redes privadas, pero todavía pueden conectarse a Internet. 
  • Una mayor flexibilidad en el servicio de los ISP: El cambio de un ISP es más fácil porque sólo hay necesidad de cambiar las direcciones públicas. No es necesario volver a numerar todas las máquinas cliente de la red. 
  • Mayor Seguridad: La traducción NAT representa un nivel de indirección. De este modo, se crea automáticamente un tipo de servidor de seguridad entre la red de la organización y la Internet pública. Es más difícil acceder directamente a los dispositivos cliente por alguien malintencionado, porque los clientes no tienen direcciones IP de dominio público 
  • (Casi) Transparente: La implementación NAT es casi transparente, porque los cambios se producen en uno o tal vez unos pocos routers. Las docenas o cientos de hosts en sí mismos no necesitan ser cambiados.

Desventajas de NAT

Las anteriores son todas buenas razones para utilizar NAT, pero la técnica también tiene algunos inconvenientes. Algunos de estos eliminan parte de los beneficios de ciertos elementos en la lista anterior:

  • Complejidad: NAT representa una mayor complejidad en la creación y gestión de la red. También hace la solución de problemas más confusa debido a la sustitución de direcciones. 
  • Problemas debidos a la falta de direcciones públicas: Algunas funciones no trabajan correctamente debido a la falta de una dirección IP "real" en los hosts clientes. 
  • Problemas de compatibilidad con ciertas aplicaciones: Dije antes que NAT solo era casi transparente. De hecho surgen problemas de compatibilidad con ciertas aplicaciones debidos a implementaciones NAT "chapuceras" que procesan los campos de cabecera IP en los datagramas, pero no los correspondientes a los datos de la aplicación. Esto significa que algunas herramientas como el FTP, que pasan las direcciones IP y los números de puerto en los comandos, deben ser especialmente manipuladas, y algunas aplicaciones pueden no funcionar. 
  • Problemas con protocolos de seguridad: protocolos como IPSec están diseñados para detectar modificaciones en los encabezados y comúnmente se resisten a los cambios que hace NAT, ya que no pueden diferenciar estos cambios de los correspondientes a datagramas maliciosos. Todavía es posible combinar NAT e IPSec, pero esto se hace más complicado. 
  • Pobre soporte para acceso a clientes: La falta de una dirección IP pública para cada cliente es un arma de doble filo, que protege contra hackers que intentan acceder a un host, pero también hace que sea difícil el acceso legítimo a los clientes en la red local. Las aplicaciones "Peer-to-peer" son más difíciles de configurar, y algo así como un sitio web de la organización (desde el Internet en su conjunto) por lo general necesita ser configurado sin NAT. 
  • Reducción de rendimiento: Cada vez que un datagrama hace transiciones entre la red privada e Internet, se requiere una traducción de direcciones. Además, se deben ejecutar otros trabajos, así como volver a calcular las sumas de comprobación de cabecera. Cada traducción individual requiere poco esfuerzo, pero cuando se suman, incide de algún modo sobre el rendimiento.
Muchas organizaciones consideran que las ventajas superan a las desventajas, sobre todo si usan Internet principalmente en forma de cliente/servidor, como la mayoría. Por esta razón, NAT se ha vuelto muy popular. Sin embargo ud siempre debe tener en cuenta, que el principal problema que llevó a la creación de NAT es la falta de espacio de direcciones. IPv6 resuelve este problema, mientras que NAT sólo encuentra una "solución inteligente". Por esta razón, muchas personas consideran NAT una "chapuza". Una vez que se implemente IPv6, ya no será necesaria, y a algunas personas no les gusta, incluso para IPv4. Por otro lado, algunos creen que sus otros beneficios la hacen digna de consideración, incluso en IPv6.

Nota: Una "chapuza" (o "Kluge") es algo que se utiliza para tratar un problema de una manera poco elegante, como clavar un clavo con el lado de una llave ajustable. (Yo nunca haría tal cosa, por supuesto que no ...)

Como su nombre lo indica claramente, la traducción de direcciones de red IP tiene que ver con la traducción de direcciones IP. Cuando los datagramas pasan entre la red privada de una organización y la Internet pública, una o más de las direcciones de estos datagramas son modificados por el router NAT. Esta traducción significa que todas las transacciones en un entorno NAT implican no sólo una dirección de origen y una dirección de destino, sino múltiples direcciones potenciales para cada origen y destino.

Con el fin de hacer más clara la explicación de cómo funciona NAT, se han desarrollado varias designaciones especiales para referirse a los diferentes tipos de direcciones que se pueden encontrar en un datagrama IP cuando se utiliza NAT. Por desgracia, la terminología utilizada para tratar NAT puede ser confusa, porque es difícil de visualizar cuáles son las diferencias entre los nombres (a menudo con sonidos similares). Sin embargo, sin saber lo que significan estas direcciones la comprensión adecuada de la operación de NAT es imposible, así que tenemos que empezar por explicarlos.

Términos de direcciones NAT basados en la localización del dispositivo (interior / exterior)

La primera forma en que las direcciones se diferencian se basa en el lugar de la red en que se encuentra el dispositivo y las direcciones entonces se refieren a:

  • Direcciones internas: Cualquier dispositivo en la red privada de la organización que utiliza NAT se dice que está en la red interior. Por lo tanto, a cualquier dirección que se refiera a un dispositivo en la red local en cualquier forma se le llama una dirección interior. 
  • Dirección externas: La internet pública, es decir, todo lo que está fuera de la red local se considera la red externa. Cualquier dirección que se refiera a un dispositivo de Internet es una dirección externa.
Concepto clave: En NAT, los términos interno y externo se utilizan para identificar la ubicación de los dispositivos. Las direcciones internas se refieren a los dispositivos en la red privada de la organización, las direcciones externas se refieren a los dispositivos de la red pública.

Términos de direcciones NAT basados en la localización de los datagramas (Local / Global)

Un dispositivo interno siempre tiene una dirección interna, un dispositivo externo siempre tiene una dirección externa (o exterior). Sin embargo, hay dos maneras diferentes de direccionamiento ya sea para dispositivos externos o internos, dependiendo de en qué parte de la red aparece la dirección en el datagrama:
  • Dirección Local: Este término describe una dirección que aparece en un datagrama en la red interna, sea que se refiera a direcciones internas o externas. 
  • Dirección global: Este término se refiere a una dirección que aparece en un datagrama en la red externa, de nuevo, sea que se refiera a direcciones internas o externas.
Concepto clave: En NAT, los términos local y global se utilizan para indicar en qué red aparece una dirección en particular. Las direcciones locales se utilizan en la red privada de la organización (ya sea para referirse a un dispositivo externo o externo); las direcciones globales se utilizan en la Internet pública (de nuevo, para referirse a un dispositivo externo o externo).

Combinaciones de designaciones de direcciones Interior / Exterior y Local / Global.

Esto es un poco confuso, así que voy a tratar de explicarlo con más detalle. El router que ejecuta el NAT tiene el trabajo de servir como interfaz entre la red interna y externa (Internet). Los dispositivos internos deben ser capaces de comunicarse con dispositivos externos y viceversa, pero los dispositivos internos sólo pueden utilizar un direccionamiento coherente con el esquema de direccionamiento de la red local. Del mismo modo, los dispositivos externos no pueden utilizar direccionamiento local. Por lo tanto, tanto los dispositivos internos y como los externos puede hacer referencia a versiones de direcciones locales o globales. Esto produce cuatro tipos diferentes de direcciones específicas:

  • Dirección local interna: Una dirección de un dispositivo en la red local, expresada mediante su representación normal del dispositivo local. Así, por ejemplo, si tuviéramos un cliente en una red usando el bloque de direcciones privadas 10.0.0.0, y le asigna la dirección 10.0.0.207, esta sería su dirección local interna.
  • Dirección global interna: Esta es una dirección IP global públicamente routeable utilizada para representar un dispositivo interno en el mundo exterior. En una configuración NAT, las direcciones globales internas son las "verdaderas" direcciones IP asignadas a una organización para su uso por el router NAT.
Digamos que el dispositivo 10.0.0.207 quiere enviar una petición HTTP a un servidor de Internet ubicado en la dirección 204.51.16.12. Se forma el datagrama utilizando 10.0.0.207 como dirección de origen. Sin embargo, si este datagrama se envía a la Internet como es, el servidor no puede responder de nuevo, porque 10.0.0.207 no es una dirección IP pública enrutable. Por lo que el router NAT traducirá 10.0.0.207 en el datagrama en una de las direcciones IP registradas de la organización, digamos que es 194.54.21.10. Esta es la dirección global que corresponde a 10.0.0.207. Esta se utilizará como dirección de destino cuando el servidor envíe la respuesta HTTP. Tenga en cuenta que en algunas situaciones, la dirección local interna y la dirección local externa pueden ser la misma.

  • Direcciones globales externas: Una dirección de un dispositivo externo (Internet pública), ya que hace referencia en la Internet global. Esta es básicamente una dirección regular, públicamente registrada de un dispositivo en el Internet. En el ejemplo anterior, 204.51.16.12 es una dirección global externa de un servidor público. 
  • Dirección local externa: Es la dirección de un dispositivo externo, ya que es referida por los dispositivos en la red local. En algunas situaciones, esta puede ser idéntica a la dirección global externa de ese dispositivo externo.
Designaciones de direcciones Local / Global desde la perspectiva de la ubicación del dispositivo
¡Uf, sigue siendo confuso, ¿no? Vamos a probar otra forma de ver esto. De estas cuatro direcciones, dos tipos son las direcciones que son conocidas como "nativas", ya sea dentro por un dispositivo externo o interno, mientras que dos son direcciones traducidas:

  • Denominaciones de dispositivos internos: Para un dispositivo interno, la dirección local interna es la dirección "normal" o "nativa". La dirección global interna es una dirección traducida utilizada para representar el dispositivo interno en la red exterior, cuando sea necesario. 
  • Denominaciones de dispositivos externos: Para un dispositivo externo, las direcciones globales externas son las direcciones "normales" o "nativas". La dirección local externa es una dirección traducida utilizada para representar un dispositivo externo en la red interna, cuando sea necesario.
Entonces, lo que hace NAT es traducir la identidad de los dispositivos, ya sean internos o externos desde las representaciones locales a las representaciones globales y viceversa. Qué direcciones cambian y cómo, depende del tipo específico de NAT empleado. Por ejemplo, en el NAT tradicional, los dispositivos internos se refieren a los dispositivos externos empleando su propia representación (global), por lo que las direcciones globales externas y las direcciones locales externas de estos dispositivos externos son las mismas.

Concepto clave: Un router NAT traduce direcciones locales a direcciones globales, y viceversa. Por lo tanto, una dirección local se traduce en una dirección global (y viceversa) y una dirección local externa se traduce a una dirección global externa (y viceversa).

Ilustración gráfica de la terminología NAT.

Y después de todo eso ... sigue siendo confuso. Uno de los grandes problemas es que las palabras "interno" y "local" son de alguna manera sinónimos, como lo son "externa" y "global", pero en NAT significan cosas diferentes. Y la paradoja típica de tratar de explicar conceptos de redes asoma aquí nuevamente su fea cabeza: yo quería definir estas direcciones hacer la descripción de la operación de NAT mas sencilla, y acabo utilizando un ejemplo de como opera NAT para aclarar como se usan las direcciones.

Incluso después de escribir esta sección encuentro estos términos confusos, así que creé la figura 111, que muestra esta misma terminología en forma gráfica y puede ser de alguna ayuda. Este diagrama es utilizado también como plantilla para las ilustraciones de cada uno de los diferentes tipos de NAT en temas posteriores, que utilizan el mismo código de colores para cada uno de los cuatro tipos de direcciones en aras de mantener la coherencia. A medida que lea los temas que discuten la operación de NAT, recuerde mirar de nuevo aquí si desea volver a verificar el significado de los tipos de direcciones. No se desanime si le toma un par de veces entender bien las direcciones.


Esperemos que este diagrama le ayude a entender mejor todo el asunto de "interno / externo / local / global". 

NAT nos permite conectar una red privada (interna) a la red pública (externa) como Internet, mediante el uso de un algoritmo de traducción de direcciones implementado en un router que conecta las dos. Cada vez que un router NAT encuentra un datagrama IP que cruza la frontera entre las dos redes debe traducir las direcciones, según corresponda. Pero, cómo saber qué traducir y que utilizar para la dirección traducida?
El software de NAT en el router debe mantener una tabla de conversión para decirle cómo operar. La tabla de traducción contiene información que asigna las direcciones locales (internas) de los dispositivos internos (sus direcciones regulares) a direcciones globales internas (las direcciones públicas especiales que se utilizan para la comunicación externa). También puede contener asignaciones entre direcciones globales externas y direcciones locales externas para transacciones de entrada, en su caso.

Hay dos maneras básicas en que se pueden agregar entradas a la tabla de traducción NAT.

Asignaciones estáticas
Cuando se utilizan asignaciones estáticas, se define una relación permanente, fija entre las representaciones globales y locales de la dirección ya sea de dispositivos externos o internos. Por ejemplo, podemos usar una traducción estática, si queremos que el dispositivo interno con una dirección local de 10.0.0.207 utilize siempre la dirección global interna 194.54.21.10. Cada que 10.0.0.027 inicie una transacción con el Internet, el router NAT reemplazará esa dirección con 194.54.21.10.

Asignaciones dinámicas.
En el caso de las asignaciones dinámicas, las representaciones de direcciones globales y locales son generadas automáticamente por el router NAT, son usadas según se necesiten, y luego descartadas. La forma más común en que se emplea esto es cuando se permite que un grupo de direcciones globales internas se compartan por un gran número de dispositivos internos.

Por ejemplo, digamos que utilizamos asignación dinámica, con un pool de direcciones globales internas disponible desde 194.54.21.1 a 194.54.21.20. Cuando 10.0.0.207 envía una solicitud a Internet no tendrá su dirección de origen automáticamente sustituida por 194.54.21.10. El router NAT elegirá una de las 20 direcciones disponibles en el pool de direcciones. El router entonces esperará las respuestas usando esa dirección y nuevamente la convertirá a 10.0.0.207. Cuando la sesión se complete, la entrada será descartada para devolver la dirección global interna al pool de direcciones.

Comparación de asignaciones estáticas y dinámicas.

El equilibrio entre asignaciones NAT estáticas y dinámicas es mas menos el mismo que surge siempre que se elige entre "estático" y "dinámico", por ejemplo, los mismos problemas que surgen en el caché ARP. Las asignaciones estáticas son permanentes y por lo tanto ideal para dispositivos que necesitan estar siempre representados con la misma dirección pública en la red exterior. También se pueden utilizar para permitir el tráfico de entrada a un dispositivo en particular, es decir, en las operaciones iniciadas en la red pública, dirigidas a un servidor especial en la red interior. Sin embargo, requiere de configuración y mantenimiento manual, y no permite el uso compartido de direcciones IP en la red interna.
Las asignaciones dinámicas se utilizan normalmente para clientes regulares con el fin de facilitar el uso de direcciones IP públicas compartidas, un objetivo primordial de la mayoría de las implementaciones de NAT. Es más complicada que la asignación estática, pero una vez establecida es automática.

Por supuesto que es posible mezclar asignaciones estáticas y dinámicas en el mismo sistema. Podemos definir ciertos dispositivos asignados estáticamente y dejar que el resto utilice la asignación dinámica. Sólo tenemos que asegurarnos de que las asignaciones estáticas no se superponen con el rango de direcciones utilizado para las asignaciones dinámicas.
Incidentalmente, otra forma en que se ejecuta la asignación dinámica de direcciones globales y locales a través de resolución de nombres de dominio utilizando DNS. Esto es particularmente común cuando un dispositivo externo accede a un host interno utilizando NAT bidireccional (transacciones de entrada). Dado que las máquinas de la Internet no saben nada de la red privada de la organización, se emitirá una solicitud para el nombre DNS del dispositivo que desea acceder. Esto provoca que se genere una entrada de traducción NAT que mapea la dirección pública local interna del host a una dirección global interna que será utilizada por los dispositivos de la red externa. Véase la descripción de NAT bidireccional para más detalles sobre cómo funciona esto.

Ahora que entendemos la motivación detrás de NAT y sus pros y sus contras, y también hemos cubierto la terminología de direcciones NAT y la creación de la tabla de traducciones, es hora de pasar a los detalles sucios de cómo funciona. Hay muchos diversos sabores de NAT, y cuatro de los más comunes están cubiertos en esta Guía. Tiene sentido empezar por analizar la variedad original de NAT descrita en el RFC 1631. Este es el método más sencillo de NAT y por lo tanto el más fácil de explicar.

NAT fue, por supuesto, diseñado para permitir a los hosts de una red privada compartir direcciones IP públicas para acceder a Internet. Como la mayoría de los hosts son clientes que inician las transacciones, NAT fue diseñado bajo la suposición de que una comunicación cliente/servidor - solicitud/respuesta se iniciaría con un datagrama enviado desde la red interior hacia el exterior. Por esta razón, este primer tipo de NAT es a veces llamado NAT unidireccional o de salida. Ya que es el más antiguo sabor también es llamado a veces NAT tradicional, para diferenciarlo de las nuevas variedades.

Ejemplo de NAT Unidireccional.

Para mostrar cómo funciona el NAT unidireccional, por supuesto usaremos un ejemplo. Explicar las cosas siempre es más fácil con ejemplos, sobre todo cuando se trata de una cosa confusa como NAT. Vamos a utilizar los mismos números de los últimos dos temas. Vamos a suponer que la red interna cuenta con 250 máquinas que usan direcciones privadas (locales internas) en el rango de direcciones 10.0.0.0 / 8 (que seleccioné porque tiene números pequeños!) Estas máquinas usan NAT dinámica para compartir un pool de 20 direcciones globales internas en el rango de 194.54.21.1 a 194.54.21.20.

En nuestro ejemplo, el dispositivo 10.0.0.207 quiere acceder al servidor web en la dirección pública 204.51.16.12. La tabla 74 muestra los cuatro pasos básicos que están implicados en esta operación (simplificados). Lo hice en forma de tabla en lugar de gráfico para poder mostrar explícitamente lo que sucede con las direcciones tanto en la solicitud de los datagramas (en los pasos # 1 y # 2) como en la respuesta de datagramas (pasos # 3 y # 4). También he resaltado los valores de la dirección traducida para mayor claridad, y proporciono la figura 112, que muestra gráficamente el proceso.



Los cuatro pasos de este proceso se puede ver siguiendo los pasos en sentido horario. Las direcciones traducidas se muestran en negrita. Por favor, consulte la Tabla 74 para una explicación de los pasos de este diagrama, o la figura 111 para una explicación de los cuatro tipos de direcciones.

Como puede ver, esto realmente no es una ciencia exacta, y es bastante fácil de entender lo que está pasando en cuanto se acostumbra a la terminología y los conceptos. En NAT unidireccionales la dirección de origen se traduce en los datagramas de salida y la dirección de destino en los entrantes. El NAT tradicional sólo es compatible con este tipo de transacción de salida, que se inicia por un dispositivo en la red interior. Esta clase de NAT no puede manejar el proceso resultante de que un dispositivo en el Internet envíe una solicitud a una dirección privada.

Otras funciones del router en NAT

También tenga en cuenta que a pesar de que me estoy centrando en los cambios que el router NAT hace en las direcciones, también tiene que realizar otros cambios en el datagrama. Cualquier cambio en el encabezado IP significa que el campo Checksum de la cabecera IP tendrá que ser recalculado. Las sumas de comprobación UDP y TCP deben ser recalculados, y dependiendo de la naturaleza de los datos en el datagrama, otros cambios también pueden ser requeridos. Discutiremos estos temas en el tema de los problemas de compatibilidad NAT.
Este ejemplo simplificado asume la existencia de un solo router entre las redes privada y pública. Es posible tener más de un router entre estas redes. Sin embargo si se utiliza esta configuración, es esencial que ambos dispositivos usen la misma table de traducciones. De lo contrario, si la solicitud es procesada por el router R1, pero la respuesta recibida por el router R2, R2, no se sabe cómo traducir de nuevo la dirección de destino en el datagrama entrante. Por supuesto, esto hace el mapeo dinámico extremadamente difícil: los routers tendrían que coordinar sus asignaciones de direcciones.

Concepto clave: En el NAT unidireccional (tradicional), el router NAT traduce la dirección de una solicitud de salida de una forma local interna a una global interna. A continuación, transforma la dirección de destino de la respuesta de la forma global interna a la local interna. Las direcciones locales y globales fuera externas son las mismas tanto en la solicitud como en la respuesta.

El NAT tradicional está diseñado para manejar sólo transacciones de salida, los clientes de la red local inician las solicitudes y los dispositivos en Internet devuelven las respuestas. Sin embargo, en algunas circunstancias, puede que quiera ir en la dirección opuesta. Es decir, se puede querer que un dispositivo en la red externa inicie una transacción con un dispositivo en el interior. Para permitir esto, necesitamos un tipo más capaz de NAT que la versión tradicional. Esta mejora pasa por varios nombres, con mayor frecuencia NAT bidireccional, NAT de dos vías y NAT entrante. Todas estas formas de nombrarlo transmiten el concepto de que este tipo de NAT permite tanto el tipo de operación que vimos en el tema anterior como las transacciones realizadas desde la red exterior.

El problema con el NAT entrante: Las direcciones ocultas

La realización de NAT en las transacciones entrantes es más difícil que el NAT convencional de salida. Para entender por qué, recuerde que la configuración de red cuando se utiliza NAT es de por sí asimétrica: la red interior en general, conoce las direcciones IP de los dispositivos externos, ya que son públicas, pero la red exterior no conoce las direcciones privadas de la red interior. Incluso si las conociera, nunca podría especificarlas como destino de un datagrama IP iniciado en el exterior, ya que no se pueden enrutar, no habría manera de llevarlos al router local de la red privada.

¿Por qué importa esto? Bien, consideremos el caso de un NAT saliente desde el dispositivo A en la red interna hacia el dispositivo B en el exterior. El cliente local, A, siempre iniciará la transacción, por lo que el router es capaz de crear una asignación entre la dirección local interna y la global interna del dispositivo A durante la solicitud. El dispositivo B es el destinatario del datagrama ya traducido, por lo que el hecho de que el dispositivo A emplea NAT permanece oculto. El dispositivo B responde de nuevo y el router NAT realiza la traducción inversa sin que el dispositivo B sepa siquiera que el dispositivo A está ejecutando NAT.
Ahora, echemos un vistazo a los casos de entrada. En este caso, el dispositivo B está tratando de enviar al dispositivo A, que está usando NAT. El B dispositivo no puede enviar nada a la dirección privada (local interna) del dispositivo A. Necesitará la dirección global interna del dispositivo A con el fin de "echar la bola a rodar". Sin embargo, el router NAT del dispositivo A no tiene relación alguna con el dispositivo B. De hecho, el dispositivo B, probablemente ni siquiera sabe la identidad del router NAT del dispositivo!

Facilitando el uso de NAT entrante utilizando DNS

Hay sólo dos maneras de resolver el problema de la dirección oculta. Una de ellas es utilizar la asignación estática para dispositivos en la red interna como servidores a los que es necesario tener acceso desde el exterior. Cuando se emplea asignación estática, la dirección global del dispositivo que está usando la asignación estática será de conocimiento público, lo que resuelve el problema de "adonde debo enviar mi solicitud".
La otra solución es hacer uso del sistema de nombres de dominio TCP / IP (DNS). Como se explica en detalle en la sección de DNS, este protocolo permite que las solicitudes sean enviadas como nombres en lugar de direcciones IP, el servidor DNS traduce los nombres en sus direcciones correspondientes. Es posible la integración de DNS y NAT para que funcionen juntos. Este proceso se describe en el RFC 2694, extensiones DNS para Traductores de direcciones de red (DNS_ALG).

En esta técnica, un dispositivo externo puede, de hecho, hacer uso de la asignación dinámica. El proceso básico (muy simplificado) es el siguiente:
  1. El dispositivo externo envía una petición DNS con el nombre del dispositivo que desea en la red interna. Por ejemplo, podría ser "www.ilikenat.com". 
  2. El servidor DNS para la red interna resuelve el nombre "www.ilikenat.com" en una dirección local del dispositivo que corresponde a esta entrada DNS. 
  3. La dirección local interna se pasa al NAT y se utiliza para crear una asignación dinámica entre la dirección local interna del servidor que se accede desde el exterior, y una dirección global interna. Esta asignación se pone en la tabla de traducción NAT del router. 
  4. Cuando el servidor DNS devuelve el nombre resuelto, le dice al dispositivo externo no la dirección local interna (privada) del servidor que busca, sino la dirección global interna (pública) asignada en el paso anterior.

Ejemplo de NAT bidireccional.

Una vez que la dirección global interna del dispositivo de la red interior es conocida por el dispositivo exterior, la transacción puede comenzar. Vamos a usar el mismo ejemplo que en el tema anterior, sólo lo invertiremos, por lo que el dispositivo exterior 204.51.16.12 iniciará una solicitud (y por lo tanto será ahora el cliente) hacia dispositivo interno 10.0.0.207 (que es el servidor). Digamos que, o bien usamos asignación estática o bien DNS para que el dispositivo externo conozca que la dirección global interna de 10.0.0.207 es en realidad 194.54.21.6. La tabla 75 describe la transacción en detalle, que además se ilustra en la figura 113.




Como puede ver, una vez que el dispositivo exterior conoce la dirección global del dispositivo interno, el NAT de entrada es muy similar al NAT de salida. Simplemente hace la traducción exactamente a la inversa. En lugar de modificar la dirección de origen en la petición de salida y el destino en la respuesta de entrada, el router cambia el destino de la petición de entrada y la fuente de la respuesta de salida.


Esta es muy similar a la figura 112, salvo que la transacción es a la inversa, así que por favor inicien en la parte superior derecha y vayan en sentido contrario al reloj. Las direcciones traducidas se muestran en negrita. La tabla 75 contiene una explicación completa de los cuatro pasos. Refiérase a la Figura 111 para una explicación de los tipos de direcciones

Concepto clave: En el NAT tradicional, una transacción debe comenzar con una petición de un cliente en la red local, pero en el NAT bidireccional (de dos vías/ entrada), es posible que un dispositivo en el Internet acceda a un servidor de red local . Esto requiere el uso ya sea de asignación estática o de DNS para proporcionar al cliente externo la dirección del servidor en la red interior. Luego la operación de NAT es más o menos la misma que en el caso unidireccional, pero al revés: la petición de entrada ha cambiado su dirección de destino de global interna a local interna, la respuesta tiene su fuente cambiada de local interna a global interna.