[ Español | English ]

Compartir la conexión a Internet desde GNU/Linux

Introducción

Este artículo es simple. Básicamente quiero mostrar lo fácil que es configurar nuestro GNU/Linux para compratir la conexión con otros ordenadores. Por ejemplo, cuando tenemos una conexión por módem USB en casa y un amigo viene con el portátil, podemos conectarlos por cable o Wireless y darle conexión a internet de forma muy fácil.

Configurar el kernel

Otra vez, como siempre, configuraremos primeramente el kernel. Así que:

~# cd /usr/src/linux
~# make menuconfig

Es importante tener en cuenta que dependiendo de las versiones del kernel, la configuración para el NAT puede cambiar. Esta configuración está basada en un kernel 2.6.22. Y a continuación, tenemos que marcar las siguientes opciones:

    Networking options --->
      Network packet filtering (replaces ipchains) --->
        Core Netfilter Configuration --->
      • Netfilter Xtables support (required for ip_tables)
      • "mac" address match support
        IP: Netfilter Configuration --->
      • Connection tracking (required for masq/NAT)
      • IP tables support (required for filtering/masq/NAT)
      • IP range match support
      • Full NAT
      • MASQUERADE target support

En los kernels nuevos podemos activar el soporte para filtrado mediante Netfilter y también podemos activar el soporte netlink que acelera la comunicación entre el userland y el kernel. Estas opciones están dentro del menú Core Netfilter Configuration. Aunque con esto ya está toda la parte del kernel, ahora sólo hace falta compilar y reiniciar.

Compartiendo la conexión

Lo siguiente será instalar el paquete iptables. Para ello, en Debian, hacemos:

~# apt-get install iptables

Tras esto, lo único que hace falta es ejecutar un simple comando y ya estaremos compartiendo la conexión a Internet. El comando es el siguiente:

~# iptables -t NAT -A POSTROUTING -s IP/mask -o IFACE -j MASQUERADE
~# sysctl -w net.ipv4.ip_forward=1

En el primero comando, IP se sustituye por la dirección IP de la subred en la que estamos, pero acabando en 0. Es decir, si tenemos la IP 192.168.0.4, pues pondremos 192.168.0.0; o si estamos en la subred 1, pondremos 192.168.1.0. En el mask, pondremos la máscara de subred en decimal, por ejemplo, 255.255.255.0 corresponde a 24. En IFACE ponemos el nombre de la interfaz por la cual nosotros salimos a Internet. Por ejemplo, cuando nos conectamos por módem, será ppp0, cuando usamos Ethernet, será eth0 y así. Se puede mirar haciendo /sbin/ifconfig.

Como nota, yo tengo un par de reglas, para enrutar desde subredes 1 y 2, este es mi script que cargo al inicio para compartir red:

#!/bin/bash
IFACE="eth0"

# Main program
echo -n "Configurando NAT... "
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o $IFACE -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o $IFACE -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>/dev/null
echo "done."
exit 0

Redirigir puertos externos a la red local

Una de las cosas que más utilidad tienen, para mí, es la posibilidad de redirigir cualquier puerto externo hacia un ordenador de la red local interna. Por ejemplo, si tenemos un servidor detrás del firewall (que, en este caso, es nuestro ordenador GNU/Linux haciendo de router), es importante redirigir el puerto de tal servicio al servidor interno.

Si un puerto externo no se redirige al servidor interno, los paquetes que vayan a dicho puerto se quedarán en el router y, como el router no está ejecutando tal servicio, serán descartados. La regla para redirigir un puerto externo a cualquier ordenador que se encuentre dentro de la red local es muy simple:

~# iptables -t nat -A PREROUTING -i INTERFAZ -p PROTO --dport PORT -j DNAT --to DIR_LOCAL

En esta regla, INTERFAZ debe ser reemplazado por la interfaz por la cual entran los paquetes desde Internet. PROTO es el tipo de protocolo, que puede ser tcp o udp. Y finalmente DIR_LOCAL debe ser substituido por la dirección del servidor local dentro de la red. Fijáos en el siguiente ejemplo:

~# iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j DNAT --to 192.168.1.8

Este comando indica que debe haber un servidor web en la red local escuchando en el puerto 80 y que los paquetes que lleguen desde Internet al router deberán de ser enviados a dicho ordenador, que tiene la IP 192.168.1.8.

Espero que no tengáis ningún problema, al menos yo no lo tuve y fue facilísimo. Si tenéis cualquier duda, ya sabéis, ponéos en contacto conmigo.