Wifi vecinal howto (o how not to:)

Pues que quería montar una red wifi que sea un tanto extensa, abierta pero que los queridísimos usuarios que la utilizen no me toquen (o intenten) las configuraciones de los acces point o del ruter adsl. Un diagrama podria ser:




Para esta practica he usado como puntos de acceso los ruter wifi Linksys WRT54GL y les he instalado el firmware de dd-wrt (version mini).

  1. Instalar el firmware ddwrt tal y como especifican en su página web.
  2. Accedemos al acceso web del ruter wifi.
  3. Activo la opción de telnet y jffs. Telnet para poder acceder con facilidad a la shell del ruter wifi y jffs para tener un espacio para poder guardar nuestras cositas.
  4. Activo la opción de isolate AP, de esta manera dos ordenadores conectados a la red inalámbrica no se vean entre ellos.
  5. Desactivo el acceso web de administración des de la wifi y también cambiamos el password de administración, claro está...
  6. Configuramos el ruter wifi de manera que tenga una IP de internet (192.168.1.4) y una IP de la red "cliente" (192.168.100.1). Ambas tienen como gateway o puerta de enlace la 192.168.1.1 que no es mas que el ruter adsl.
Leyendo un poco de información sobre los linksys wrt54gl nos enteramos que usan 2 interfícies de red:
  • br0 = puente entre la vlan0 (los 4 puertos rj45 traseros) y la eth1 (wifi)
  • vlan1 = puerto rj45 etiquetado como "INTERNET"
En el caso anterior, he configurado la vlan1 como 192.168.1.4 (dentro del rango de la red del ruter adsl) y br0 como 192.168.100.1 que es por donde se conecta la peña.

Lo último que queda es evitar que la gente intente conectarse a los aparatejos, por ello hago lo siguiente:
  1. me conecto por telnet al ruter wifi (creo que usuario era root y el password que hayamos configurado)


  2. hago script en /jffs, por ejemplo /jffs/fw.sh y lo hacemos ejecutabe (chmod 700 fw.sh)

    INET=192.168.1.4
    WIFI=192.168.100.1
    
    #limpieza
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    iptables -F
    iptables -t nat -F
    
    #dejamos accederal ruter solo desde el puerto de INTERNET (vlan1)
    iptables -A INPUT -i vlan1 -j ACCEPT
    
    #los clientes necesitan dns y dhcp
    iptables -A INPUT -i br0 -p udp --dport 53 -j ACCEPT
    iptables -A INPUT -i br0 -p udp --dport 67 -j ACCEPT
    
    #no dejo que los clientes vean la red del ruter adsl
    iptables -A FORWARD -i br0 -d $INET/24 -j DROP
    
    #el ruter wifi = gateway de los clientes -> necesario nat
    #para que el r. adsl sepa que hacer con los paquetes
    iptables -t nat -A POSTROUTING -o vlan1 -j SNAT --to-source $INET

  3. ejecuto el script y compruebo que funcione correctamente, si falla, reset y se revisa.
  4. guardo los cambios permanentemente
    nvram set rc_startup="/jffs/fw.sh"
    nvram commit
Lo que estamos haciendo es montar la red 192.168.1.x donde conectamos el ruter adsl (192.168.1.1) con uno o varios ruters wifi por sus interfícies de INTERNET (vlan1 o 192.168.1.4 en mi caso).

Los clientes detectan la wifi, se conectan y el dhcp les asigna una ip de la red 192.168.100.x. Como los clientes y el ruter adsl estan en rangos diferentes, el ruter wifi hace de NAT.

Conseguimos que los clientes no se ven entre ellos (isolate ap) y tampoco ven la red 192.168.1.x.

Si que es verdad que existe un problema: si un cliente de un wifi intenta conectarse a _otro_ ruter wifi, si que podria, por culpa del NAT. La solución: rascar-se el bolsillo y conectar los diferentes ruters wifi en un switch "inteligente", en vlans diferentes. Bueno y en ese caso, ya te olvidas de poner el NAT en cada antena, sino que pones rutas estáticas en el _router_ adsl y así guardas te ahorras memoria en la antena wifi :D

Mola

Comentarios