viernes, 6 de noviembre de 2015

UTILIZAR LA RASPBERRY COMO PUNTO DE ACCESO WIFI

En este nuevo tutorial, utilizaremos la Raspberry como un punto de acceso "Wifi" y como un servidor "DHCP" para asignar una configuración de red a los clientes que se conecten a él, una vez que se hayan autentificado mediante la clave compartida.

Para ello, necesitaremos dos interfaces de red:
  • Una interfaz de red "Ethernet" que redirigirá el tráfico al router con una ip 192.168.0.101/24.
  • Una interfaz "Wifi" donde los clientes se conectarán con una ip 192.168.2.1/24.
En resumen, nuestro esquema de red será el siguiente:













Para nuestra misión instalaremos el programa que servirá de punto de acceso ("hostapd") y otro que servirá para asignar una ip a los distintos clientes que se conecten al punto de acceso ("isc-dhcp-server").


Pero antes de nada tendremos que modificar las diferentes interfaces de red para asignales una ip estática, si no las tenemos ya configuradas.

$ sudo nano /etc/network/interfaces

Dejamos la configuración de la siguiente forma:
















Reiniciamos nuestra Raspberry y procedemos a instalar los programas pertinentes.

$ sudo apt-get install hostapd isc-dhcp-server

Una vez hecho pasaremos a configurar el servicio "DHCP".

Elegimos la interface que escuchara las peticiones y asignará las direcciones a los clientes. En nuestro caso será "wlan0":

$ sudo nano /etc/default/isc-dhcp-server

Modificamos la última línea:

INTERFACES="wlan0"

Ahora pasaremos a declarar las opciones de la subred "Wifi" en el archivo de configuración general:

$ sudo nano /etc/dhcp/dhcpd.conf

Añadimos las siguientes opciones al final del archivo:


subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.150;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
default-lease-time 1200;
max-lease-time 8500;
option domain-name-servers 192.168.0.1, 8.8.8.8;
}

Si queréis saber mas detalles sobre la instalación y configuración de un servidor "DHCP" en Raspbian, podéis consultarlos en este tutorial que hice al respecto.

Guardado el archivo, procedemos a reiniciar el servicio:

$ sudo /etc/init.d/isc-dhcp-server restart

Si no nos devuelve ningún error, pasaremos a configurar el punto de acceso:

$ sudo nano /etc/hostapd/hostapd.conf

En este nuevo archivo creado, lo rellenamos con los siguientes parámetros:


interface=wlan0
 # Interface para crear el AP.
driver=rtl871xdrv
 # Driver de la tarjeta Wifi.
ssid=Castillo_movil
 # Nombre de la SSID. 
hw_mode=g 
# Modo WIFI.
channel=6
 # Canal WIFI.
macaddr_acl=0 
# No habilitamos las ACL de los filtros MAC de los clientes.
auth_algs=1 
# Para autentificación por clave compartida.
ignore_broadcast_ssid=0
 # Activamos la difusión del SSID.
wpa=2 
# Tipo de WPA 
wpa_passphrase=Nuestra_contraseña
 # Password compartida del punto de acceso.
wpa_key_mgmt=WPA-PSK 
# Controla  los algoritmos de gestión de claves del cliente. 
wpa_pairwise=TKIP 
# Controla el cifrado de datos WPA.
rsn_pairwise=CCMP
# Controla la encriptación de datos WPA2.
max_num_sta=15 
# Número máximo de estaciones que se pueden conectar.
#Activar los registros logs en el archivo syslog.
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

Modificamos la ruta donde se encuentra el archivo de configuración para el demonio en el siguiente archivo:

$ sudo nano /etc/default/hostapd

Incluimos la ruta y descomentamos:

DAEMON_CONF= "/etc/hostapd/hostapd.conf"

Si los drivers y el demonio no nos funcionan, actualizaremos a la última versión del programa a través del código fuente:

$ sudo wget http://adafruit-download.s3.amazonaws.com/adafruit_hostapd_14128.zip
$ sudo unzip adafruit_hostapd_14128.zip

Una vez descomprimido el archivo renombramos el archivo antiguo:

$ sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.old

Trasladamos el demonio de la nueva versión:

$ sudo mv hostapd /usr/sbin

Cambiamos los permisos:

$ sudo chmod 755 /usr/sbin/hostapd



Reiniciamos "hostapd" y si no nos devuelve ningun error, ya podremos conectarnos como clientes desde cualquier dispositivo.

$ sudo /etc/init.d/hostapd restart

Los clientes podrán conectarse a la "AP" mediante la contraseña compartida, pero no podrán conectarse a internet. Para ello deberemos activar la Raspberry para que actúe como router y configurar unas cuantas reglas en "iptables" para que el tráfico de los clientes de la "AP" puedan llegar al exterior.

Lo primero que debemos activar es el bit "IP_FOWARD":

$ sudo nano /etc/sysctl.conf

Descomentamos la siguiente línea:

net.ipv4.ip_forward=1

En nuestro caso, tenemos instalado "UFW" como firewall por lo que editaremos:

$ sudo nano /etc/ufw/sysctl.conf

Modificamos el parámetro:

net/ipv4/ip_forward=1

El siguiente paso será configurar las reglas de tráfico para que sea enrutado de manera correcta.

Abrimos el archivo:

$ sudo nano /etc/default/ufw

Modificando esta línea habilitamos la política del firewall para que acepte por defecto los reenvíos de paquetes:

DEFAULT_FORWARD_POLICY="ACCEPT"

A continuación vamos a añadir la reglas "UFW" adicionales para la traducción de direcciones de red y el enmascaramiento de los clientes VPN:

$ sudo nano /etc/ufw/before.rules

Introducimos esta configuración justo después de esta línea:


# Don't delete these required lines, otherwise there will be error
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Permitir el tráfico WIFI a través de la interface eth0
-A POSTROUTING  -o eth0 -j MASQUERADE
COMMIT 

Para que se apliquen los cambios desactivamos y activamos "UFW":

$ sudo ufw disable
$ sudo ufw enable

Si no tenemos instalado "UFW", basta con aplicar estas reglas mediante "iptables":
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
$ sudo sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Por último, solo nos queda comprobar que el punto wifi está activo y que, una vez autentificados como clientes, tenemos conexión a internet.

























En el servidor, podremos comprobar también que la autentificación del usuario y la asignación de su ip es correcta:

$ sudo tail -f var/log/syslog





En el próximo tutorial configurar un servidor Radius con "freeradius" y así aumentar nuestra seguridad en nuestro punto de acceso "Wifi".

Hasta otra....

7 comentarios:

  1. Hola, he querido seguir los pasos y no he tenido éxito en especial porque no puedo configurar el driver, aquí se habla del rtl871xdrv (que no es mi caso).

    Al hacer un "lsusb" obtengo como resultado: Ralink Technology, Corp. RT3072 Wireless Adapter.

    Tal vez puedas ayudarme con eso porque no he encontrado qué driver tengo que configurar y dado el caso nos ponemos en contacto para no hacer la comunicación de forma tan anónima.

    ResponderEliminar
  2. Hola,
    perdona por no haberte respondido antes pues estas fechas son un poco difíciles para estar conectado.
    Respecto a tu pregunta, no todos los chipset de los adaptadores wifi son compatibles con la raspberry.
    Los puedes consultar en la pagina de Adafruit.
    Necesito saber algo más de tu problema para poder ayudarte, sobre todo que adjuntes los errores de los logs del propio programa "hostapd" o de "syslog" en su defecto para saber si es un problema de drivers o de la propia configuración del "hostapd".
    Te recomiendo que consultes esta página en la cual se habla de tu "chipset" http://www.pi-point.co.uk/documentation/
    Si no encuentras la solución hazmelo saber por e-mail.
    Muchas gracias...

    ResponderEliminar
    Respuestas
    1. Gracias por la respuesta, he estado buscando sin éxito una solución aunque no he podido buscar soluciones porque tengo unos asuntos que resolver (también por eso fue mi demora en contestar). Gracias por la buena voluntad en ayudarme, si llego a un punto sin salida me contactaré contigo para lograrlo.

      Eliminar
  3. Resolví el problema, utilicé otro tutorial que también viene en español (https://geekytheory.com/tutorial-rasbperry-pi-como-crear-un-punto-de-acceso-wifi/). Los pasos aparentemente son los mismos pero en diferente orden, el único cambio que hice fue poner el driver por defecto (comentando la línea del driver).
    Me di cuenta de que los comentarios del archivo hostapd.conf deben empezar con el caracter "#" ya que de lo contrario genera error.
    Seguí con los pasos para integrar el servidor radius y funciona pero no he podido configurar, por ejemplo, un límite de tiempo de uso desde el primer login ya que la documentación es poca.

    Si tienes experiencia en eso tal vez puedas ayudarme.

    ResponderEliminar
  4. Hola, primero perdóname...es verdad que los comentarios con "#" se deben colocar al principio de párrafo... mi intención era que no se incluyera dichos comentarios en el archivo de configuración...de todas formas está corregido de tal forma que se pueda copiar y pegar sin problemas.
    Respecto al ancho de banda, hostapd no incluye ningun opción en donde puedas controlar el ancho de banda como puedes ver aquí http://w1.fi/gitweb/gitweb.cgi?p=hostap.git;a=blob_plain;f=hostapd/hostapd.conf . Solo podrás limitar el ancho de banda utilizando algun programa complementario como coovachilli o wondershaper. este último es el mas sencillo de utilizar ya que te permite limitar el ancho de banda de cualquier interface (en tu caso me me imagino que será wlan0). Tienes un pequeño tutorial en esta dirección http://claves-de-linux.blogspot.com.es/2013/03/wondershaper-limitar-ancho-banda-como.html .
    Espero haberte ayudado....un saludo.

    ResponderEliminar
  5. Buenas tardes, se puede saber cual es el numero maximo de equipos conectado a esta red en algun lado?, es que conecto hasta 8 y todo bien, mas de eso, no se conectan y no se porque.

    ResponderEliminar
  6. Tengo una raspberry PI 3 B+, instale lo siguiente: sudo apt-get install hostapd isc-dhcp-server configure el hostapd.conf :

    Código:
    interfaz=wlan0
    driver=nl80211
    ssid=
    hw_mode=g
    canal=6
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=2
    wpa_passphrase=
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP

    Tengo un D-link DWA-131 802.11n conectado a la raspi.

    Desde diferentes arduinos WIFI me conecto a esta red, pero solo soporta 8 a la vez, creo que debe haber alguna configuración que me falta, he leído la wiki de hostapd https://wireless.wiki.kernel.org/en/use ... on/hostapd Pero sigo sin encontrar la razón.

    Mi pregunta es, ¿el problema es con dhcp o es que desde cualquier antena wifi usando una raspberry no soporta más de 8 conexiones simultáneas?
    muchas gracias

    ResponderEliminar