Configurar un gateway NAT básico en linux con iptables

Bases de datos, Programación, Seguridad, Servidores, Unix Añadir comentario

Esquema de configuración de un Gateway NAT

Es probable que en nuestro grupo de servidores tengamos uno o varios que por seguridad se encuentren en un segmento de red aislado, inaccesible desde internet (es decir, sólo con conexión a la LAN), por lo que en caso de necesitar realizar alguna actualización o instalación de software en dichas máquinas, nos encontraremos con el problema de no poder descargar nada de internet.

En este y otros casos similares, una solución rápida puede ser configurar uno de los servidores web, o cualquier máquina que tenga acceso a la LAN y también a internet a través de 2 interfaces distintos de red, para que pueda actuar también como pasarela de acceso a internet para resto de máquinas de la LAN.

A continuación configuraremos la máquina que tiene acceso a internet como gateway NAT para que enrute a las máquinas que se encuentran dentro de la LAN hacia internet.

Posteriormente, en otra entrada, utilizaremos esto como base para instalar un servicio de VPN en el gateway y poder acceder salir a internet a traves de su conexión, aunque nos estemos conectando de forma remota a la red.

Para éste ejemplo hemos usado máquinas con distribución CentOS 5, para otras distribuciones el procedimiento puede variar ligeramente aunque el concepto es el mismo.

1. Requisitos

1.1 Máquina que hará de gateway

  • 2 interfaces de red independientes, eth0 conectado a internet y eth1 conectado a la red local
  • iptables

1.2 Equipos que se conectarán a través del gateway

  • 1 interfaz de red, eth0 conectado la red local

2. Configuración del gateway

# Configuramos las iptables
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
# Habilitamos ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

En caso de que queramos hacer los cambios persistentes (Opcional):

# Almacenamos los iptables
iptables-save > /etc/sysconfig/iptables
vi /etc/sysctl.conf

Cambiamos la siguiente linea a:

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

En algunas distribuciones también hay que añadir esto al /etc/sysconfig/network

FORWARD_IPV4=YES

3. Configuración de los clientes (LINUX)

route add default gw 192.168.1.1

En caso de que queramos que los cambios sean persistentes (Opcional):

vi /etc/sysconfig/network-scripts/ifcfg-eth0

Modificamos o creamos la siguiente linea:

GATEWAY=192.168.1.1

Reiniciamos la red:

/etc/init.d/network restart

Ahora sólo nos resta realizar un ping a cualquier ip de internet para comprobar que todo funciona correctamente.

Nota: En caso de necesitar resolución de nombres de dominio, debemos añadir nuestro dns (local o externo) en los clientes a /etc/resolv.conf

4. Configuración de los clientes (WINDOWS)

Simplemente añadiremos la ip de la puerta de enlace (192.168.1.1) en el dialogo de configuración de TCP/IPv4 del dispositivo de red.

27 Comentarios sobre “Configurar un gateway NAT básico en linux con iptables”

  1. segundo a. Dice:

    uso suse y no reconoce iptables (al saque estoy frito)

  2. admin Dice:

    Hola:

    La mayor parte de las distribuciones modernas ya traen instalado iptables. Si tu distribución no lo trae estoy casi seguro que podrás instalarlo con YAST o descargar las fuentes y compilarlo.

    También creo recordar que en Suse existe una interfaz gráfica que permite crear reglas para iptables, échale un vistazo, creo que se llama SuseFirewall o algo así, puedes instalarlo con YAST.

    Saludos.

  3. Dorian Dice:

    Hola por favor necesito que me ayuden
    E configurado un servidor en centos apache, pero ahora quiero dar acceo a otra maquina que tine windows para que navegue al internet a travez del servidor, lo que e estado leyendo es que debo hacerlo que funcione como un router y debo utulizar iptables pero no se porque soy nuevo se poco de linux.
    Espero me respondan lo mas pronto

  4. admin Dice:

    Hola Dorian, disculpa la tardanza pero tu comentario me llegó a la bandeja de spam y no lo ví.

    La solución a tu problema es sencilla, tienes que hacer exáctamente lo que se dice aqui :)

  5. Jaume Dice:

    El GW en el cliente no sería el 192.168.1.1 ?

  6. admin Dice:

    Efectivamente Jaume, fué un error mío, en la imagen si estaba bien.

    Ya está arreglado. ¡Gracias!.

  7. eulogio Dice:

    tengo un problemas cuando reinicio mi red sale que el ipforwarding le asigna el 0 esta bien eso?

  8. admin Dice:

    Si, en algunos scripts de red en determinadas distribuciones lo desactiva, puedes revisar en qué parte con el comando:

    grep -ri “ip_forward” /etc/init.d

    De todas formas despues de reiniciar la red haz un:

    /proc/sys/net/ipv4/ip_forward

    Si el resultado es 1, es que está activo.

  9. eulogio Dice:

    ok gracias

  10. eulogio Dice:

    bueno linux es una plataforma estupenda hasta lo que vi, pero uno tiene que ser perseverante con lo que esta haciendo es verdad, gracias

  11. eulogio Dice:

    nada de nada no puedo espero intentarlo manana porque ahora nop

  12. kerberos Dice:

    hola hice grep -ri “ip_forward” /etc/init.d y me da la siguiente salida:
    *****************************************************************
    /etc/init.d/network: if [ -f /proc/sys/net/ipv4/ip_forward ]; then
    /etc/init.d/network: if [ `cat /proc/sys/net/ipv4/ip_forward` != 0 ]; then
    /etc/init.d/network: action $”Disabling IPv4 packet forwarding: ” sysctl -w net.ipv4.ip_forward=0
    *****************************************************************

    y bueno entre donde dice y es un programa sera que tengo que cambiar ahi tambien el ipforward porque al reiniciar la red sigue saliendo 0 indicando que esta dehabilitado el reenvio de paquetes net.ipv4.ipforward=0 que hago

  13. admin Dice:

    La solución rápida es comentar la linea esa para que no te lo desactive con un # al principio de la línea.

    De todas formas revisa todos los pasos para asegurarte que lo has hecho bien, especialmente el de editar el /etc/sysctl.conf para habilitar el ip_forward

  14. kerberos Dice:

    y bueno la configuracion para la eth1 del tengo que poner la puerta de enlace del proveedor de internet o la dejo vacia o coloco algo?

  15. admin Dice:

    Fijate en el gráfico kerberos, ahi estan todos los parametros de red de cada uno de los interfaces tanto del gateway como de los clientes.

    En el GW solo tienes que tener configurado el eth0 con los datos de tu ISP para la salida a internet, y el eth1 con una ip/máscara de la lan.

  16. kerberos Dice:

    una cosa mas al configurar todo con las iptables tengo que hacer otra instruccion mas de iptables para que los otros equipos tengan acceso a internet ? como por ejemplo poner una rutina que diga que tengo que abrir el puerto 80 a la red lan que tengo?

  17. admin Dice:

    Si tienes el puerto cerrado en el gateway claro, deberás abrirlo para que los clientes puedan usarlo.

    Te recomiendo esta guia de iptables (En PDF):
    http://es.tldp.org/Manuales-LuCAS/doc-iptables-firewall/doc-iptables-firewall.pdf

  18. kerberos Dice:

    nada de nada sera que la configuracion en centos sera diferente porque no puede ni quiere la lan conectarse a internet

  19. kerberos Dice:

    ese manual lo estoy por eso tengo muchas dudas

  20. eulogio Dice:

    hola, disculpa al ponert esas reglas con respecto al iptables que tienes tu deberia borrar las reglas que tiene el gateway y escribir las que tu me sugieres o dejo las reglas por defecto que se crearon al iniciar el equipo

  21. eulogio Dice:

    hola alguien por ahi porfa respondan

  22. admin Dice:

    Debes añadir las reglas a las que ya tengas, al añadir una regla no tienes que reiniciar nada, se aplica instantáneamente, por lo que puedes ir probando si funciona o no, cuando todo funcione bien puedes guardar las reglas para que sean persistentes mediante el comando iptables-save redirigiéndolo al archivo de configuración de iptables en tu distribución o ejecutando:

    /etc/init.d/iptables save

  23. eulogio Dice:

    hola disculpa otra vez estoy configurando un proxy para que de internet a una pc y deberia de dar una politica para que acceda al puerto 80 la pc o Lan? o automaticamente con tus politicas de direccionamiento pueden acceder mi pc o Lan

  24. admin Dice:

    Vaya lio que tienes encima eulogio, un gateway no es lo mismo que un proxy, esta guía es para configurar un gateway, no un proxy.

    Proxy:
    Intermediario que se desempeña como servidor y cliente para recuperar recursos o manifestaciones de recursos en nombre de otros clientes. Los clientes que utilizan un proxy saben que éste existe y que se trata de un intermediario.

    Gateway:
    Intermediario que desempeña el papel de un servidor en nombre de otro con el objeto de suministrar recursos o manifestaciones de recursos del servidor representado. Los clientes que utilizan un gateway saben que éste existe pero no saben que se trata de un intermediario.

    Si lo que tu quieres es instalar y configurar un servidor proxy para tu lan te recomiendo esta guia:
    http://www.linuxparatodos.net/portal/staticpages/index.php?page=19-0-como-squid-general

    Siento no poder ayudarte mucho más ya con esto, todos tenemos obligaciones ;)

  25. eulogio Dice:

    pero esa configuracion deveria funcionar al toce o debo configurar algo mas bueno si es para un gateway, ups perdon si molesto

  26. admin Dice:

    No hay problema, para un gateway es sólo lo que se indica aquí, nada más, no tienes que configurar un proxy ni nada, los equipos de tu red que usen el gateway ya tienen salida directa a internet a través de el.

  27. eulogio Dice:

    mmm nada de nada estoy trabajando con cento5.4 aplique esa configuracion y no pasa nada que raro sera la distribucion

¿Tienes dudas, preguntas o comentarios?.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Iniciar sesión