PDA

Ver la versión completa : Cómo usar un PC con Debian como repetidor de una red Wireless



Fruit
28-08-2010, 18:51
En este post (http://foro.hackhispano.com/showthread.php?t=35705) ya pedí algo parecido a esto. Mi intención era que alguien lo hiciera por mí. Desgraciadamente no lo conseguí :(

Así que me lo monté yo mismo. Los ingredientes:


Un router WiFi de los que regala Telefónica, con salida a Internet.
Un ordenador sobremesa con dos tarjetas de red: una Ralink (rt61pci) a la cual denominaremos de salida y que en mi instalación tiene el alias wlan0 y una Atheros (ath5k/ath_pci) a la cual denominaremos de entrada y que en mi instalación tiene el alias ath0.
Un ordenador portátil, con una tarjeta de red cuyo chipset no viene al caso.


Mi intención era poder usar el ordenador sobremesa como repetidor. Aunque la señal llega perfectamente al ordenador sobremesa, no es así con el portátil. Así que usaré el sobremesa como servidor web y repetidor. Los ordenadores que se conecten al sobremesa estarán en su propio rango de IPs, y se les podrá aplicar un firewall desde el sobremesa sin problemas.

El sobremesa funciona con Debian Lenny, pero estas instrucciones deberían funcionar perfectamente con otras distribuciones de GNU/Linux. Usaremos iptables y dnsmasq, así que si no los tienes instalados, instálalos:


apt-get install iptables dnsmasq

Una de las tarjetas debe permitir el modo Master, es decir, Access Point. No todas lo permiten. En mi caso es una Atheros, y usaré el driver MadWifi (ath_pci) para echarla a andar. Por defecto, Lenny lleva el driver ath5k, no el MadWifi, así que habrá que instalarlo.

Como el MadWifi no es libre, tendrás que activar los repositorios contrib y non-free en tu /etc/apt/sources.list. Una vez lo hayas hecho, actualiza e instala module-assistant, madwifi-tools, madwifi-modules-2.6.26-2-686 (la versión depende de tu kernel, asegúrate de usar la correcta), madwifi-source y las wireless-tools. Compila los drivers MadWifi para tu kernel con:


m-a prepare
m-a a-i madwifi

Descarga el módulo ath5k y posteriormente carga el módulo ath_pci:


modprobe -r ath5k
modprobe ath_pci

Para asegurarte de que todo esté bien, usa:


iwconfig

Y asegúrate de que tu tarjeta Atheros esté ahí, probablemente con el nombre ath0. Si es así, ya podemos continuar.

Conecta la tarjeta de salida al AP, en este caso el router de Telefónica. En este caso usaremos DHCP para obtener la IP, pero puedes especificar una a mano si quieres:


ifconfig wlan0 up
iwconfig wlan0 mode managed essid "El nombre de tu red" key s:La_clave_de_la_red # Si la clave es en hexadecimal, quita el 's:'
dhclient wlan0

Si lo has hecho bien, podrás abrir un navegador en el ordenador sobremesa y acceder a la Web sin problemas. Ahora configuraremos dnsmasq, el cual usaremos de servidor DNS y DHCP para los ordenadores que se conecten al sobremesa.

El archivo de configuración está en /etc/dnsmasq.conf. Ábrelo y busca la entrada interface. Ésta es la interfaz para la cual funcionará dnsmasq. La descomentaremos, y pondremos ath0:


interface=ath0

Más abajo está la entrada dhcp-range, la cual también descomentaremos. Ahí está el pool de ips que dnsmasq dará al recibir peticiones DHCP y el tiempo de expiración de dichas concesiones:


dhcp-range=10.0.0.10,10.0.0.100,12h

Yo puse 12 horas, pero podrías poner infinito sin problemas, siempre y cuando no desconectes demasiado el servidor. Ya está configurado, guarda y reinicia el servicio:


invoke-rc.d dnsmasq restart

Ahora debemos crear el AP. Tiraremos la red:


ifconfig ath0 down

Y ponemos la tarjeta en modo Master. En este caso usaremos wlanconfig, una aplicación que viene con el paquete madwifi-tools:


wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode ap

Configuramos la IP que usará la tarjeta de entrada, es decir, la puerta de enlace para los equipos que a ésta se conecten:


ifconfig ath0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 up

Ponemos un ESSID y una clave, para usar el cifrado WEP:


iwconfig ath0 mode master essid "Frutero" key s:VivanLasPeras

Si no quieres poner clave a la red, quita el key s:VivanLasPeras. Recuerda que es una clave WEP, así que puedes poner una de 5, 13, 16 o 29 bytes.

Una vez realizado este último paso, deberías poder ver la red desde los demás equipos y podrás conectarte a ella, pero no tendrás acceso a Internet y es posible que ni a la red interna. Todo a su debido tiempo. Ahora cargaremos el módulo de masquerade del kernel:


modprobe ipt_MASQUERADE

Usaremos las iptables para redirigir las peticiones desde la red interna hacia Internet. Primero vaciaremos las reglas de iptables existentes para asegurarnos de que no haya nada que haga conflicto. Si ya tenías reglas definidas y te resultaban necesarias, asegúrate de que sabrás restablecerlas después de ejecutar este comando:


iptables -F

Activamos el masquerade con salida a la tarjeta de salida (redundancia):


iptables -t nat -A POSTROUTING -j MASQUERADE -o wlan0

Cerramos todos los puertos del servidor, ya que somos unos maniáticos de la seguridad ;) :


iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

Pero si queremos ofrecer DHCP y DNS, debemos abrir dichos puertos, pero sólo a la red que depende de la tarjeta de entrada:


iptables -A INPUT -p UDP -j ACCEPT --dport 67 -i ath0
iptables -A INPUT -p UDP -j ACCEPT --dport 68 -i ath0
iptables -A INPUT -p UDP -j ACCEPT --dport 53 -i ath0

Supongamos que en el servidor sobremesa tenemos un servidor Web y otro SSH. Abrámoslos al exterior:


iptables -A INPUT -p TCP -j ACCEPT --dport 80
iptables -A INPUT -p TCP -j ACCEPT --dport 22

Ahora sólo nos queda activar el forwarding IPv4 en el kernel:


echo "1" > /proc/sys/net/ipv4/ip_forward

Voilà! Ya está todo cerrado. Vámonos al administrador de redes del ordenador que vamos a conectar al servidor a buscar la red. En este caso, es un Windows 7. Aquí la encontramos:

http://imgur.com/u90JZ.png

Hacemos doble clic en ella, y nos pedirá la clave. La introducimos:

http://imgur.com/1M35Z.png

En pocos segundos, nuestro portátil se asociará al servidor, realizará la petición DHCP y configurará su IP. El milagro se ha realizado:

http://imgur.com/C7Dyb.png

¡Funciona! :D

Ahora, pensemos de otra manera. Cuando reiniciemos el servidor, todos los cambios los habremos perdido. Para solucionar este problema, pondremos todo lo que hemos hecho en un script que ejecutaremos durante el arranque:


#!/bin/sh

# Configuramos la tarjeta wireless que usaremos para conectarnos al router.
ifconfig wlan0 down
iwconfig wlan0 mode managed essid "El nombre de tu red" key s:La_clave_de_la_red # Si la clave es en hexadecimal, quita el 's:'
ifconfig wlan0 192.168.1.40 netmask 255.255.255.0 broadcast 192.168.1.255 up
route add default gw 192.168.1.1 wlan0

# Ponemos servidores de nombres. Estos son los de Google.
echo -e "nameserver 8.8.4.4\nnameserver 8.8.8.8" > /etc/resolv.conf

# Configuramos la tarjeta que usaremos como repetidor, le damos ESSID y
# clave, y la ponemos en modo Master (AP)
ifconfig ath0 down
wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode ap
ifconfig ath0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 up
iwconfig ath0 mode master essid "Frutero" key s:VivanLasPeras

# Cargamos el módulo de Masquerade
modprobe ipt_MASQUERADE

# Vaciamos las reglas existentes
iptables -F

# Ponemos la masquerade
iptables -t nat -A POSTROUTING -j MASQUERADE -o wlan0

# Cerramos todo
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# Abrimos el servidor DHCP y DNS dnsmasq SÓLO a la interfaz del repetidor
iptables -A INPUT -p UDP -j ACCEPT --dport 67 -i ath0
iptables -A INPUT -p UDP -j ACCEPT --dport 68 -i ath0
iptables -A INPUT -p UDP -j ACCEPT --dport 53 -i ath0

# Abrimos unos cuantos servicios que sólo se ejecutarán en el servidor
# Si queremos hacer enrutados desde el exterior al rango 10.0.0.0/24, también
# podremos hacerlos
iptables -A INPUT -p TCP -j ACCEPT --dport 80
iptables -A INPUT -p TCP -j ACCEPT --dport 22

# Activamos el forwarding en el kernel
echo 1 > /proc/sys/net/ipv4/ip_forward

Una buena manera de hacerlo funcionar durante el arranque, es añadiéndolo al fichero /etc/rc.local.

Buena parte de todo esto ha sido inspirado por este artículo (http://www.vias.org/wirelessnetw/wndw_07_06_03.html). No sería juego limpio no mencionarles ;)

Posibles mejoras:

Conseguir que el servidor no use cifrado WEP sino WPA o WPA2.
Montar un servidor squid, con los beneficios que todos os podéis imaginar.


Un saludo, y espero que sirva a alguien.

Cypress
31-08-2010, 04:00
Una pregunta, lo que veo que estás haciendo es un access point, no un repetidor.

Los repetidores replican la señal, son de capa 1, mientras lo que vos describis es convertir tu desktop, en un AP.

Es un buen manual, pero el titulo no es el adecuado :P

Además si tenés ya un modem wifi que ya natea y asigna direcciones ip, para qué vas a querer hacer otro?

Es más útil con un modem adsl, esos PPPoE.

SAludos :)

Fruit
31-08-2010, 07:11
Bueno, desde mi punto de vista es un repetidor ya que me sirve para, ejem, 'evitar la pérdida de señal' :P

Y es que simplemente, la señal que emite el propio router no es lo suficientemente potente como para cubrir todo el rango que necesito.

Ah, y ya conseguí lo del cifrado WPA2-PSK y el Squid. Quizás actualice el tutorial pronto.

Eureka
11-09-2010, 05:02
Felicitaciones Fruit, muy buen material espero pronto tirarme un buen puñal de linux para iniciarme, a ver si primero aprendo a instalar aplicaciones a compilarlas y luego a conectar pcs en redes. Actualiza el Tutorial para leerlo.
Saludos!