ECAL: usando un viejo computador con Ubuntu como router
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
- 3367 lecturas

Enviar un comentario nuevo