Compartir internet con Iptables
Algo que seguramente nesecitaremos hacer si tenemos una red local (lan), y queremos compartir internet a los demás ordenadores pero no tenemos un router o switch, así que lo hacemos con nuestro ordenador que tiene GNU/Linux.
La mejor opción para estos casos es usar Iptables. ¿Por qué?. Iptables viene incluido en casi todas las distribuciones de GNU/Linux; es más seguro porque viene integrado al Kernel (no como los programas de firewall que escuchan en determinado puerto) y con un par de comandos puedes realizar fácilmente lo que te propongas hacer.
Iptables funciona de la siguiente forma:
iptables
-tabla
–comando cadena
—regla
—-objetivo
O sea, debemos llamar a iptables, especificar en que tabla se actuará (en cual se agregarán, eliminarán o modificarán datos), definir una acción a realizar, que reglas y condiciones le aplicamos a esa acción a realizar, y el objetivo (a que cosa/s va a afectar).
Bien, veamos como realizar dicha tarea con el típico ejemplo de red:
Tenemos varios ordenadores en nuestra red, cada cliente tiene por lo menos una interfáz de red y el server tiene dos o más (una para recibir la conexión de internet y la otra/s dependiendo de la cantidad de clientes que sea igual a las de los mismos).
En este ejemplo se tendrá un ordenador servidor con dos interfaces de red (eth0 y eth1).
Por eth0 recibe la conexión a internet y por eth1 se comunica con el ordenador cliente que hay en la red.
Pero antes de configurar a donde enviaremos los paquetes que lleguen de internet a los demás ordenadores (y viceversa), debemos activar el reenvío de los mismos, o sea, hacer un ipforwarding. Entonces en nuestro server, como root hacemos:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Ahora debemos agregar los comandos a Iptables para que nos permita el recibir y enviar paquetes (desde y hacia internet) con los demás ordenadores.
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-t = Especifica la tabla de reglas, en este caso nat.
nat = (Network Address Translation). Es la tabla de manipulación de direcciones y puertos.
-A = Agrega un comando o una regla a la tabla.
POSTROUTING = Modifica el destino del paquete/s luego de que se decide si irá al ordenador local (server o el que tiene el firewall) o a otro ordenador de la red.
-o = Sirve para especificar la interface
eth0 = La interface de red a la que se sale a internet.
-j = Aplicar
MASQUERADE = Enmascarar. Significa que el router (en este caso nuestro ordenador hace de router con Iptables) reemplaza la información que viene de un paquete, o sea, le pone su propia IP y número de puerto y lo envía a su destino. Los paquetes de regreso llegan al router y este revisa a que ordenador van dirigidos (de los que estén especificados en el mismo router), les quita el enmascaramiento y los envía al host que envió la petición origen.
Todo bien con esto, pero así se enmascararían todos los paquetes que pasen por nuestra interface que conecta a internet. ¿Que pasa si queremos nada más enmascarar el rango de IPs de nuestra red? Con esto podríamos evitar que se use nuestra conexión externamente para enmascarar sus paquetes.
Si el rango de IPs de nuestra red es el típico 192.168.0.x hacemos:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24
Con eso especificamos que se enmascaren solamente los paquetes enviados por las IPs 192.168.0.0 hasta 192.168.0.255. El /24 sirve para especificar la máscara de red (que naturalmente debe ser 255.255.255.0). En caso de tener además de ese rango por ej, tienen el 192.168.1.x solo deben agregar la misma regla una vez más, pero cambiando el 192.168.0.0 por (obviamente) 192.168.1.0.
Para no tener que hacer esto cada vez que reiniciamos el ordenador, nos conviene guardar los comandos en algún script que se ejecute al iniciar (como /etc/rc.local). Simplemente ponemos un comando por línea y las órdenes se ejecutarán durante el booteo de tu GNU/Linux.
Si tienen dudas o quieren hacer alguna otra cosa pueden leer alguno de estos manuales
Linux data inf – Como configurar una red con un firewall.
O pueden buscar otros de los varios que hay rondando por internet, o simplemente tecleando en su consola:
man iptables

This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.