Compartiendo tu conexión a Internet con Linux
El tip de la semana: cómo darle Internet a tu familia para que puedan perder el tiempo con los acertijos de bootlog. O más bien, cómo hacerlo a través de Linux sin tener que pagar por un router!
Asumo que ya tienes los tarros conectados a través de un hub o switch, o de un cable de red cruzado, y que Internet llega vía módem a tu fiel tarro linuxero. Bueno, como todo con el pinguïno, hay más de una forma de hacerlo: vía consola o vía clicks. Yo voto por la primera, porque no hay que instalar nada adicional. Pero si estás buscando la forma fácil de hacerlo, entonces:
- Instala el paquete Firestarter (con Synaptic o apt-get) y sigue los pasos del wizard! Firestarter es básicamente un frontend para IPTables, el poderoso firewall que es parte del kernel de Linux.
- Para abrir algunos puertos (si quieres montar un servidor web, por ejemplo), usa los "policies" de Firestarter. En allow service, elige el puerto que quieras abrir y para quién (para todos, sólo dentro de la red local, o a un rango de IP's).
- Eso es todo! Asegúrate de que el Gateway del otro computador sea la IP que quedó asignada para la segunda tarjeta de red del tarro Linux (la tarjeta que distribuye Internet, no la que recibe).
Y si te sientes valiente como para hacerlo vía consola (directamente con Iptables), sigue leyendo.
Los tres comandos mágicos. Fíjate en lo que viene después, porque quizás tengas que cambiar algunos parámetros.
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE $ sudo iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT $ sudo echo “1” >/proc/sys/net/ipv4/ip_forward
Como decía, ojo, aquí tienes que reemplazar tres cosas: eth0 por la tarjeta que recibe Internet, eth1 por la que esté conectada a la red interna, y 192.168.0.0 por el rango de IP's que vas a usar en esta misma red, que depende del IP que le hayas asignado a la segunda tarjeta. Si no lo has hecho, hazlo ahora (puedes hacerlo en Administración > Redes), o bien a través de este comando:
$ sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0 up
Para redes internas, el rango 192.168.0.0 es el más usado y va desde 192.168.0.1 a 192.168.0.254. Ahora, si quieres abrir puertos hazlo así:
$ sudo iptables -I INPUT -p tcp --dport (PUERTO QUE QUIERAS ABRIR) -j ACCEPT
Por ejemplo, para abrir el puerto 80 (servidor web):
$ sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
O si quieres un mayor grado de control:
$ sudo iptables -A INPUT -s (IP/WILDCARD DE ORIGEN) -i (INTERFAZ DE RED) -p tcp -m tcp --dport (PUERTO DE DESTINO) -j ACCEPT
Por ejemplo, para abrir el mismo puerto (80, que es lo mismo que "www") pero sólo para la red local, y cuando venga a través de la conexión en eth1:
$ sudo iptables -A INPUT -s 192.168.0.0/24 -i eth1 -p tcp -m tcp --dport www -j ACCEPT
¿Todo bien? También puedes ver el listado de reglas de iptables con el comando:
$ sudo iptables -L
Y para guardar tus nuevas reglas:
$ sudo iptables-save
Al igual que antes, asegúrate de configurar el otro computador para que su gateway sea el IP de la tarjeta de red que distribuye Internet. Veamos un ejemplo básico:
1. Computador con Linux que comparte Internet Primera tarjeta de Red » Conectada a Internet, recibe el IP dinámicamente por DHCP Segunda tarjeta de Red » Conectada a la red interna, IP 192.168.0.1
2. Cualquier otro tarro que esté conectado a la red interna (Windows, Linux o Mac, da lo mismo) IP: 192.168.0.2 Puerta de Enlace (Gateway): 192.168.0.1 DNS: Fija los DNS que tenga el primer tarro, se pueden ver en la configuración de red o en /etc/resolv.conf
Eso es todo. ¿Con ganas de aprender más? Aquí hay unos ejemplos de reglas con iptables que te pueden servir. Y por acá un listado los puertos más comunes, entre los que están:
FTP: 21 SSH: 22 Telnet: 23 SMTP (mail): 25 DNS: 53 DHCP: 68 WWW: 80 POP3: 110 Samba (para compartir redes Windows): 139 IMAP: 143 BitTorrent: 6881 Emule: 1213
¿Todavía sigues ahí? ¡Felicitaciones! Bueno, si andas con tiempo, puedes probar qué tal quedó tu firewall con FTester. Para más información sobre cómo compartir internet (llamado IP Masquerading) y sobre Iptables, te recomiendo el Howto del Linux Documentation Project. Otra buena referencia es el Wiki de Ubuntu.