Este documento describe el uso de NAT (Network Address Translator) con routers Cisco. NAT resuelve problemas como la escasez de direcciones IPv4 permitiendo que múltiples dispositivos compartan una dirección pública. Se explican los tipos de direcciones NAT, la configuración de NAT estático y dinámico, y cómo traduce las direcciones de paquetes cuando cruzan entre redes internas y externas. Finalmente, proporciona referencias sobre los estándares relacionados con NAT, IPv6 y direcciones privadas.
1. Uso de NAT con Routers Cisco
NAT. PRESENTACION
NAT (Network Address Translator) es una función de los enrutadores que representa una respuesta a algunos
problemas que presenta Internet (escasez de direcciones, problemas de seguridad y complejidad del
encaminamiento o routing), derivados de los peculiares origenes de la Red.
En este artículo abordaremos en una primera parte las razones que hicieron necesario el desarrollo del mecanismo
NAT para terminar mostrando como se usa en redes basadas en tecnología Cisco.
I. NAT. PRINCIPALES MOTIVACIONES.
I.a.- REMEDIO FRENTE A LA ESCASEZ DE DIRECCIONES
Las máquinas que se conectan a Internet se identifican por medio de un número (denominado
dirección IP, de Internet Protocol). Aunque las direcciones IP tienen una longitud de 32 bits (lo
que permite en principio identificar hasta 4,294,967,296 máquinas distintas) la forma de repartir
esas direcciones agrupándolas en redes de distintas clases, la generosidad inicial en el reparto así
como el éxito comercial e imprevisto de Internet ha provocado un progresivo agotamiento del
espacio de direcciones disponible.
Cuando Internet fue diseñado no se pensó que pudiera crecer de una forma tan explosiva (el uso
previsto era militar y científico, y no comercial). El abaratamiento de los sistemas informáticos y
de las telecomunicaciones así como la simplificación de su uso ha terminado acercando la red
Internet a un gran público, y los proveedores de servicios de red han tenido que desarrollar
mecanismos para responder a la demanda creada.
La solución obvia, aumentar la longitud de las direcciones, ya se está llevando a cabo: está en
marcha la implantación de la versión 6 del protocolo IP (IPv6) que utiliza direcciones de 128
bits. Esta versión también ha previsto mecanismos más racionales de reparto del nuevo espacio
de direcciones. No obstante llevará años migrar la infraestructura actual de Internet a IPv6.
Mientras tanto NAT (Network Address Translator) ha representado una magnífica solución
temporal al problema de agotamiento de las direcciones, al permitir que múltiples usuarios se
conecten a la red compatiendo una única dirección IP. Esta dirección en muchos casos es
además 'dinámica', esto es, se trata de una dirección que forma parte de un conjunto (pool) más
amplio propiedad del ISP (Internet Service Provider, o Proveedor de Servicios de Internet), que
es 'alquilada' temporalmente al usuario, permitiendo una reutilización de este preciado recurso
tan pronto como
es liberado.
Como los sistemas de los usuarios finales siguen necesitando tener una dirección única que los
identifique pueden usar en sus redes locales direcciones denominadas de uso privado descritas
en el RFC 1918 (Address Allocation for Private Internets), que especifica que las redes 10.0.0.0
- 10.255.255.255, 172.16.0.0 - 172.31.255.255 y 192.168.0.0 - 192.168.255.255 no son
encaminadas por los routers en la Red, de forma que pueden ser usadas sin conflicto por
múltiples usuarios en distintos sitios. A la hora de salir a Internet el router NAT se encargará de
hacer las traducciones necesarias para que los 'diálogos' con el exterior de las máquinas con
direcciones RFC 1918 parezcan tener por origen la IP asignada por el ISP (de espacio público,
enrutable). De cara al exterior la red del usuario se presenta como una única máquina.
2. I.b.- SIMPLIFICACIÓN DE LA GESTION DE REDES
Otra consecuencia derivada del crecimiento de Internet es el aumento del tamaño de las tablas
de rutas necesarias para el encaminamiento (routing) de los paquetes en la Red. Para que los
paquetes viajen hasta las máquinas destino los enrutadores deben poseer rutas hacia los destinos.
Algunos de los enrutadores del núcleo de Internet poseen tablas de rutas de enorme tamaño. El
uso de NAT ha frenado el crecimiento de estas tablas.
Al hablar de la administración de redes hay que mencionar una importante ventaja de NAT, al
permitir migrar redes de forma transparente a los usuarios finales. Esto es especialmente útil
cuando hay que unir dos redes que comparten el mismo plan de numeración (redes superpuestas
u "overlaping networks"). El uso de redes de espacio RFC 1918 hace que estos solapamientos
ocurran de forma frecuente en las fusiones de empresas.
I.c.- MEJORA DE LA SEGURIDAD
Internet presenta una serie de problemas de seguridad que han sido estudiados en diversas
ocasiones (cómo en "Security problems in the TCP/IP protocol suite", Bellovin). Estos
problemas pueden sorprender si consideramos que los orígenes de Internet son claramente
militares (la red ARPA), pero se explican teniendo en cuenta el carácter experimental de sus
inicios, el énfasis en la funcinalidad por encima de otros criterios, el entorno académico donde
se desarrollaron los protocolos fundamentales que componen la pila de protocolos TCP/IP, etc...
Tampoco los principales sistemas operativos han sido desarrollados teniendo la seguridad como
principal criterio de diseño.
Hemos visto en el apartado anterior como por medio de NAT y el uso de direcciones de uso
privado la red del usuario se presenta de cara al exterior como una única máquina. Al hacer
pasar las comunicaciones por un punto común (el router NAT) se puede concentrar una parte
importante del esfuerzo de seguridad en dicho punto. Desde el exterior no será posible
establecer comunicación con máquinas de la red local si estas no han iniciado la conversación
(el router NAT no sabría a qué máquina interna remitir los paquetes del exterior). Por supuesto
que es posible definir traducciones estáticas para ciertos servicios que necesitan ser identificados
con claridad, tales como servicios Web, FTP, etc... No obstante la combinación de NAT con
mecanismos de seguridad tales como listas de acceso permiten ejercer un mayor control en el
uso de estos servicios.
Hay que tener en cuenta que el origen de NAT está en la escasez de direcciones IPv4 y no en la
seguridad. Recientes avances ("Counting NATed Host", Bellovin) muestran técnicas que
permiten identificar las máquinas que están detrás de un router NAT.
3. II. CONFIGURACION DE NAT EN ENTORNOS CISCO
II.a.- DIRECCIONES NAT
A la hora de configurar la traducción de direcciones Cisco distingue cuatro tipos de direcciones:
Inside local address (interna local): la dirección IP asiganada a una máquina concreta de la red
interna. Generalmente se trata de una dirección de espacio reservado para uso privado (RFC
1597).
Inside global address (interna global): la dirección IP que representa en el exterior una o más
direcciones internas locales (inside local address). Suelen ser direcciones IP públicas
(enrutables) asignadas por un ISP.
Outside local address (externa local): la dirección IP de una máquina externa tal como se ve
desde la red interna. No tiene por que ser una dirección IP pública, 'legal'.
Outside global address (externa global): la dirección IP de una máquina externa tal como es
asignada por el dueño de dicha máquina. Esta IP es de espacio público.
Para eliminar ambigüedad definiremos las redes internas como aquellas conectadas a las
interfaces del router NAT definidas como "inside" (por medio de la órden "ip nat inside"). De
forma similar denominaremos redes externas a las que conectan con el router NAT por las
interfaces definidas como "outside" (por medio de la órden "ip nat outside"). En función de a
qué interfaces se conectan, las redes serán internas o externas a efectos del NAT.
II.b.- FUNCIONAMIENTO DE NAT
Los paquetes originados en la parte interna de la red tienen una "inside local address" como
origen y una "outside local address" como destino mientras el paquete viaja por la parte interna
de la red. Cuando el paquete es conmutado a la red externa el origen del paquete es traducido a
la "inside global address" y el destino conocido como "outside global address".
Otra forma de verlo: cuando el paquete viene de la parte externa de la red su dirección origen
será la "outside global address" y el destino será la "inside global address". Pero cuando el
paquete atraviese el router NAT y entre en la red interna el origen habrá sido traducido por la
"outside local address" y su destino como "inside local address."
El encaminamiento (routing) de los paquetes en un router NAT tiene lugar antes de la
traducción cuando esta es de dentro a fuera (Inside-to-outside) y tiene lugar después cuando la
traducción es de fuera a dentro (Outside-to-inside).
II.c.- NAT ESTATICO
II.c.1.- NAT INSIDE SOURCE
En este tipo de NAT un paquete con origen ip_local al atravesar una interfaz definida como
inside cambiará dicha ip origen por la ip_global. Igualmente, y para que todo funcione
correctamente, cuando un paquete con destino ip_global llegue a una interfaz definida como
outside será cambiado a destino ip_local.
4. La forma general de la instrucción que permite definir este mapeo es
ip nat inside source static ip_local ip_global
En el ejemplo siguiente las máquinas 10.0.0.1 a 10.0.0.4 conectadas a la red local (ethernet)
serán vistas desde el exterior (por la interfaz serie) cómo 9.0.0.1 a 9.0.0.4
ip nat inside source static 10.0.0.1 9.0.0.1
ip nat inside source static 10.0.0.2 9.0.0.2
ip nat inside source static 10.0.0.3 9.0.0.3
ip nat inside source static 10.0.0.4 9.0.0.4
interface ethernet 0
ip nat inside
interface serial 0
ip nat outside
Podemos consultar el estado de la tabla NAT por medio de la instrucción "show ip nat
translation"
Sagan#sh ip nat trans
Pro Inside global Inside local Outside local Outside global
--- 9.0.0.1 10.0.0.1 --- ---
--- 9.0.0.2 10.0.0.2 --- ---
--- 9.0.0.3 10.0.0.3 --- ---
--- 9.0.0.4 10.0.0.4 --- ---
II.c.2.- NAT OUTSIDE SOURCE
En este caso cuando el router recibe un paquete con origen ip_global en su interfaz outside dicha
dirección es cambiada por la ip_local. De la misma forma, cuando un paquete con destino
ip_local atraviesa una interfaz definida como inside será trasformado para que su destino sea la
ip_global
La forma general de la instrucción que permite definir este mapeo es
ip nat outside source static ip_global ip_local
En el siguiente ejemplo el dispositivo 9.0.0.4 es conocido en la red local local como 10.0.0.4
ip nat outside source static 9.0.0.4 10.0.0.4
interface serial 0
ip nat outside
interface ethernet 0
ip nat inside
Podemos comprobar la traducción con
5. Sagan#sh ip nat trans
Pro Inside global Inside local Outside local Outside global
--- --- --- 10.0.0.4 9.0.0.4
II.c.3 RESUMEN DEL NAT ESTATICO
Una forma simplificada de considerar los puntos anteriores en la práctica consiste en estudiar las
instrucciones de traducción "ip nat inside|outside source|destination static"
inside|outside hace referencia a que interfaz debe atravesar el paquete (de qué red viene).
source|destination hace referencia al campo del paquete que será traducido (nuevo origen|
destino)
Así:
"ip nat inside source" cambia el origen de los paquetes (que cumplen el NAT, ojo, que para el
resto el NAT es trasparente) que vienen por la interfaz inside (y el destino de los que entran por
la interfaz outside y cumplen el NAT)
"ip nat inside destination" cambia el destino de los paquetes (que cumplen el NAT) que vienen
por la interfaz inside (y el origen de los que entran por la interfaz outside y cumplen el NAT)
"ip nat outside source" cambia el origen de los paquetes que vienen por la interfaz definida
como outside (y cumplen el NAT).
II.d.- NAT DINAMICO (muy provisional)
II.d.1 Configuración
Para empezar creamos un “fondo” (pool) de direcciones. Usamos listas de acceso para
especificar las direcciones internas y la orden “ip nat pool” seguida del nombre del "pool" para
enumerar el rango de direcciones externas:
access-list 10 permit 10.0.0.0 0.255.255.255
ip nat pool CONVERSION 9.0.0.2 9.0.0.5 netmask 255.0.0.0
Conectamos ambos dominios de direcciones con la orden “ip nat inside|outside source|
destination”, pero en esta ocasión especificaremos que utilice el "pool" definido anteriomente:
ip nat inside source list 10 pool CONVERSION
Aplicamos la conversión como antes:
interface Ethernet0
ip nat inside
!
interface Serial0
ip nat outside
II.d.2 Sobrecarga (Overload)
6. Se configura de forma similar pero añadiendo la palabra clave "overload"
ip nat inside source list 10 pool CONVERSION overload
Podemos hacer que el enrutador reconstruya la tabla de traducciones con la orden “clear ip nat
translation *”. Limpiar la tabla NAT es una buena medida inicial cuando se reportan problemas
con este mecanismo.
Por medio de la instrucción “sh ip nat statistics” podemos examinar las estadísticas el
funcionamiento de NAT: aciertos (hits), fallos (missess), traducciones expiradas (expired)...
Sagan#sh ip nat statistics
Total active translations: 4 (0 static, 4 dynamic; 0 extended)
Outside interfaces: Serial0
Inside interfaces: Ethernet0
Hits: 20 Misses: 0
Expired translations: 0
Dynamic mappings:
-- Inside Source
access-list 10 pool CONVERSION refcount 2
pool CONVERSION: netmask 255.0.0.0
start 10.20.5.2 end 10.20.5.5
type generic, total addresses 4, allocated 4 (100%), misses 0
II.d.3.- NAT INSIDE DESTINATION (provisional)
En este caso cuando el router recibe un paquete con destino ip_global en su interfaz inside dicha
dirección es cambiada por la ip_local. De la misma forma, cuando un paquete con origen
ip_global atraviesa una interfaz definida como outside será trasformado para que su origen sea la
ip_local.
La forma general de la instrucción que permite definir este mapeo es
ip nat inside destination list access-list-number pool name
REFERENCIAS
La descripción original de NAT fué hecha en mayo de 1994 el RFC 1631 "The IP Network
Address Translator (NAT)". Una revisión actualizada de este documento aparece en el RFC
3022 "Traditional IP Network Address Translator (Traditional NAT)"
El protocolo IPv6 (también conocido como IPng, de Next Generation) está descrito en el RFC
1883 "Internet Protocol, Version 6 (IPv6)"
Las direcciones reservadas por IANA para uso privado fueron definidas en el RFC 1918
"Address Allocation for Private Internets".
Los problemas de seguridad de TCP/IP han sido estudiados en muchas ocaciones. Un clásico es
"Security problems in the TCP/IP protocol suite", S. M. Bellovin, AT&T Labs Research.