Implementando NAT en routers Cisco

      2 Comments on Implementando NAT en routers Cisco

Dentro de la interminable lista de términos, abreviaciones y nomenclaturas de las telecomunicaciones NAT es una de las que más se repite. Antes de ver como se implementa NAT en una red primero veamos de que se trata.

NAT (Network Address Translation) es uno de los mecanismos utilizados en la Internet actual para hacer frente a la escacez de direcciones IPv4 públicas junto con el enrutamiento sin clase CIDR (Classless Interdomain Routing) y la utilización de máscaras variables VLSM (Variable Lenght Subnet Mask). Hoy en día solamente queda cerca de un 5% de direcciones IPv4 públicas, con lo cual se hace cada vez más necesario comenzar con la implementación de IPv6. Sin embargo aún son muchas las organizaciones que no cuentan con IPv6 en sus redes y deben trabajar con las limitaciones de IPv4. Es ahí donde entra a funcionar NAT.

Para resumir, casi groseramente, la utilidad de NAT podríamos decir que sirve para conectar a una o más redes LAN internas a Internet mediante una sola IP pública (o un grupo de ellas). En realidad NAT provee dos funcionalidades básicas que es la razón por la cual se ha seguido preferiendo este mecanismo para el funcionamiento de la mayoría de las LAN: Ahorro de direcciones públicas (y por ende, mucho dinero) y seguridad.

Básicamente podemos decir que las redes utilizan un direccionamiento IP privado y que las máquinas que tienen una dirección de este tipo NO pueden ser alcanzadas desde Internet. Técnicamente, estas direcciones IP no son enrutables en la Internet pública.

El rango de direcciones IP privadas está definido en el RFC 1928 y corresponde a los siguientes bloques:

– 10.0.0.0/8 (10.0.0.0 – 10.255.255.255)

– 172.16.0.0/12 (172.16.0.0 – 172.31.255.255)

– 192.168.0.0/16 (192.168.0.0 – 192.168.255.255)

Todas las direcciones IP que no estén en ese rango ni en los demás rangos especiales (APIPA, Loopbacks, Clase E, Clase D, etc.), son direcciones IP públicas.

Dicho esto entonces ahora podemos comprender mejor como opera NAT. Para eso vamos a ver la siguiente red de ejemplo.

NAT

La red LAN con los PC y el router utilizan el bloque 192.168.0.0/24 mientras que el ISP ha asignado la IP pública 200.1.1.1/29 al router en su puerta WAN. En esta red se ha implementado NAT para que todos los PC puedan salir a Internet y sean reconocidos mediante la IP 200.1.1.1. De no existir esto, cada uno de los PC necesitaría una dirección IP pública única para poder acceder a Internet, encareciendo el costo de los servicios.

Por ahora vamos a describir 4 tipos de NAT básicos. Hay otras implementaciones más complejas como NAT-T que por lo general se utiliza para resolver problemas de conectividad con VPNs y acceso a redes detrás de un NAT.

1. NAT dinámico

El NAT dinámico es el más básico de todos los métodos de traducción de direcciones privadas a públicas. Consiste en tener un bloque IP público e ir asignando dinámicamente una de esas IP a cada máquina de la LAN interna para que salga a Internet. Si tenemos 3 máquinas en nuestra LAN, como la imagen, necesitaremos entonces 3 IP públicas extra (aparte de la necesaria en la interfaz WAN del router) para lograr conectividad. En este tipo de NAT, las IP reservadas para el bloque público se van utilizando y se crea un mapping 1:1 entre las IP internas y las externas. Si definimos solo 3 IP públicas entonces solamente podrán conectarse 3 máquinas internas hacia Internet. Esta asociación se crea en forma dinámica.

NAT

Configuración:

Router(config)# ip nat pool RANGOPUBLICO 200.1.1.2 200.1.1.4 netmask 255.255.255.248
Router(config)# access-list 1 permit 192.168.0.0 0.0.0.255
Router(config)# ip nat inside source list 1 pool RANGOPUBLICO
Router(config)# interface FastEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
Router(config)# interface FastEthernet0/1
Router(config-if)# ip nat outside

El comando ip nat pool permite crear el rango de direcciones IP públicas que vamos a asignar al NAT dinámico y asociarlo a un nombre. En este caso RANGOPUBLICO. Luego se crea una ACL estándar donde seleccionamos el rango completo de nuestro bloque LAN. Esta ACL no se utiliza para implementar bloqueo de direcciones, si no simplemente se utiliza para seleccionar cuales IP de la LAN serán traducidas.

Luego el paso más importante es definir el sentido del NAT. Siempre la LAN será la red de “adentro” e Internet será la red de “afuera”. Por lo mismo se declara la FastEthernet0/0 de nuestro router como interna con el comando ip nat inside y se hace lo propio en la interfaz que apunta hacia Internet con el comando ip nat outside.

Mucho cuidado con no invertir este orden por que NAT nunca funcionará. En todos los tipos de NAT se debe definir las interfaces inside y outside.

La desventaja de implementar NAT dinámico es que se debe contar con una IP pública para cada PC de la LAN interna que se quiera conectar a Internet. En un entorno con más de 100 equipos, que es lo habitual, esto encarecería enormemente los costos mensuales del acceso a Internet. Por esta razón no es muy fácil encontrar NAT dinámico actualmente.

2. NAT estático

El NAT estático es el más simple de configurar y permite asociar estáticamente una dirección pública a una dirección IP privada. Es ideal para permitir el acceso desde Internet a un servidor que alojamos en una DMZ por ejemplo o en la red LAN institucional.

Nat estatico

En nuestra LAN se ha instalado un servidor Web al cual se le ha asignado la dirección IP privada 192.168.0.10, pero es requisito que desde Internet también se pueda acceder. Ya que tenemos direcciones IP privadas, este servidor no puede ser alcanzado desde una red pública, por lo tanto creamos una forma de asociar una dirección IP pública única al servidor. Acá hemos asignado la IP 200.1.1.5/29. Esta IP no puede ser utilizada en otro NAT al mismo tiempo ya que queda reservada para la IP 192.168.0.10. En otros sistemas, como OpenBSD, se suele utilizar el nombre de NAT 1:1 (one-to-one).

Configuración :

Router(config)# ip nat inside source static 192.168.0.10 200.1.1.5
Router(config)# interface FastEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
Router(config)# interface FastEthernet0/1
Router(config-if)# ip nat outside

Basta con la declaración del mapeo en la línea ip nat inside source static 192.168.0.10 200.1.1.5, declarar las interfaces inside y outside y listo. Claro, si ya se tiene otro método de NAT en el mismo router entonces no es necesario volver a “redeclarar” las interfaces. Es así de simple.

3. PAT

El nombre PAT proviene de “Port Address Translation” y es el método de NAT más utilizado probablemente. A diferencia de los dos métodos anteriores donde cada IP privada se mapea en forma directa con una única IP pública, en el PAT se asocian dinámicamente todas las conexiones originadas en la LAN con una única IP pública, identificando cada sesión con un puerto de dicha IP (Por eso se llama Port Address Translation).

Habitualmente PAT se conoce también como “Sobrecarga” u “Overload”, ya que se le da todo el trabajo de traducción a una sola IP o interfaz de red.

PAT

En este caso hemos habilitado PAT en la interfaz f0/1. Así, todas las máquinas del bloque 192.168.0.0/24 podrán salir a Internet a través de la IP 200.1.1.1. Para lograr esto el router mapea dinámicamente cada sesión con un puerto de la IP pública. Este es el tipo de NAT que más se usa, además de venir implementado de manera predeterminada en los routers de tipo SOHO (domésticos). Noten que además del PAT del router, también hay una entrada estática que definimos anteriormente para el servidor Web en la IP 192.168.0.10. Cuando se genere una solicitud desde/hacia este servidor, el router inmediatamente aplicará su NAT estático y no meterá la IP 192.168.0.10 en la asociación dinámica de puertos.

Configuración:

Router(config)# access-list 1 permit 192.168.0.0 0.0.0.255
Router(config)# ip nat inside source list 1 interface f0/1 overload
Router(config)# interface FastEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
Router(config)# interface FastEthernet0/1
Router(config-if)# ip nat outside

En este caso también creamos una ACL estándar para seleccionar las IP de la red LAN que serán traducidas en el PAT y luego con el comando ip nat inside source list 1 interface f0/1 overload asociamos esa ACL (que le dimos el número 1) con la interfaz WAN donde haremos la sobrecarga. La palabra OVERLOAD es clave para activar PAT correctamente.

4. PAT con múltiples IP

Aunque hemos mencionado que PAT es el mecanismo más ampliamente configurado en las redes actuales, lo cierto es que tiene una tremenda limitación en entornos donde la cantidad de máquinas en la LAN es de gran tamaño. Si se fijan bien, en el PAT cada vez que hay una conexión originada en la red LAN, al pasar por el router este asigna un puerto de la IP 200.1.1.1 para mapear esa conexión. ¿Sabes cuanto es el total de puertos que existe en TCP/IP?. 2 elevado a 16 puertos: 65536.

Imagínense que hay 300 máquinas en una LAN donde se está haciendo PAT y cada PC está generando una gran cantidad de conexiones simultáneas hacia Internet, como por ejemplo, la descarga de música mediante una aplicación P2P o está siendo víctima de un ataque DoS. Solo por ejemplificar, supongamos que cada máquina genera 200 conexiones simultáneas. Ya habrán problemas porque 200 conexiones por 300 PC son 75000 sesiones que deberá manejar el router en su asociación PAT, pero acabamos de decir que solamente se pueden establecer un máximo de 65536 traducciones simultáneas en una dirección IP, por lo que 9464 conexiones no tendrían éxito y expirarían. ¿Ha experimentado el hecho de intentar abrir una página Web esperando una gran cantidad de tiempo y al segundo intento abre en forma instantánea? Bueno, esto es un síntoma de una saturación en el PAT de un Router.

Para solucionar ese problema simplemente podemos asociar una nueva IP pública a la sobecarga o un rango de ellas, multiplicando las cantidades de sesiones simultáneas que se permitan en la traducción de puertos.

PAT multiple

Esta vez hemos “ampliado” la capacidad del PAT agregando un pool de direcciones a la sobrecarga de la traducción. Ya no solamente se utiliza la IP 200.1.1.1 para conectar a todos desde Internet, si no que se utilizan también las direcciones 200.1.1.2 a la 200.1.1.4.

Router(config)# ip nat pool RANGO_PAT_PUBLICO 200.1.1.1 200.1.1.4 netmask 255.255.255.248
Router(config)# access-list 1 permit 192.168.0.0 0.0.0.255
Router(config)# ip nat inside source list 1 pool RANGO_PAT_PUBLICO overload
Router(config)# interface FastEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
Router(config)# interface FastEthernet0/1
Router(config-if)# ip nat outside

Acá hemos creado un rango de direcciones públicas que utilizaremos para la sobrecarga y lo hemos llamado RANGO_PAT_PUBLICO. Luego creamos una ACL estándar para seleccionar el bloque LAN que vamos a traducir. Luego con el comando ip nat inside source list 1 pool RANGO_PAT_PUBLICO overload asociamos esa ACL al pool de direcciones públicamos y hacemos sobrecarga.

Nuevamente no hay que olvidarse de definir las interfaces inside y outside.

Eso es todo. No es tan complicado como se ve. Claro, hay cierta terminología que se aplica dentro de NAT que no hemos cubierto en los ejemplos mostrados que explicamos ahora. Vale la pena detenerse un poco a comprender bien estos términos porque por lo general causan confusión entre los alumnos e instructores (me incluyo).

– Inside Local: Se conoce como Inside Local a la dirección IP interna privada de algún PC de la red LAN.

– Inside Global: Es la dirección IP pública que está siendo utilizada para traducir las IP privadas. La IP WAN del Router en la interfaz f0/1 es considerada Inside Global, así mismo como todas las IP de los rangos públicos.

– Outside Local: Corresponde a la dirección IP de un host ubicado en la red externa (Internet) tal como se muestra en la red LAN interna. No necesariamente tiene que ser una IP pública legítima.

– Outside Global: Es la dirección IP pública de un host de destino en la red externa.

Comandos útiles:

show ip nat translation

show ip nat static

debug ip nat

Para deshabilitar NAT en el router:

1. Desactive las interfaces inside y outside

Router(config)# interface FastEthernet0/0
Router(config-if)# no ip nat inside
Router(config-if)# exit
Router(config)# interface FastEthernet0/1
Router(config-if)# no ip nat outside

2. Limpie la tabla de traducciones:

Router# clear ip nat translations

3. Elimine las ACL y los comandos NAT creados anteponiendo la palabra “no”. Ejemplo:

Router(config)# no ip nat pool RANGO_PAT_PUBLICO 200.1.1.1 200.1.1.4 netmask 255.255.255.248
Router(config)# no access-list 1 permit 192.168.0.0 0.0.0.255
outer(config)# no ip nat inside source list 1 pool RANGO_PAT_PUBLICO overload

 

Para más información puede consultar los siguientes enlaces:

* Ayuda de Cisco sobre NAT (Inglés)

* Comprendiendo Inside, Outside, Local, Global (Inglés)

* http://antonio_gallego.tripod.com/apuntes/nat.htm (Español)

 

 

  • Líon Cerati Morrison Calamaro

    Muchas gracias!!! gracias por ayudar!!! Saludos

  • Jose Aguirre

    Excelente explicacion. Sigan asi

    Nota: En realidad la web en general excelente

    Saludos