- Traductor de dirección
de red (NAT) - Aplicación
- Operación
básica - Manipulación de
cabeceras - NAT con múltiples
direcciones - Ejemplos de
configuración - Conclusiones
- Acrónimos
- Bibliografía
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
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.
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.
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).
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.
- 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].
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].
Ejemplificaremos como debe ser la configuración
de NAT estático, NAT dinámico y NAPT en ese
orden[5].
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#
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
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
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.
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)
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