jueves, 10 de abril de 2008

Direcciones IP, NAT y abrir puertos

Hay 2 tipos (principalmente) de direcciones IP: direcciones públicas y direcciones privadas.
Las IP privadas son rangos especiales de direcciones IP que se reservan para ser utilizadas en redes locales, y se llaman privadas (o no-enrutables) porque no pueden ser utilizadas en Internet. Los routers (no el de casa) intermedios que componen todo Internet, no "entienden" este tipo de direcciones y no las encaminan.Esto da una gran flexibilidad para configurar redes locales, ya que por ejemplo, yo puedo tener en mi red local direcciones del tipo 192.168.0.0, y mi vecino también, pero como esas direcciones no salen de la red local no hay ningún conflicto. Esto no pasa con las direcciones públicas, que son las que se usan en Internet, y han de pertenecer a un único equipo (host); no puede haber varios con la misma IP pública.
El problema viene ahora, como mi IP es privada, ¿cuando hago una solicitud a Internet, como sabe a que dirección ha de devolverse la información?La solución a este problema es NAT: Network Address Translation (o Traducción de Direcciones de RED) La idea básica es traducir las IPs privadas de la red en una IP publica para que la red pueda enviar paquetes al exterior; y traducir luego esa IP publica, de nuevo a la IP privada del equipo que envió el paquete, para que pueda recibirlo una vez llega la respuesta.
Con un ejemplo lo veremos mejor
Imagen de red local casera súper básica que tenemos un par de PCs que salen a Internet a través del router. Cada PC tiene asignada una IP privada, y el router tiene su IP privada (puerta de enlace) y su IP pública (que es nuestra IP de Internet).
Funcionamiento: cuando uno de los equipos de la red local quiere enviar un paquete a Internet, se lo envía al router (o a la puerta de enlace o gateway), y éste hace lo que se conoce como SNAT (Source-NAT) y cambia la dirección de origen por su IP pública. Así, el host remoto sabrá a qué IP pública ha de enviar sus paquetes. Cuando una respuesta o un paquete pertenecientes a esa conexión llegue al router, éste traducirá la dirección IP de destino del paquete (que ahora es la IP del router) y la cambiará por la dirección privada del host que corresponde, para hacer la entrega del paquete a la red local.
El mecanismo que utiliza NAT para las asociaciones entre IP pública y IP privada es una tabla (tabla de NAT) en la que guarda una entrada por cada conexión. Cuando un equipo de la red local inicia una conexión hacia el exterior, el software de NAT asigna una entrada en la tabla, para que a partir de ahora, todo lo que llegue perteneciente a esa conexión sepa traducirlo hacia la IP privada que inició la conexión
Si la conexión se inicia desde fuera (si queremos permitir conexiones desde el exterior a un equipo de nuestra red local) hemos de añadir una entrada fija en la tabla de NAT, indicando que todo el tráfico que llegue que vaya a determinado puerto, sea dirigido al equipo en cuestión. Esto se denomina DNAT (destination-NAT). El puerto es el único elemento que tenemos para "distinguir" conexiones, ya que todo llegará a la IP del router, pero tendrán un puerto de destino según sea una conexión u otra. Así que, si queremos que se pueda acceder a un servidor web montado en nuestra red local, deberíamos crear una entrada fija en la tabla de NAT en la que indicáramos que lo que llegue al puerto 80 (web) sea dirigido al PC en el que corre el servidor web.
Esto es lo que se llama "abrir puertos" en el router. Al abrir puertos, simplemente estamos añadiendo una entrada a la tabla de NAT del router para que sepa hacer la traducción y sepa a qué PC enviar los paquetes.

No hay comentarios:

Datos personales