Descargar

Traductor de dirección de red (NAT)

Enviado por raul.antelo


    1. Traductor de dirección de red (NAT)
    2. Aplicación
    3. Operación básica
    4. Manipulación de cabeceras
    5. NAT con múltiples direcciones
    6. Ejemplos de configuración
    7. Conclusiones
    8. Acrónimos
    9. Bibliografía

    INTRODUCCIÓN:

    El uso de redes de computadoras en las empresas ha crecido y continúa creciendo drásticamente, en la mayoría de estos casos estas redes son de uso exclusivo interno, requiriendo que una mínima cantidad de terminales tengan acceso a redes externas. Además, el rápido agotamiento de las direcciones IP públicas hace que adquirirlas sea costoso ([2], problema planteado en el capítulo 4), razón por la cuál las redes privadas utilizan un direccionamiento basado en direcciones IP reservadas que son inválidas para su uso fuera de la red interna.

    Para que estas empresas puedan tener un acceso a redes externas o a Internet se requiere de una traducción de direcciones que permita que con una sola conexión a la red de redes y unas cuantas direcciones IP válidas [1], de esta manera se puede tener un buen control sobre la seguridad de la red y sobre el tipo de información intercambiada con redes externas.

    La topología de red fuera de un dominio local puede cambiar de muchas maneras. Los clientes pueden cambiar proveedores, los backbones (conexiones de Internet con gran ancho de banda) de las compañías pueden ser reorganizados o los proveedores pueden unirse o separarse. Siempre que la topología externa cambie, la asignación de dirección para nodos en el dominio local puede también cambiar para reflejar los cambios externos. Este tipo de cambios deben ser implementados en el router de acceso a Internet y de esta manera, pueden ser ocultados a los usuarios de la rede interna de la organización [3].

    TRADUCTOR DE DIRECCIÓN DE RED (NAT):

    La "Traducción de Direcciones de Red", Network Address Translation (NAT), es un método mediante el que las direcciones IP son mapeadas desde un dominio de direcciones a otro, proporcionando encaminamiento transparente a las máquinas finales [4]. Existen muchas variantes de traducción de direcciones que se prestan a distintas aplicaciones. Sin embargo todas las variantes de dispositivos NAT debería compartir las siguientes características:

    • Asignación transparente de direcciones.
    • Encaminamiento transparente mediante la traducción de direcciones (aquí el encaminamiento se refiere al reenvío de paquetes, no al intercambio de información de encaminamiento).
    • Traducción de la carga útil de los paquetes de error ICMP

    APLICACIÓN:

    Como se explicó en el anterior punto, la traducción de la dirección de red, se aplica en redes que fueron implementadas con direcciones IP privadas y necesitan tener un acceso a Internet, se debe solicitar a un proveedor un rango de direcciones válidas para poder asociar dichas direcciones válidas con los hosts que tengan direcciones inválidas y necesiten salida a Internet.

    Esta situación ocurre frecuentemente en las empresas que tienen redes internas grandes, también puede darse el caso que el proveedor sólo asigne una dirección válida a la empresa, en esta situación se configura a NAT para que diferentes hosts dentro de la empresa puedan acceder a Internet mediante esta única IP válida asignada por el proveedor, en este caso la configuración del router con NAT asocia además de la dirección IP, un puerto para direccionar correctamente los paquetes a los diferentes hosts (estas dos situaciones serán explicadas más ampliamente en la siguiente sección). Estos problemas también pueden presentarse en redes caseras más pequeñas y son una solución factible para habilitar una conexión a Internet sin tener que hacer una reconfiguración de la red interna, además que el proceso de traducción de direcciones IP es transparente al usuario final que no se da cuenta de lo que pasa.

    OPERACIÓN BÁSICA:

    Para que una red privada tenga acceso a Internet, el acceso debe ser por medio de un dispositivo ubicado en la frontera de las dos redes que tenga configurado NAT para la traducción de direcciones, en estos casos lo más conveniente es poner a un router para que los paquetes sean enviados hacia él. Existen dos tipos de asignación de direcciones:

    • Asignación estática de direcciones, en el caso de asignación estática de direcciones, existe un mapeo uno a uno de direcciones para las máquinas entre una dirección privada de red y una dirección externa de red durante el tiempo en funcionamiento del NAT. La asignación estática de direcciones asegura que NAT no tiene que administrar la gestión de direcciones con los flujos de sesión[4].

    Figura 1: NAT estático: cuando el host 192.168.0.2 envía un paquete al servidor 207.28.194.84

    tiene en la cabecera de sus paquetes los datos mostrados en "A", al pasar estos paquetes por el

    router NAT, los datos son modificados y llegan al servidor con los datos mostrados en "B". Las

    relaciones de direcciones de la tabla del router son puestas estáticamente

    • Asignación dinámica de direcciones, en este caso, las direcciones externas son asignadas a las máquinas de la red privada, o viceversa, de manera dinámica, basándose en los requisitos de uso y el flujo de sesión que el NAT determine heurísticamente. Cuando la última de las sesiones que use una dirección asociada termine, NAT liberará la asociación para que la dirección global pueda ser reciclada para su posterior uso. La naturaleza exacta de la asignación de direcciones es específica de cada implementación de NAT[4].

     Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Figura 2: NAT dinámico: en este caso sucede lo mismo que en el anterior con las cabeceras de

    los paquetes que salen de "A", en este caso la tabla muestra una lista con las direcciones válidas

    disponibles para ser usadas, estas direcciones son asignadas dinámicamente a los hosts.

    1.1 NAT tradicional:

    La operación de Traducción de Dirección a analizar se denomina "NAT Tradicional", existen otras variantes de NAT que no serán exploradas. En un NAT tradicional, las sesiones son unidireccionales, salientes de la red privada. Las sesiones en la dirección opuesta pueden ser permitidas en una base excepcional usando mapeos de dirección estáticos para hosts preseleccionados. Existen dos variantes del NAT Tradicional: NAT Básico y NAPT (Network Address Port Translation).

    1.1.1 NAT Básico:

    La operación de NAT Básico es como se describe a continuación: una zona con un conjunto de direcciones de red privadas puede ser habilitada para comunicarse con una red externa mapeando dinámicamente el conjunto de direcciones privadas a un conjunto de direcciones de red válidas globalmente, cada dirección tiene garantizada una dirección global para ser mapeada a ella. De lo contrario, los nodos habilitados para tener acceso simultáneo a la red externa son limitados por el número de direcciones en el conjunto global.

    Direcciones locales individuales pueden ser estáticamente mapeadas a direcciones globales específicas para asegurarse acceso garantizado hacia fuera o para permitir acceso al host local desde hosts externos mediante una dirección pública fija. Sesiones múltiples simultáneas pueden ser iniciadas desde un nodo local, usando el mismo mapeo de dirección.

    Las direcciones dentro de la zona son locales para este dominio y no son válidas fuera de él. De este modo, las direcciones dentro de la zona pueden ser reusadas por alguna otra. Por ejemplo, una sola dirección de clase A puede ser usada por muchas zonas. En cada punto de salida entre una zona y el backbone, NAT está instalado. Si hay mas de un punto de salida es de gran importancia que cada NAT tenga la misma tabla de traducción[3].

    En el ejemplo de la Figura 3 la red de la derecha tiene las direcciones de clases A 10.0.0.0, en 1 una máquina ubicada en una red externa con dirección 130.57.52.13 envía un paquete a la dirección 130.57.199.13, en 2 el paquete llega al router NAT el cuál traduce la dirección de destino 130.57.199.13 por la dirección 10.0.0.1 que es la dirección verdadera del host destino, esto se ve en 3, en 4 la máquina envía una respuesta con dirección fuente 10.0.0.1, al pasar por el router NAT la dirección de fuente de la respuesta es modificada por la dirección 130.57.199.13 que es una dirección global única, esto se ve en 5.

    Se puede ver la tabla de traducción que tiene el router, en la cuál se observa la asociación de direcciones locales con las direcciones que usarán en Internet.

    Para ver el gráfico seleccione la opción "Descargar" del menú superior  

    Figura 3: NAT Básico: a cada host de la red se le asigna una dirección global única.

    Todo este proceso no requiere cambios en el host o en el router, las traducciones de dirección son transparentes para los hosts finales.

    1.1.2 Traducción de Dirección de Red y Puerto – NAPT

    Digamos, una organización tiene una red IP privada y una conexión WAN a un proveedor de servicio. El router de zona de la red privada es asignado a una dirección válida globalmente en la conexión WAN y los demás nodos en la organización usan direcciones IP que tienen sólo significado local. En este caso, a los nodos en la red privada se les puede permitir acceder simultáneamente a la red externa, usando la única dirección IP registrada con la ayuda de NAPT. NAPT permitiría mapeos de tuplas del tipo (direcciones IP local, número de puerto TU local) a tipos del tipo (dirección IP registrada, número de puerto TU asignado).

    Este modelo es adecuado para muchos grupos de redes pequeñas para acceder a redes externas usando una sola dirección IP asignada del proveedor de servicio. Este modelo debe ser extendido para permitir acceso entrante mapeando estáticamente un nodo local por cada puerto de servicio TU de la dirección IP registrada[3].

    En el ejemplo de la Figura 4 la red interna maneja el rango de direcciones 192.168.0.0 de clase C, la interface del router que se comunica con Internet tiene asignada la dirección 206.245.160.1.

    Cuando el host con dirección 192.168.0.2 envía un paquete http (puerto destino 80) al servidor 207.28.194.84, en la cabecera de los paquetes se envía la información mostrada en "A" donde se indica la dirección fuente como Src y la dirección destino como Dst estos paquetes son enviados al router NAT ubicado al centro del gráfico.

    El router tiene configurado NAPT y lo que sucede es que se traduce la tupla de dirección de origen 192.168.0.2 y puerto origen 1108 en los encabezados IP y TCP por la tupla 206.245.160.1 que es una dirección globalmente única y al puerto 61001 antes de reenviar al paquete, es decir los paquetes salen del router con los datos mostrados en "B".

    Los paquetes de regreso que sean enviados por el servidor web, pasan por una traducción de dirección y puerto similar por la dirección IP de destino y puerto TCP de destino. Se observa que esto no requiere de cambios en los hosts o en los routers. La traducción es completamente transparente para los usuarios.

    En el gráfico se muestra la tabla de asignación de los hosts con las direcciones de los hosts de la red interna con sus respectivos puertos y la asociación de puertos con los que será enviada la información afuera.

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Figura 4: NAPT: ejemplo de funcionamiento de NAPT, se usa una sola dirección IP válida

    y se conectan diferentes hosts de la red interna hacia Internet por diferentes puertos.

    1.2 Fases de Traducción:

    • Lingando la dirección, con NAT Básico, una dirección privada es ligada a una dirección externa, cuando la primera sesión saliente es iniciada desde el host privado. Después de esto, todas las otras sesiones salientes originadas desde la misma dirección privada usarán la misma dirección unida por la traducción de paquete.

    En el caso de NAPT, donde muchas direcciones privadas son mapeadas a un sola dirección globalmente única, la unión sería desde la tupla de (dirección privada, puerto TU privado) a la tupla de (dirección asignada, puerto TU asignado). Como con NAT Básico, esta unión es determinada cuando la primera sesión saliente es iniciada por la tupla de (dirección privada, puerto TU privado) en el host privado.

    • Búsqueda y traducción de dirección, Después de que una unión de dirección o unión de tupla (dirección, puerto TU) en el caso de NAPT es establecida, se puede mantener un estado para cada una de las conexiones usando la unión. Los paquetes pertenecientes a la misma sesión estarán sujetos a la búsqueda de sesión para propósitos de traducción. La naturaleza exacta de la traducción es discutida en la sección siguiente.
    • Desligando la dirección, Cuando la última sesión basada en una unión de dirección o de tupla (dirección, puerto TU) es terminada, su unión puede ser terminada[3].

    MANIPULACION DE CABECERAS:

    En el modelo NAT Básico, el encabezado IP de todos los paquetes debe ser modificado. Esta modificación incluye la dirección IP (dirección IP origen para paquetes salientes y dirección IP destino para paquetes entrantes) y la suma de control IP.

    Para las sesiones TCP y UDP, las modificaciones deben incluir actualización de la suma de control en los encabezados TCP/UDP. Esto es porque la suma de control de TCP/UDP también cubre un pseudoencabezado que contiene las direcciones IP origen y destino. Como una excepción, los encabezados UDP con suma de control 0 no deben ser modificados. Como para los paquetes de petición ICMP, no son requeridos cambios adicionales en el encabezado ICMP como la suma de control en el encabezado ICMP que no incluye las direcciones IP[3].

    En el modelo NAPT, las modificaciones al encabezado IP son similares a las del modelo NAT Básico. Para las sesiones TCP/UDP, las modificaciones deben ser extendidas para incluir la traducción del puerto TU (puerto TU origen para paquetes salientes y puerto TU destino para paquetes entrantes) en el encabezado TCP/UDP. El encabezado ICMP en los paquetes de petición ICMP deben también ser modificados para reemplazar el ID de petición y la suma de control del encabezado ICMP. La suma de control del encabezado ICMP debe ser corregida para contar la traducción del ID de petición.

    Estas son algunas de las modificaciones efectuadas:

    • Ajuste de la suma de control, las modificaciones de NAT son por paquete y puede ser un cómputo muy intensivo, ello involucra una o más modificaciones a la suma de control, inclusive para traducciones de un sólo campo[3].
    • Modificaciones al paquete de error ICMP, los cambios al mensaje de error ICMP incluirán cambios a los encabezados IP e ICMP en la capa saliente como bien cambios a los encabezados de los paquetes embebidos en la carga útil del mensaje ICMP-error.

    El método para NAT debe ser transparente para el host-final, la dirección IP del encabezado IP embebido en la carga útil del mensaje ICMP-error debe ser modificado, el campo de suma de control del encabezado IP embebido debe ser modificado, y finalmente, la suma de control del encabezado ICMP debe también ser modificada para reflejar los cambios a la carga útil[3].

    • Manipulando la opción IP, un datagrama IP con una de las opciones IP de Registrar Ruta, Encaminamiento de Origen Fijo o Encaminamiento de Origen No Estricto involucraría registro o uso de direcciones IP de routers intermedios. Un router NAT intermedio puede elegir no soportar estas opciones o dejar las direcciones sin traducir mientras que si procesa las opciones. El resultado de dejar las direcciones sin traducir sería que direcciones privadas a lo largo del encaminamiento origen son expuestas de extremo a extremo. Esto no debe poner en peligro la ruta atravesada por el paquete, de hecho, como cada router se supone que mira sólo al próximo salto[3].

    En general, NAT no debería trabajar con ninguna aplicación que envíe direcciones IP o puertos como datos. Por ejemplo, cuando dos programas usan FTP mantienen una conexión TCP entre ellos. Como parte del protocolo, un programa obtiene un número de puerto en la máquina local, y envía los datos por la conexión TCP al otro programa. Si la conexión entre los programas pasa por medio de un router configurado con NAPT, el puerto podría ser cambiado y reemplazado por el puerto que NAPT le asigne. Así, si NAT falla al cambiar el número de puerto, el protocolo podría fallar. Las implementaciones de NAT fueron creadas para reconocer puertos conocidos como el de FTP y hacer los cambios necesarios en el flujo de datos. Pero existen aplicaciones que no pueden ser usadas con NAT[1].

    NAT CON MÚLTIPLES DIRECCIONES:

    La configuración NAT con múltiples direcciones se refiere al NAPT mediante el cuál, como ya se explico, un grupo de hosts en una red privada pueden tener salida a redes externas con una sola dirección global mediante la asociación de direcciones IP y puertos TU. Se pueden tener varias direcciones globales asignadas a la red y por cada dirección pueden salir grupos de hosts a redes externas(este tema está explicado en el punto 4.1-2 de este informe).

    En la configuración NAT Básico, cuando los nodos de la red privada agotan las direcciones globales disponibles para el mapeo, el acceso a la red externa para algunos de los nodos locales es abruptamente cortado cuando la última dirección IP válida de la lista fue asignada.

    Esto es un inconveniente y puede ser evitado permitiendo que el router NAT Básico pueda conmutar a una configuración NAPT para la última dirección global de la lista de direcciones. Haciendo esto asegurará que los hosts de la red privada tengan continuidad en el acceso a los nodos externos y servicios para la mayoría de las aplicaciones[3].

    EJEMPLOS DE CONFIGURACIÓN:

    Ejemplificaremos como debe ser la configuración de NAT estático, NAT dinámico y NAPT en ese orden[5].

    Configuración NAT estático:

    Para configurar NAT estático se deben seguir los siguientes pasos:

    Definir el mapeo de las direcciones estáticas:

    ip nat inside source static local-ip global-ip

    ip nat inside source static network local-network global-network mask

    Especificar la interfaz interna

    ip nat inside

    Especificar la interfaz externa

    ip nat outside

    Ejemplo:

      R# configure terminal

    R(config)# ip nat inside souce static 10.1.1.1 198.3.4.1

    R(config)# interface e0

    R(config-if)# ip nat inside

    R(config-if)# exit

    R(config)# interface s0

    R(config-if)# ip nat outside

    R(config-if)# exit

    R(config)# exit

    R#

    Configuración NAT dinámico:

    Para configurar NAT dinámico se deben seguir los siguientes pasos:

    Crear un conjunto de direcciones globales:

    ip nat pool name start-ip end-ip {netmask mask | prefix-length prefix-length}

    Crear una ACL que identifique a los hosts para la traslación

    access-list access-list-number permit source {source-wildcard}

    Configurar NAT dinámico basado en la dirección origen

    ip nat inside source list access-list-number pool name

    Especificar la interfaz interna

    ip nat inside

    Especificar la interfaz externa

    ip nat outside

    Ejemplo:

     R# configure terminal

    R(config)# ip nat pool fib-xc 198.3.4.1 198.3.4.254 netmask

    255.255.255.0

    (config)# access-list 2 permit 10.1.1.0 0.0.0.255

    R(config)# ip nat inside source list 2 pool fib-xc

    R(config)# interface e0

    R(config-if)# ip nat inside

    R(config-if)# exit

    R(config)# interface s0

    R(config-if)# ip nat outside

    R(config-if)# exit

    R(config)# exit

    R# show ip nat translations

    Configuración NAPT:

    Para configurar NAPT se deben seguir los siguientes pasos:

    Crear un conjunto de direcciones globales (puede ser una sola dirección):

    ip nat pool name start-ip end-ip {netmask mask | prefix-length prefix-length}

    Crear una ACL que identifique a los hosts para la traslación

    access-list access-list-number permit source {source-wildcard}

    Configurar PAT basado en la dirección origen

    ip nat inside source list access-list-number pool name overload

    Especificar la interfaz interna

    ip nat inside

    Especificar la interfaz externa

    ip nat outside

    Ejemplo: Usaremos hasta 30 direcciones internas globales, cada una de las cuales hace NAPT

     R# configure terminal

    R(config)# ip nat pool fib-xc 198.3.4.1 198.3.4.30 netmask

    255.255.255.0

    (config)# access-list 2 permit 10.1.1.0 0.0.0.255

    R(config)# ip nat inside source list 2 pool fib-xc overload

    R(config)# interface e0

    R(config-if)# ip nat inside

    R(config-if)# exit

    R(config)# interface s0

    R(config-if)# ip nat outside

    R(config-if)# exit

    R(config)# exit

    R# show ip nat translations

    En el caso de que no haya un conjunto de direcciones globales podemos usar la dirección asignada a la interficie "s0" de la siguiente manera:

    R(config)# ip nat inside source list 2 interface s0 overload

    Verificación de una configuración NAT

    Usamos los siguientes comandos para verificar que la configuración NAT es correcta (desde modo privilegiado):

    show ip nat translations

    show ip nat translations verbose

    show ip nat statistics

    debug ip nat (no debug ip nat)

    clear ip nat translations elimina todas las traslaciones NAT

    CONCLUSIONES:

    Gracias a la invención de NAT, se detuvo el agotamiento de las direcciones IP válidas, porque permite que varios hosts dentro de una red privada, tengan acceso a Internet con sólo usar unas pocas direcciones IP válidas. Esta es una gran ventaja porque le dio un respiro a IPv4 para que no colapse rápido y dio tiempo para la creación de una nueva versión de IP (IPv6) que soluciones el problema de agotamiento de direcciones([2] tema tratado en el capítulo 29).

    Aunque un router que utiliza NAT no es un cortafuegos (firewall), provee de cierta seguridad, porque los hosts externos a la red no conocen las direcciones verdaderas de los hosts que se encuentran dentro de la red privada, haciendo que sea difícil poder realizar un ataque desde hosts externos.

    Una desventaja de NAPT es cuando se debe traducir paquetes fragmentados TCP/UDP, sólo el primer fragmento contiene el encabezado TCP/UDP que sería necesario para asociar el paquete a una sesión para la traducción. Los fragmentos siguientes no contienen información del puerto TU, simplemente llevan el mismo identificador de fragmentación especificado en el primer fragmento. El problema se presenta cuando dos hosts de la red privada originan paquetes TCP/UDP fragmentados al mismo host destino, si por coincidencia usaron el mismo identificador de fragmentación, cuando el host destino recibe los datagramas de ambas fuentes (que no tienen relación entre si) con el mismo identificador de fragmentación y desde la misma dirección de host asignada, es incapaz de determinar a cual de las dos sesiones pertenece cada datagrama y las dos sesiones se corrompen.

    ACRÓNIMOS:

    FTP: File Transfer Protocol (protocolo de transferencia de archivos)

    HTTP: Hyper Text Transfer Protocol (protocolo de transferencia de hipertexto)

    ICMP: Internet Control Message Protocol (protocolo de control de mensajes de Internet)

    IP: Internet Protocol (protocolo de Internet)

    IPv4: Versión número 4 del protocolo de Internet

    IPv6: Versión número 6 del protocolo de Internet

    LAN: Local Area Network (red de area local)

    NAPT: Network Address Port Translation (traducción de dirección de red y puerto)

    NAT: Network Address Translation (traducción de dirección de red)

    Puerto TU: Puerto TCP – UDP

    TCP: Transfer Control Protocol (protocolo de control de transferencia)

    UDP: User Datagram Protocol (protocolo de datagrama de usuario)

    WAN: World Area Network (red de area amplia)

    BIBLIOGRAFÍA:

    [1] COMER Douglas

    Internetworking with TCP/IP volume 1 – 4ta edición

    Editorial Prentice-Hall Inc.

    [2] COMER Douglas

    Redes Globales de Información con Internet y TCP/IP – 3ra edición

    Editorial Prentice-Hall Inc.

    [3] RFC 3022 – Traductor de Dirección de Red IP Tradicional (NAT Tradicional)

    Página: http://www.rfc-es.org/getfile.php?rfc=3022 última revisión 16 / II / 2005

    [4] RFC 2663 – Terminología y consideraciones sobre Traducción de Direcciones IP

    Página: http://redes-linux.all-inone.net/rfc-es/rfc2663-es.txt última revisión 16 / II / 2005

    [5] José M. Barceló Ordinas

    Ejemplos de NAT con IOS

    Página: http://studies.ac.upc.edu/FIB/XC/XC-Lab-7-NAT.pdf última revisión 16 / II / 2005

    Realizado por:

    Ing. Raúl Antelo Jurado

    Trabajo realizado para la Maestría en Telemática

    UMSS – CUJAE Cochabamba – Bolivia

    Febrero del 2005