lunes, 9 de junio de 2008

Fonera como repetidor WPA2-PSK: Primer intento

Después de media mañana y toda la tarde he conseguido poner la Fonera (con Kamikaze 7.09) como repetidor de WPA2-PSK. Aunque el resultado no es el ideal al menos proporciona la funcionalidad básica.

Las pegas de esta configuración son:

  • No retransmite tráfico que no sea IP, como por ejemplo el DHCP o las cosas raras de Windows. Por lo que los clientes que se conecten a través del repetidor tendrán que tener IPs fijas.
  • Es necesario configurar más cosas de las realmente necesarias, bueno, solamente el gateway.
  • Actualización: va bastante mal.

Arquitectura

La idea que tenía para montar el repetidor era crear un interfaz de punto de acceso, otro de estación y puentearlos, junto con el de cable.

El problema parece que es que los puentes de Linux no funcionan del todo bién con los interfaces wireless. En mi caso un puente con eth0 y ap (WPA2-PSK) funciona perfectamente, pero la pruebas que hice incluyendo un cliente (sta) no me funcionaron. No recuedo si con WEP no hay probemas, pero con WPA2-PSK no hay forma.

Después de darle muchas vueltas, por lo visto hay un programa, parprouted, que se encarga de "puentear" interfaces aislados, escuchando las peticiones ARP, mandándolas por los otros interfaces y añadiendo las rutas específicas.

Configuración

Lo primero es eliminar el puente de la interfaz cableada, ya que no se van a utilizar. La IP que tenga tiene que ser de la subred que se vaya a retransmitir, también tenemos el gateway por defecto y los DNS. En /etc/config/network:

...
config interface lan
option ifname eth0
option type bridge
option proto static
option ipaddr 192.168.2.200
option netmask 255.255.255.0
option gateway 192.168.2.1
option dns "80.58.61.250 80.58.61.254"
...

y reiniciando la red se ve que el eth0 ya no está en el puente, que se puede borrar:

root@OpenWrt:/# /etc/init.d/network restart
root@OpenWrt:/# brctl show
bridge name bridge id STP enabled interfaces
br-lan 8000.000000000000 no
root@OpenWrt:/# brctl delbr br-lan

Otra cosa que hay que eliminar es el firewall, ya que se quiere comunicar todos los interfaces:

root@OpenWrt:/# /etc/init.d/firewall stop
root@OpenWrt:/# /etc/init.d/firewall disable

Tras esto montamos la parte wifi, empezando por la parte que funciona de punto de acceso (ap), ya que tiene preferencia en la numeración de los athX, tomará siempre ath0. Instalamos:

root@OpenWrt:/# ipkg install hostapd-mini

configuramos los parámetros wifi apadiendo en /etc/config/wireless:

config wifi-iface
option device wifi0
option mode ap
option ssid WLAN_7A
option encryption psk2
option key kakafuti

y le ponemos otra IP de la subred:

config interface ap
option ifname ath0
option proto static
option ipaddr 192.168.2.201
option netmask 255.255.255.0

Y reiniciando la red ya se podría comprobar a acceder desde otro dispositivo wifi con IP fija y hacer ping a su IP.

Ahora pasamos a configurar el otro extremo que se el modo estación (sta). Se intala:

root@OpenWrt:/# ipkg install wpa-supplicant

y se configura en /etc/config/wireless:
config wifi-iface
option device wifi0
option mode sta
option ssid WLAN_7A
option encryption psk2
option key kakafut

y en /etc/config/network:

config interface sta
option ifname ath1
option proto static
option ipaddr 192.168.2.202
option netmask 255.255.255.0

Y se podría probar a acceder al punto de acceso original, incluyendo una ruta para que se salga por este interfaz, al hacer añadido IPs de la misma subred en todos los interfaces:

root@OpenWrt:/# /etc/init.d/network restart
root@OpenWrt:/# ip route add 192.168.2.1/32 dev ath1
root@OpenWrt:/# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=5.9 ms

Por último lo que queda es hacer que se comuniquen todos los interfaces, para lo que usamos el demonio parprouted:

root@OpenWrt:/# ipkg install parprouted

y lo configuramos en /etc/default/parprouted:

OPTIONS="$lan_ifname $wifi_ifname"
OPTIONS="eth0 ath0 ath1"
y hacemos que el demonio se active al arrancar:
root@OpenWrt:/# /etc/init.d/parprouted enable
Con esto ya se podría acceder al repetidor y funcionaría como si se accediese al punto de acceso original, pero al trabajar solo a nivel IP, si se quiere acceder a fuera de la red no funciona,es necesario añadir una ruta para el acceso al exterior. Pero esta ruta tiene que ser a través del interfaz sta (ath1) pero al configurarlo con /etc/config/network siempre se asocia a eth0, por lo que se hace la chapuza y se modifica en /etc/init.d/parprouted, que se lanza después de la red (ver /etc/rc.d):
...

start() {
ip route replace default via 192.168.2.1 dev ath1

[ -f $DEFAULT ] && . $DEFAULT
$BIN $OPTIONS
}

...

Es una chapucilla, pero funciona.

Con esto ya se podría pasar a reiniciar:

root@OpenWrt:/# reboot

y ver si funciona.

Pruebas

Se comprobó que desde mi Wii se podía acceder a internet (con IP fija, pero no con IP dinámica), y si se apagaba el repetidor la comunicación continuaba con el punto de acceso original. Con lo que se comprueba que no hay problemas al utilizar un mismo SSID como ap y como sta.

Mejoras

Para mejorar el sistema se podría probar con:

  • Utilizar el demonio dhcp-forwader, para que el DHCP funcionase y no fuera necesario utilizar IPs fijas. Estuve probándolo pero no conseguí que funcionase.
  • Eliminar tantas IPs de red. Según la documentación del parprouted solo es necesario que todos los interfaces tengan IP, aunque no la de la subred que se vaya puentear. Si se pusiera una de la red en el interfaz ap, lo mismo se solucionaba lo de las rutas y bastaría con una sola IP de gestión. No lo hize por miedo a quedarme sin acceso por cable a la Fonera.
  • Investigar como se podría hacer un verdadero puente, con ebtables o ...
  • Si se utilizan varios repetidores en cascada hay que tener cuidado de que no se asocien en bucles, por lo que habría que indicar las MACs.
Referencias

1 comentario:

  1. estimado compañero, viendo sus avanzados conocimientos en la fonera wpa y conocimientos de redes en general, me gustaria preguntarte si es posible hacer que la fonera al conectarse al wifi del vecino, se pusiera a sacar fotos desde las webcams que la red tenga conectadas, al mismo tiempo que pone una musiquilla sujerente que anime a hacer un striptis a la vecina.
    Ademas mi madre me ha dicho que necesita un dispositivo de red capaz de detectar cierto numero de ataques que realiza mi perro contra la cortina del salon, la tiene realmente jodia, y que a ver si con una actualización pudiera la fonera recojer las cagaitas que el mu cabron va dejando por la casa.
    Seria interesante ademas conseguir que la fonera se infiltrase en sistema de alcantarillado de mi calle, que se hizo en tiempos de Marujita la Fantastica. Este finde el vecino se puso a vaciar la piscina y se me inundó el cuarto baño. A ver si la fonera es capaz de detectar eso, juankear la wifi del vecino, cagarse en su puta madre, cerrar el grifo y mandarme un correo de aviso, que no veas como jode recojer 800 cubos de agua.
    Tambien necesito, y seguro que eres capaz de hacerlo, que la fonera me de la combinacion ganadora del Euromillon, estoy dispuesto a compartir una pequeña parte del premio contigo. Si no es capaz de hacer esto, que me consiga al menos un curro mejor, que no todos tenemos la suerte de que se nos acabe el contrato y nos paguen un año de paro ¬¬
    Y puestos a pedir, compilame los paquetes amule, mdk3 (con soporte wpa*) y wessid para que chuten bien en la fonera, que soy incapaz de encontrarlos.

    SUERTE!!

    ResponderEliminar