miércoles, 7 de abril de 2010

Algo de NAT…

CiscoSystems Hola a todos, en las últimas semanas y tras varios temas que he comentado en mi trabajo, hay varias personas que me han pedido que inserte un nuevo artículo en mi blog tratando el tema de NAT y PAT, tras los 8 años de experiencia que tengo como instructor en CISCO, voy a aportar información que se puede encontrar en el semestre 4 del curso de CCNA, también incluiré las sentencias de configuración para estos dispositivos al final de este articulo. Voy a intentar aportar toda la información que pueda para intentar que quede claro este tema, sobre todo la terminología ya que esta puede confundir un poco.

Hace algunos años, conectarse a Internet era un lujo solo al alcance de unos pocos, desde finales de los años 80 se ha venido experimentando un crecimiento exponencial de las maquinas que se conectan a internet. Hoy en día se conecta casi todo a internet, PCs, portátiles, móviles, videoconsolas, televisores, frigoríficos y hasta podríamos conectar bicicletas (ni que decir que esto último es exagerado hasta el día que se le ocurra a alguien :D). Cada dispositivo conectado a la red necesita una IP y con tantos dispositivos conectados, el direccionamiento se va agotando.

Como los problemas de agotamiento de direcciones empezaban a ser preocupantes se empezaron a tomar medidas, entre ellas, el direccionamiento público y privado. Las direcciones privadas son las que se muestran a continuación y también pueden ser utilizadas de forma libre:

Clase A: 10.0.0.0*

Clase B: 172.16.0.0 a 172.31.0.0*

Clase C: 192.168.0.0 a 192.168.255.0*

*NOTA: solo identifico la dirección de red de cada una de las redes.

También tenemos el direccionamiento público, este está controlado y ha de ser asignado por el ISP. Por cada continente existe una organización que se encarga de gestionar el direccionamiento público, en América del Norte es ARIN, en América del Sur y Centro América es LACNIC, en Asia y Oceanía es APNIC, en Europa es RIPE y en África es AfricNIC. A este proyecto se le llama RIR (Regional Internet Registry) y para obtener más información podéis visitar este enlace de CISCO (http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_4-4/regional_internet_registries.html).

En cada oficina privada, en cada casa o en cada ubicación que nos plazca podemos repetir direccionamiento 192.168.0.X ya que este es un direccionamiento privado, esto nos acarrea un pequeño “pero”. Pues bien, para saltar este escalón y otros (en los que no voy a entrar en este artículo), se diseño NAT. Tu puedes tener el direccionamiento privado que te plazca y de cara a internet se te vera con una dirección pública, NAT significa Network Address Traslation. Para empezar tenemos que tener claro los tipos de dirección que nos podemos encontrar, esto lo represento en la siguiente tabla:

Dirección Local Interna

Por norma general suele ser una dirección IP Privada de un dispositivo interno.

Dirección Global Interna

Esta dirección suele ser una dirección pública, es la dirección a la que se traduce la dirección Local Interna.

Dirección Global Externa

Es la dirección IP asignada a un host en la red externa. El dueño del host asigna esta dirección.

Dirección Local Externa

Es la dirección IP de un host externo, como la conocen los hosts en la red interna.

NAT1

También es importante definir una zona (interfaz) como interna (inside) y otra como externa (outside) aunque esto no significa que en inside tengamos que utilizar una IP privada y en outside tengamos que usar una IP pública. Pero, ¿Cómo funciona NAT?, supongamos que tenemos el escenario que se puede ver a continuación:

NAT2

Supongamos que tenemos un número de servidores X que están configurados con un direccionamiento privado, necesitamos que estos servidores se conecten a otro que está situado en internet o que estos sean accesibles desde el mismo sitio. Con el direccionamiento actual esto no es posible así que vamos a hacer que estos servidores se vean con el direccionamiento adecuado en internet. Lo primero que se debe hacer es obtener un pool de direcciones públicas del proveedor, en este caso valdría de la dirección 80.0.0.10 a la dirección 80.0.0.13, cuatro direcciones, una para cada servidor. Lo que pretendemos con esto es que cada dirección interna sea traducida a una externa y podemos hacer de dos maneras. De forma estática o dinámica, de forma estática cada dirección IP interna se traducirá siempre a la misma dirección externa, por ejemplo:

192.168.0.15 -> 80.0.0.10

192.168.0.16 -> 80.0.0.11

192.168.0.17 -> 80.0.0.12

192.168.0.18 -> 80.0.0.13

Esta traducción siempre será a la misma dirección mientras que de forma dinámica el primer paquete que llegue será traducido a la primera dirección del pool y así sucesivamente, por norma general en cualquier configuración hay una ACL que determina que IPs pueden ser traducidas y que IPs no podrán ser traducidas. La pasarela NAT se encarga de realizar esta traducción anotando todas las traducciones de IP en una tabla como se puede ver en los siguientes gráficos:

- El servidor de origen envía un paquete al servidor en internet, el paquete llega a la pasarela NAT.

NAT3

- La Pasarela NAT chequea el pool disponible, anota la IP en la tabla y modifica el campo IP origen del paquete.

NAT4

Cuando el paquete regresa, la pasarela NAT busca la dirección de destino de este en su tabla de traducciones, si esta aparece, sustituye el campo ID de destino por la IP indicada en la tabla.

NAT5

NAT6

A continuación adjunto un link de CISCO donde se puede ver todo esto.

http://www.cisco.com/warp/public/556/nat.swf

Cuando lo queremos acceder desde Internet a nuestra red interna, tenemos que tener identificadas las maquinas de esta red con una dirección IP publica en la pasarela NAT, también tenemos que publicar asociado a la IP un numero de puerto, en términos de ISA server a esto se le llama publicar un servicio. Cuando el paquete llega a la pasarela NAT, esta chequea su tabla de asignaciones cambia la IP y si es una publicación valida redirecciona al servidor apropiado y al puerto indicado.

La configuración de NAT en un dispositivo cisco es la que muestro a continuación:

NAT Dinámico

Router# configure terminal
Router(config)# interface Fastethernet 0/0 -> Determinamos que esta es la interfaz interna.
Router(config-if)# ip nat inside
Router(config-if)# interface Fastethernet 0/1 -> Determinamos que esta es la interfaz externa.
Router(config-if)# ip nat outside
Router(config)# exit
Router(config)# ip nat pool public_access 80.0.0.10 80.0.0.13 netmask 255.255.255.0 –> Identificamos el pool de direcciones.
Router(config)# access-list 1 permit 192.168.0.0 0.0.0.255 –> Identificamos las IPs que pueden ser traducidas.
Router(config)# ip nat inside source list 1 pool public_access -> Asociamos el pool a las IPs que pueden ser traducidas.


Configuración de Mapeo estático:

Con estas líneas asociamos una IP interna a una IP del pool.
Router(config)# ip nat inside source static 192.168.0.15 80.0.0.10
Router(config)# ip nat inside source static 192.168.0.16 80.0.0.11
Router(config)# ip nat inside source static 192.168.0.17 80.0.0.12
Router(config)# ip nat inside source static 192.168.0.18 80.0.0.13

Con esta configuración asignamos un pool de direcciones a nuestra red interna, supongamos que lo que quiero ahora es no contratar ese pool de direcciones o bien necesito que salgan a internet muchas direcciones IP, por ejemplo nuestros PCs. Para realizar esto utilizamos PAT, esto permite traducir múltiples IPs internas a una sola IP externa. La operación es similar a la de NAT, solo que todas la IPs se traducen a una misma dirección IP en el exterior, esta IP suele ser la IP del Router.

En esta ocasión, como todas las direcciones son traducidas a la misma IP, el Router forma una tabla en la que incluye el puerto de origen que está utilizando esa maquina para esa comunicación y crea una asociación entre los dos datos para así reconocer el paquete a su vuelta.

NAT7

NAT8

Cuando el paquete viene de vuelta, el Router tiene que tratar de devolverlo a la maquina correcta, como todas las maquinas fueron traducidas a la misma dirección, el Router comprueba el puerto de destino que tiene el paquete y lo coteja con su tabla. Una vez localizado ese puerto, el Router sabrá a que dirección corresponde ese paquete y hará la traducción correspondiente.

NAT9

La configuración de PAT sería la siguiente:

Router# configure terminal
Router(config)# interface Fastethernet 0/0 -> Determinamos que esta es la interfaz interna.
Router(config-if)# ip nat inside
Router(config-if)# interface Fastethernet 0/1 -> Determinamos que esta es la interfaz externa.
Router(config-if)# ip nat outside
Router(config)# exit
Router(config)# access-list 1 permit 192.168.0.0 0.0.0.255 –> Identificamos las IPs que pueden ser traducidas.
Router(config)# ip nat inside source list 1 interface Fastethernet 0/1 overload-> Esta secuencia traducirá IPs a la dirección que tenga el Router en su interfaz Fastethernet 0/1 (80.0.0.1).

Espero haber dado algo mas de luz a este tema para aquellos que no lo conozcáis y como siempre espero vuestros comentarios, saludos a todos.

4 comentarios:

Jorge de la Cruz dijo...

Muy buena explicación del NAT Javi, como siempre.
Todos los dias chequeo tu blog para ver las novedades, no hay muchas pero es mejor porque cuando las hay son de una calidad inconmensurable.

Un saludo

F. Javier Cazallas Blanco dijo...

:D, gracias Jorge, intentaré hacerlo más a menudo aunque necesito más tiempo libre... :P

AndresCR dijo...

excelente explicacion la mejor y mas entendible que vi en toda la red...

gracias javi

Unknown dijo...

Muy buena informacion me has aclarado algunas dudas que tenia.

Pero podrias comentar algo del nexus 1000 porque me gustaria tener mas informacion de ello.

Salu2

graxias