Objetivo: Compartir la conexión a Internet de una máquina en una red local.
Elementos: Como mínimo dos hosts: uno conectado a Internet y que actúa como firewall. Otro conectado a Internet a través del anterior.
Primero configuramos el host que actúa como firewall.
En este host tenemos dos interfaces: uno que recibe la conexión a Internet (ppp0) y otro utilizado para la conexión a la red local (eth0).
Antes de nada levantaremos el interfaz utilizado para la comunicación con la red interna (eth0).
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
Después configuramos el firewall (iptables): primero borramos las posibles reglas anteriores que haya definidas en el firewall:
iptables -F //Borra las cadenas definidas
iptables -X //Borra las cadenas definidas por el usuario
iptables -Z //Zero the packet and byte counters in all chains.
iptables -t nat -F //Borra la tabla ‘nat’, usada para hacer Network Address Translation para paquetes que crean una nueva conexión
Posteriormente establecemos las reglas por defecto:
iptables -P INPUT ACCEPT //Establecemos la política para aceptar los paquetes entrantes
iptables -P OUTPUT ACCEPT //Establecemos la politica para aceptar los paquetes salientes
iptables -P FORWARD DROP //Los paquetes que son enrutados se descartan
iptables -t nat -P PREROUTING ACCEPT //Añade en la tabla nat la política (-P) de aceptación para los paquetes que acaban de llegar
iptables -t nat -P POSTROUTING ACCEPT //Añade en la tabla nat la política (-P) de aceptación para los paquetes que están a punto de salir
Ahora hay que indicar que se marquen los paquetes salientes con su IP de origen con el siguiente comando:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
También indicamos que se efectúe reenvío de IP
echo 1 > /proc/sys/net/ipv4/ip_forward
Aceptar paquetes para reenviar procedentes de la red local
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
Aceptar paquetes para reenviar procedentes de internet de conexiones ya establecidas
iptables -A FORWARD -i ppp0 -o eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
Después de esto, en cada host de la red local debemos configurar sus interfaces. En cada uno haremos lo siguiente:
ifconfig ethX 192.0.0.x netmask 255.255.255.0
E indicamos en la tabla de enrutamiento que la ruta por defecto es la que va por el interfaz eth0 conectado al host que hace las veces de firewall.
route add default gw 192.168.0.1
El último paso es modificar el archivo donde se indican los servidores DNS. Deben ser los mismos tanto en el host que actúa como firewall como en todos los hosts de la red local (/etc/resolv.conf)
Fin.
Referencias:
http://www.ubuntu-es.org/index.php?q=node/10513
http://iptables.rlworkman.net/spanish/chunkyhtml/index.html