Cómo compartir la conexión a Internet con Linux
Enviado el Thursday, 04 April a las 20:13:20 por Se7eN
Si tienes varios equipos conectados en red, quieres que compartan la conexión a Internet, tu hardware no te lo permite y no estas dispuesto a usar alguno de los subproductos de Microsoft, con este mini-manual podrás configurar un router software en tu máquina Linux para conectar tu red local al resto del mundo sin ninguna complicación.
Lo primero que necesitarás es el código fuente del kernel de Linux. Este mini-manual está escrito para la versión 2.4.x del kernel. Te recomiendo que descargues la versión estable más reciente, en el momento en el que escribo esto se trata de la 2.4.18.
Además, necesitarás las fuentes de IPTABLES 1.2.x, el firewall por excelencia de Linux para esta versión del kernel.
Si nunca has compilado el kernel, debes leer antes el Kernel Howto o su traducción al castellano. Si tienes muy claro el hardware de tu máquina, no tendrás demasiados problemas.
Tras esto, ya podemos empezar.
Todo lo que se indica a continuación lo tendrás que hacer como root.
Primero: Aplicar los parches de IPTABLES al kernel
Como se indica en el kernel Howto, deberemos descomprimir las fuentes del kernel en el directorio /usr/src/linux con la siguiente secuencia de comandos:
cd /usr/src
rm -rf linux
tar xvfz /directorio_donde_se_encuentre/linux-2.4.x.tar.gz
mv linux-2.4.x/ linux/
¡Ojo! Esto es un simple recordatorio. Hazlo sabiendo lo que haces, de otra manera, podrías dañar tu sistema
Ahora descomprimiremos las fuentes de IPTABLES de manera similar en /usr/src/archive/netfilter
mkdir /usr/src/archive
mkdir /usr/src/archive/netfilter
cd /usr/src/archive/netfilter
tar xvfj /directorio_donde_se_encuentre/iptables-1.2.x.tar.bz2
Tras esto aplicaremos el parche:
cd /usr/src/archive/netfilter/iptables-1.2.x
make pending-patches KERNEL_DIR=/usr/src/linux
En este momento se ejecutará un programa que te pedirá que elijas uno a uno los parches que quieres aplicar. Lee cuidadosamente las descripciones y elije si lo deseas o no. Los parches más útiles son los relacionados con el ftp e irc que hacen que estos dos protocolos funcionen a la perfección en las máquinas clientes de la red local. Aunque este paso es opcional, es muy recomendable realizarlo, ya que hay muchos parches que son realmente interesantes de aplicar y que mejoraran el rendimiento y funcionalidad de nuestro router software linuxero.
Si todo ha salido bien visualizaras algo así como "Excellent! Kernel is now ready for compilation.".
Ahora debes comprobar si IPTABLES está instalado en el sistema con el siguiente comando:
whereis iptables
Si no devuelve ningún resultado, deberás compilarlo con estos dos pasos situándote antes en el directorio de las fuentes de IPTABLES (/usr/src/archive/netfilter/iptables-1.2.x)
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
Segundo: Compilar el kernel
De nuevo recuerdo que si esta es la primera vez que compilas el kernel debes leer antes el Howto. Las opciones que detallo a continuación son las recomendadas para que el sistema comparta la conexión lo más óptimamente posible, además, deberás configurar el kernel para que funcione correctamente con todo tu hardware (microprocesador, RAM, tarjeta de red, tarjeta de sonido, etc).
En la configuración del kernel, ya sea más o menos gráficamente (make config/make menuconfig/make xconfig) deberás habilitar las siguientes opciones integradas en el kernel (y) o como módulos (m), las que así lo permitan. Personalmente, integré todas estas opciones en el kernel aunque en el Howto se a?adían como módulos. En cualquier caso funcionará a la perfección, es tu elección.
[ Code maturity level options ]
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
Enable loadable module support (CONFIG_MODULES)
Set version information on all module symbols (CONFIG_MODVERSIONS)
[ General setup ]
Networking support (CONFIG_NET)
Sysctl support (CONFIG_SYSCTL)
Connection tracking (required for masq/NAT) (CONFIG_IP_NF_CONNTRACK)
FTP protocol support (CONFIG_IP_NF_FTP)
IRC protocol support (CONFIG_IP_NF_IRC)
IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)
netfilter MARK match support (CONFIG_IP_NF_MATCH_MARK)
Multiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT)
Connection state match support (CONFIG_IP_NF_MATCH_STATE)
Unclean match support (EXPERIMENTAL) (CONFIG_IP_NF_MATCH_UNCLEAN)
Packet filtering (CONFIG_IP_NF_FILTER)
REJECT target support (CONFIG_IP_NF_TARGET_REJECT)
Full NAT (CONFIG_IP_NF_NAT)
MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE)
Packet mangling (CONFIG_IP_NF_MANGLE)
LOG target support (CONFIG_IP_NF_TARGET_LOG)
TCPMSS target support (CONFIG_IP_NF_TARGET_TCPMSS)
[ Network device support ]
Network device support (CONFIG_NETDEVICES)
Dummy net driver support (CONFIG_DUMMY)
[ File systems ]
/proc filesystem support (CONFIG_PROC_FS)
Muchas de estas opciones no son estrictamente necesarias para el funcionamiento de la conexión compartida pero si muy recomendables ya sea por seguridad, rendimiento o funcionalidad. Para más detalles de nuevo te remito al Howto, donde se detalla para que sirve cada una de ellas.
Tras esto compilaremos el kernel de la manera habitual
make dep; make clean; make bzlilo; make modules; make modules_install
Tercero: Script de inicialización
Una vez arrancado el sistema con el nuevo kernel, debemos crear un script que habilite la conexión compartida. Bajate un archivo de ejemplo aquí.
Modifícalo con tu editor favorito (vi, joe, emacs, etc) y ajústalo a tus preferencias basándote en las explicaciones de los comentarios (las líneas con un # delante).
Para poder ejecutarlo deberás darle permisos de ejecución con el comando:
chmod 700 rc.firewall
Si deseas que este script se ejecute al iniciar el sistema automáticamente deberás añadirlo a tus scripts de inicialización que dependen de cada distribución.
Cuarto: Configuración de los clientes
En el Howto (para variar) podrás encontrar información más detallada sobre como configurar los distintos sistemas operativos del mercado para que aprovechen la compartición de la conexión. Lo que es común en todos es que la "Puerta de enlace" o "Gateway" será la dirección IP en la red de la máquina Linux y además deberás añadir las DNSs de tu ISP (proveedor de Internet) para que el cliente pueda resolver nombres.
Espero que este mini-manual te haya servido de ayuda. Siempre puedes profundizar más en el mundo de IP Masquerade, que evidentemente es mucho más complejo de lo que se detalla en este escrito. Al menos creo que este texto te puede servir de apoyo o iniciación. Si tienes alguna sugerencia o corrección no dudes en comunicarla.