Compartir la conexión a Internet de la casa

Tuve que volver a reconfigurar mi Linux para compartir conexión a Internet.

Hace un par de días “actualicé” mi máquina de la casa a Ubuntu Hardy Heron 8.04. En realidad no fue una actualización, sino que decidí reformatear y particionar nuevamente el disco: 10 Mb para el sistema y 30 Mb para /home, es decir para los datos de los usuarios. La formatié para quitarle Windows EP que aún le quedaba y que hace más de un año nadie usaba.

Como esta instalación implicaba borrar todo de la compu, hice un respaldo de los datos de usuario. Pero desafortunadamente se me olvidó respaldar los archivos de configuración que tenía preparados para compartir Internet.

Lo que tiene la máquina

Veamos, la máquina tiene dos interfaces:

  • eth0 está conectada a internet, en realidad está pegada a un concentrador o un suiche que a su vez está pegado a un modem ABA de CANTV. Solo me dieron el cable y la condición de que solo conectara una máquina y que solo tomara una dirección IP de las que da CANTV con su DHCP.
  • eth1 está conectada a un cable de red cruzado. Elegí un cable cruzado porque así no necesito conectar un suiche entre la máquina de mi casa y mi laptop. Por cierto, solo tengo dos máquinas así que prefiero un cable cruzado que tener más cables, enchufes y cachivaches de red por allí.

Con Feisty, inicialmente tenía una sola interfaz, eth0 es la red integrada. Pero cuando le puse la otra tarjeta esta tomó eth0 y la integrada a veces tomaba eth1 y a veces eth2. Menos mal que ahora cada interfaz se queda siempre con su nombre y no cambian cada vez que enciendo la computadora.

Lo que instalé

Pues ya con el sistema instalado, lo que necesitaba básicamente es un servidor DHCP y unas reglas de ruteo.

Para instalar el servidor dhcp:

sudo aptitude install dhcp3-server

Luego hay que editar dos archivos, el primero le indica al servidor DHCP sobre cuál de las interfaces de red debe servir DHCP (en mi caso eth1 que representa mi red interna); el segundo indica la configuración DHCP y el rango de direcciones que se pueden servir.

Dirección IP de la interfaz eth1 y configuración de eth0

Antes de configurar el servidor DHCP la interfaz eth1 debe tener una IP fija que los clientes de la red interna puedan encontrar; mientras que la interfaz eth0 debe tener una IP variable que toma directamente del ABA de CANTV.

Ahora vamos a ver cómo se configuran las interfaces para que puedan ser reconocidas correctamente por el servidor DHCP y que luego funcionen la reglas de ruteo.

camilo@paraguachoa:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
pre-up /etc/network/compartirinternet_eth1.sh

auto eth1

iface eth0 inet dhcp

auto eth0

Se observa que eth0 se configura automáticamente con DHCP que obtiene directamente de CANTV; mientras que eth1 se configura manualmente con la dirección 192.168.0.1 para que pueda ser ubicada como router por los clientes. Notar que en pre-up se corre un script para compartir la conexión, este script lo veremos al final.

Indicar la interfaz que hará DHCP

Ahora si hay que modificar los archivos del servidor DHCP. Uno para indicar cual tarjeta de red servirá DHCP y otro para indicar las reglas del servicio DHCP.

camilo@paraguachoa:~$ cat /etc/default/dhcp3-server
INTERFACES=”eth1″

Como se ve, solo contiene una linea indicando la única interfaz que servirá DHCP, esto implica que la interfaz eth0 no servirá DHCP. Esto para evitar interferir con el DHCP de CANTV.

Reglas para servir DHCP

Hay que indicarle al servidor DHCP las configuraciones que le va a dar a los clientes:

camilo@paraguachoa:~$ cat /etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name “cantv.net”;
option domain-name-servers 200.11.248.12, 200.44.32.12;
default-lease-time 43200;
max-lease-time 86400;
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.20;
option routers 192.168.0.1;
}

Observar básicamente que hay que colocar los servidores DNS de CANTV que es el proveedor ISP. También se ve que el rango de direcciones IP a servir es de 192.168.0.2 a 192.168.0.20. Esto significa que los clientes van a tomar solo estas direcciones. En la realidad, como tengo solo una máquina cliente, esta siempre está tomando la dirección 192.168.0.20.

El router es la dirección que usarán los clientes (en mi caso la laptop) para buscar la salida a internet. Esta dirección debe corresponder a la dirección de la interfaz eth1.

El Script de IPTABLES

Por último, para hacer el ruteo utilicé este script de iptables que ya tengo configurado. Este es el mismo que me funcionaba en Feisty. Básicamente le dice al sistema que enrute el tráfico de la interfaz eth1 a través de la eth0:

camilo@paraguachoa:~$ cat /etc/network/compartirinternet_eth1.sh
#!/bin/sh
##
## masquarading_from_eth1_to_eth0.sh
##
## Made by root
##
##

UNIVERSE=eth0
DMZ=eth1

#
# delete all existing rules.
#
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state –state NEW -i ! $UNIVERSE -j ACCEPT
/sbin/iptables -A FORWARD -i $UNIVERSE -o $DMZ -m state –state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i $DMZ -o $UNIVERSE -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o $UNIVERSE -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

Listo! Ya tengo la Internet compartida.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s