sábado, 7 de febrero de 2015

Creando un Access Point (AP con Linux).

Cada vez me va siendo más molesto dejar la clave de acceso a wifi a cualquier invitado. Molesto porque además del equipo doméstico o el portátil, ahora tenemos varias tablets por casa, los móviles sin SIM, las diversas consolas de juegos, la smartTV, en fin un auténtico ejército de pequeños aparatos que hemos de  volver a configurar cada vez que cambiamos lo clave de cifrado.
La situación en mi caso se agrava porque de vez en cuando mi casa se convierte en un salón de juegos donde mi hijo y varios amigos quieren conectarse con su consolas para jugar en red (¿donde está el parchis?).
Al final pensé que lo mejor era crear una wifi específica para que pudieran jugar. Aproveché mi portátil donde tengo instalado el Back Track y la antena wifi Alpha.
El objetivo es conseguir que este equipo con una de las antenas se conecte a mi router wifi para salir a internet y la otra sirva como AP para la red de juegos que voy a crear. No es necesario disponer de dos antenas Wifi, podría haber conectado el equipo al router por cable y usar la antena wifi incorporada para dar servicio AP, pero por comodidad y como tengo dos antenas he preferido trabajar así.

Paso a paso. 


Los pasos a realizar son:


  1. Verificar que tenemos conexión a Internet por uno de los adaptadores.
  2. Colocar el otro adaptador wifi en modo monitor
  3. Activar ese mismo adaptador como AP y configurar la red
  4. Activar NAT con iptables
  5. Configurar dhcp para dar direcciones a los equipos que se conecten a esta red
  6. Arrancar dhcp. 


Como son bastantes pasos y de lo que se trata es de trabajar poco busqué por ahí alguna idea sobre como programar todo esto y de  easy-creds extraje la  información y parte técnica programada como para hacer más fácil esta tarea.

Pero antes de empezar a comentar el script veremos algunos datos de la configuración a la que voy a llegar

Red privada: 192.168.1.0/24  con adaptador wlan0 y conectada al Router Wifi
Red de juegos: 10.0.0.0/24   con adaptador wlan1 - Este adaptador funcionará como Access Point


EL Script AP.py se encarga de realizar todos los pasos anteriores.

La línea principal del programa es:

  • Obtenemos la lista de interfaces
  • Si hay alguna interfaz en modo monitor la paramos. 
  • Verificamos que tenemos activa una conexión con internet
  • Buscamos si tenemos otra interfaz wifi disponible para el AP
  • Preparamos iptables




  • Arrancamos la interfaz en modo monitor 
  • Arrancamos el AP sobre la interfaz que tenemos en modo monitor
  • Configuramos el dhcp
  • Arrancamos el dhcp


  • Dejamos el programa en un bucle continuo que nos muestra el AP 




La rutina de cleanup se invoca al salir del bucle con ctlr+c y deja situación igual a como estaba antes de la llamada al programa (bueno, casi).

Trabajando con las interfaces. 

La lista de interfaces se obtiene mediante un  "parser" de la salida del comando iwconfig que nos da una lista con los interfaces  y aquellos que están en modo monitor.

Salida del comando iwconfig


 Rutina que procesa el comando iwconfig



Si encontramos alguno en modo monitor lo que hacemos es pararlo ya que lo necesitaremos para nuestro AP.
Luego buscamos si existe un interfaz activo y conectado. Si existe devolvemos la primera parte de la dirección que se corresponderá con una de las direcciones corrientes para las IP privadas.
Esta información no será util posteriormente para configurar la nueva red. Más adelante veremos como asignaremos como dirección de la nueva red: 10.0.0.0/24 o 192.168.1.0/24 según sea el valor del prefijo de la red que está con conexión a internet.
Cuando ya tenemos localizada la conexión internet buscamos otro adaptador wifi que será el que usaremos para el AP.
Ahora hemos de preparar iptables.

Creando las reglas de iptables.




Primero limpiamos las reglas previas que hubiera tanto en la tablas filter como en las tablas nat

Antes de explicar la siguiente regla para iptables, vay a explicar un poco que es la tabla nat.
En la tabla nat se definen las reglas para modificar paquetes. Existen dos momentos en los que se puede realizar esta modificación: según entra el paqueta a la máquina (PREROUTING) y antes de salir de la misma (POSTROUTING).
En nuestro caso vamos a realizar la modificación justo antes de salir del sistema. La elección de un momento un otro depende de si queremos o no que actuen otros filtros. Por el momento como no tenemos otros filtros daría igual donde se colocara pero, como veremos más adelante, lo correcto es especificar POSTROUTE. Como condición de selección de paquetes establecemos que sean todos aquellos paquetes que van a salir con la interfaz de conexión a internet. Y la acción es que haga un enmascaramiento de red. Para saber más sobre enmascaramiento de red en particular e iptables en general aconsejo leer este enlace:

http://www.pello.info/filez/firewall/iptables.html



Y, por supuesto, ponemos una regla para la tabla filter para impedir que accedan a nuestra red particular. Por esta razón es por la que se ha colocado la modificación nat en POSTROUTE para que tenga efecto este filtro.

Luego permitimos que el sistema permita el forwarding de paquetes.

Preparando el Access Point


Arrancamos el modo monitor para poner la tarjeta en modo promiscuo y capturar todo lo que hay por el aire. Cuando ponemos una tarjeta en modo promiscuo se nos define un interfaz virtual con nombre monX (0, 1, ...).



Sobre esta interfaz virtual arrancamos el Access Point que nos crea otro interfaz virtual: atX (0, 1, ....).


Configuramos este interfaz con la dirección de red que queramos asignar y que irá en función del valor de la red conectada a internet. Asi diferenciamos bien una red de la otra.

Ya solo nos queda definir el dhcp que hacemos de forma dinámica, aunque si lo tenemos ya configurado, podemos borrar este paso.



Y por fin arrancamos el servidor dhcp.



A partir de este momento tenemos nuestro AP y arrancamos otro equipo con wifi podremos ver el essid 'pajuga'




¡¡¡Ya tienen los chicos su red aparte para sus mundos virtuales de juego!!!


No hay comentarios:

Publicar un comentario