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.

Manual práctico de Iptables.

O pueden buscar otros de los varios que hay rondando por internet, o simplemente tecleando en su consola:

man iptables


Creative Commons License

 

Esta obra está licenciada bajo una
Licencia Creative Commons Atribución-No Comercial-Compartir Obras Derivadas Igual 3.0 Unported.

Advertisement

3 pensamientos en “Compartir internet con Iptables

Deja un comentario

Fill in your details below or click an icon to log in:

Gravatar
Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.