ECAL: usando un viejo computador con Ubuntu como router

Enviado por clbustos el Dom, 22/10/2006 - 01:05.

Una de las grandes cosas de cambiarse con tu novia es que puedes abrazarla al dormir. Una de las malas es abandonar tu querida y cómoda conexión pppoe por una de cable estática. Claro, la dirección IP es fija, pero estás obligado a usar un router para darle acceso al resto de los computadores.

Como no tengo el presupuesto (todavía) para comprar un router, me puse a buscar en internet soluciones de router por software, tanto para windoze como para linux. Para la ventanita, lo mejor que pille fue 602Lan Suite, que la s tiene todas y es freeware para 5 usuarios o menos: proxy, nat, firewall, servidor http, dns, pop3, smtp.... Todas. Y funciona bastante bien, les diré.

Pero como somos amantes del pingüino, obviamente estarán esperando como hacer un router con linux. En los siguientes párrafos entregaré las indicaciones para el servidor; si alguien lo necesita, después puedo dar algunas sugerencias para los clientes

Lo primero, compren una tarjera de red extra, para dar acceso a su LAN. Aquí en chile, pueden encontrar una decente a menos de $4.000 (6 dólares).

Después, les recomiendo cambiar sus configuraciones de udev para que la designación de eth0, eth1 y demases sea constante. Para ello, deben crear un archivo en /etc/udev/rules.d, el cual yo llamé 10-network_names.rules, con el siguiente contenido

KERNEL=="eth*",SYSFS{address}=="MAC_TARJETA_INTERNET",NAME="eth0"
KERNEL=="eth*",SYSFS{address}=="MAC_TARJETA_LAN",NAME="eth1"

Las mac de sus tarjetas las pueden encontrar haciendo un ifconfig con la cuenta de root. Por ejemplo:

# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:E0:4C:97:7D:B2  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1117472 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1364999 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:700780937 (668.3 Mb)  TX bytes:852627881 (813.1 Mb)
          Interrupt:18 Base address:0xa000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5179 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5179 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1842022 (1.7 Mb)  TX bytes:1842022 (1.7 Mb)

La mac de mi tarjeta eth0 es la que aparece después de HWaddr, la cual sería 00:E0:4C:97:7D:B2

Después, es muy conveniete leer el artículo gentooniano en http://www.gentoo.org/doc/en/home-router-howto.xml.

Para facilitar las cosas, cree un script para /etc/init.d/, llamado iptables.sh, el cual muestro a continuación

#!/bin/bash
### BEGIN INIT INFO
# Provides:     iptables
# Required-Start: networking
# Required-Stop: networking
# Default-Start:        6
# Default-Stop:
# Short-Description: Set iptables
# Description: Set rules for iptables
### END INIT INFO
#
#Version: @(#)iptables.sh 0.1 21-oct-2006 clbustos@_NO_SPAM_htmail.com
#

export WAN=eth0
export LAN=eth1
export ROUTER=192.168.1.1
export CLIENTE1=192.168.1.2

# Función para crear un puerto de reenvío

iptables_forward () {

iptables -t nat -A PREROUTING -p tcp --dport $1 -i ${WAN} -j DNAT --to $2
iptables -t nat -A PREROUTING -p udp --dport $1 -i ${WAN} -j DNAT --to $2
}

do_start () {

# Borrar todas las configuraciones
iptables -F
iptables -t nat -F

# Políticas por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


#Bloquear servicios que sólo deben ser accessibles desde la LAN

iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

# Servicios que deben ser aceptados en el servidor. En este caso, puerto ssh y 80 (http)

iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT
iptables -A INPUT -p TCP --dport 80 -i ${WAN} -j ACCEPT

# Botar paquetes TCP / UDP en los puertos privilegiados

iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

# Agregar reglas para NAT
iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT

iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

# Avisarle al kernel que el reenvío ip es algo bueno
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

# Forward
# Todos los paquetes que se envíen al puerto 50000 se enviarán 
# directamente al computador CLIENTE1
iptables_forward 50000 ${CLIENTE1}

}

do_stop () {
iptables -F
iptables -t nat -F
}

case "$1" in
        start)
                do_start
                ;;
        stop)
                do_stop
                ;;
        *)
                echo "Usage: $0 start|stop" >&2
                exit 3
                ;;
esac

Ven? Nada del otro mundo (claro!). En gentoo, pueden hacer un

rc-update add iptables.sh default

Mientras que en debian / ubuntu se puede ocupar

update-rc.d iptables.sh defaults 95 95

Para que se ejecute automáticamente al iniciarse el computador. Si lo quieren iniciar de inmediato, para probarlo, basta hacer

# /etc/init.d/iptables.sh start

Y, voila! tienen su router rápidamente en linux

Responder

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato