NAT (Network Address Translation) es un protocolo de nivel de red que sirve para comunicar equipos entre dos redes diferentes (y que no se conocen entre si) sin necesidad de modificar ninguna tabla de rutas. en los hosts. El truco esta en enmascarar las direcciones ip, función que realiza el enrutador que comunica las dos redes. Veamos un ejemplo para entenderlo mejor.
Supongamos que tenemos un enrutador E con dos interfaces de red, uno de ellos se encuentra en la red A ( 192.168.0.0/24 ) y tiene la ip 192.168.0.2 y el otro en la red B (192.168.1.0/24) y el interfce de red tiene la ip 192.168.1.1. En la primera red tenemos otro enrutador I que nos da salida a internet, con la ip 192.168.0.1. El gateway por defecto de todos los equipos de la red A y del enrutador E es 192.168.0.1, y en la red B es 192.168.1.1. Con esta situación, imaginemos que queremos comunicar el equipo 192.168.1.10 con el equipo 192.168.0.10. El paquete llega a nuestro enrutador (ya que es el gateway por defecto de todos los host de la red B), el cual tiene conocimiento de las dos redes y envía el paquete al destinatario. El problema esta en el camino de vuelta. El host 192.168.0.10 (HOST1) tiene que enviar un paquete a 192.168.1.10 (HOST2), como el destino no esta en su red lo envía por su gateway por defecto (I) y ya nos podemos despedir del paquete. La primera opción seria añadir en la tabla de rutas del host 192.168.0.10 una linea que indique que el gateway para los paquetes cuyo destino es la red 192.168.1.0/24 es 192.168.0.2 (E). La otra opción es configurar el enrutador para que haga NAT. Describamos el ejemplo anterior con NAT. El paquete a enviar desde el HOST1 va directamente a su gateway por defecto, este, antes de mandarlo a su destinatario, aplica el protocolo NAT y lo enmascara, de forma que el remitente del paquete ahora ya no es el HOST1, sino que es la ip 192.168.0.2 (el enrutador E). El paquete llega al destinatario y este ahora devuelve una respuesta al remitente del paquete que es 192.168.0.2. Al analizar el paquete, el enrutador E observa mediante NAT que el destinatario no es el, sino el HOST1, de tal manera que se lo envia y la comunicación termina.
Bueno, después de este enrevesado ejemplo vamos a pasar a ver como se configura en Windows y en Linux. Comencemos por Windows 7:
En Windows 7 ( también en XP y Vista) el servicio NAT se llama
ICS, que es en realidad una mezcla de servidor DHCP y NAT.
Para activarlo abrimos el panel de conexiones de red.
A continaución, en el interface de red que tiene salida a internet, pulsamos el botón derecho del ratón y hacemos click en propiedades. En el cuadro de dialogo que aparece seleccionamos la pestaña de uso compartido.
Activamos el checkbox para compartir la conexión a internet y le damos a aceptar. Nos aparecera el siguiente cuadro de dialogo indicandonos que la red privada (a la que se encuentra conectado el otro interface de red) tendra configuración dinámica obligatoriamente, ya que en nuestro equipo se activara un servidor DHCP. La red será 192.168.137.0/24
Observamos que en el icono de la conexión de area local se índica que la red esta compartida.
Comprobamos desde un HOST de la red privada que todo funciona.
Ahora veamos como hacerlo desde Linux. Si ya tenemos configurados los dos interfaces de red, debemos hacer dos operaciones:
1) Activar el servicio ip_forward para que el equipo enrute el tráfico entre sus interfaces de red. Podemos hacerlo de dos maneras:
a) Dar permiso de ejecución a /etc/rc.d/rc.ip_forward. Al reiniciar el equipo se activar. Si queremos activarlo en el momento lo ejecutamos.
b)Añadir la siguiente linea al fichero /etc/rc.d/rc.local
echo "1" > /proc/sys/net/ipv4/ip_forward
2) Hacer NAT entre dos redes: Añadimos al fichero /etc/rc.d/rc.local la siguiente linea:
iptables -A POSTROUTING -t nat -s RED_PRIVADA ! -d RED_PRIVADA -j MASQUERADE
donde RED_PRIVADA es la red a enmascarar, por ejemplo 192.168.0.0/24. Dicha red puede ser de configuración estática o dinámica.