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

Imagen de Tatan

todo me resulta, menos la ejecución del script mediante:

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

Muestra:

sudo /etc/init.d/iptables.sh start
sudo: /etc/init.d/iptables.sh: command not found

A ver si me puedes ayudar porfavor,

Salu2

Buena guía.

PD, uso Ubuntu 8.04

Enviado por Tatan (no verificado) el Lun, 21/07/2008 - 14:12.
Imagen de clbustos

Bueno, no guardaste el archivo en /etc/init.d/iptables.sh

La verdad, puedes ponerle el nombre que quieras, pero debe estar si o si en /etc/init.d para que funcione como servicio. Es recomendable, claro está, probarlo en tu home hasta que esté listo.

Enviado por clbustos el Lun, 21/07/2008 - 15:30.
Imagen de leo_

darle permiso de ejecución quizás?

Enviado por leo_ (no verificado) el Mié, 10/09/2008 - 08:47.
Imagen de waldo

bueno no se haber si me podéis ayudar ... he visto en algunos foros ... que es posible realizar esta clase de configuracion... bueno aquí explico ...

Internet accede por un----->usb receptor-->conectado al PC------->Ubuntu como router o (slackware, u otros cdlive)---->tarjeta ethernet rj45-------->Internet sale por cable (directo)----->accede al puerto WAN de un AP o Router físico------->luego Internet puede ser distribuido por wifi o cable.........

pregunto? como hacer esto ...me podeis ayudar ....muchas gracias ...o que me envieis algun tutorial.....
y gracias por vuestro tiempo.....

Enviado por waldo (no verificado) el Mié, 30/12/2009 - 21:11.
Imagen de El tocayo de waldo

En eso sí te puedo ayudar yo. Justo lo acabo de hacer, y funciona.
Creé un archivo que se llama "puente" en /etc/init.d. Se puede llamar "cucurrucucupaloma", si es tu gusto, pero tiene que estar en ese directorio. Como tengo ubuntu y algo de práctica, abrí una terminal y tipeé esto:
sudo vim /etc/init.d/puente, pero en vez de vim puedes usar tu editor de texto preferido. El equivalente de sudo es su en fedora y suse.
De todas maneras, aquí es donde está el sabor. Para los efectos, ppp0 es la conexión de mi adaptador de banda ancha móvil, 192.168.10.1 es el IP de la conexión br0 (puedes poner otra si quieres, no es obligado) y eth0 mi conexión lan, a la que conecto el cable rj45. Y el archivo "cucurrucucupaloma" dice así:
#!/bin/bash

#Creacion del Puente
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 down
ifconfig eth0 0.0.0.0 up
ifconfig br0 192.168.10.1 netmask 255.255.255.0 up

route add default gateway 192.168.10.1

#Compartiendo internet
iptables --flush
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i br0 -j ACCEPT
# iptables -A FORWARD -i eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

...eso es todo lo que tienes que poner en el archivo. Al grabar y salir, tienes que hacer este archivo ejecutable, de nuevo como superusuario. Y dice:
sudo chmod +x /etc/init.d/puente
sino no se te ejecuta más nuuuunnnncaaaaaaa!!!
Configuras el router para que conecte a WAN para que acepte un IP estático. Tu cable rj45 irá desde la respectiva conexión de la computadora, alias eth0, a la conexión WAN del router, la del proveedor de servicio. Esto no lo digo por tí (que sé que no necesitas estas aclaratorias), recuerda que hay una gran cantidad de gente necesitando estas ayudas, y que no están familiarizados con los nombres de los dispositivos como los conocemos los linuxeros curtidos. La conexión LAN que provee tu router, la dejo a tu gusto. Reinicias el router para que hagan efecto los cambios.

Ahora vamos al mambo. Conectas el adaptador usb (que una vez conectado será ppp0) y enlazas a la red móvil. Conectas el cable rj45 (en realidad podía haber estado conectado antes, no cambia nada). Toda conexión a la red cableada debe ser desconectada en el administrador de red (en ubuntu puede ser el Network Manager), sobretodo las que se conectan automáticamente. Ahora sí, vas a la terminal y POR FIN, escribes:
sudo /etc/init.d/cucurrucucupaloma (me imagino que así llamaste al archivo, pudiste haberle puesto "puente", que es más sencillo), y si no te indica ningún error, ya estás compartiendo internet.
Dale las gracias al código de la conexión puente a los muchachos de este post:
http://ubuntuforums.org/showthread.php?t=1305049
La carpintería sí fué mía.
¡Que te aproveche!

Enviado por El tocayo de waldo (no verificado) el Jue, 15/04/2010 - 17:32.

Enviar un comentario nuevo

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