Configurar Raspberry Pi como AP

Introducción

En el proyecto que estoy desarrollando actualmente, he necesitado configurar una raspberry Pi como cliente wifi y como access point. Es decir, necesito conectarme a un router wifi (cliente) y que clientes se conecten al wifi que está emitiendo la rapsberry (AP).

En la teoria podemos usar el propio adaptador integrado de la raspberry para ambos funcionamientos, sin embargo yo no he logrado hacerlo funcionar y he necesitado usar una antena wifi externa [1]. Para la realización de este artículo he seguido el  post de imti[2]; al seguir ese tutorial he visto que algunas cosas explicadas no me han funcionado y he necesitado realizarlas de otra manera.

Desarrollo

Configuración Wifi

El adaptador usado es plug&play en raspbian jessie lite (Release date:2017-07-05) por lo que no hará falta instalar ningún driver, tan sólo necesitaremos realizar la configuración de la red wifi. Para ello editaremos el fichero /etc/network/interfaces y añadiremos la siguiente información:

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto wlan0
iface wlan0 inet dhcp
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

auto uap0
iface uap0 inet static
address 192.168.50.1
netmask 255.255.255.0
network 192.168.50.0
broadcast 192.168.50.255
gateway 192.168.50.1

Nota: En mi caso particular he decidido usar el rango de IP 192.158.50.0. En caso de querer usar otro rango se deberá cambiar las direcciones indicadas en el artículo por el deseado.

Con esta configuración hemos establecido que el dispositivo wlan1 (adaptador externo) será el encargado de conectarse al wifi (líneas 9 a 11), el dispositivo wlan0 (adaptador integrado) no se conectará (líneas 13 a 15), y crearemos el adaptador virtual uap0 que será el encargado de gestionar el punto de acceso (líneas 17 a 23).

Una vez reiniciamos el sistema, comprobaremos que la conexión ha tenido efecto.

pi@zero:~ $ ifconfig

uap0 Link encap:Ethernet HWaddr b8:27:eb:59:34:1f
inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::adf4:9d27:853b:3999/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:22430 (21.9 KiB)

wlan0 Link encap:Ethernet HWaddr b8:27:eb:59:34:1f
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan1 Link encap:Ethernet HWaddr 00:0f:00:31:5d:26
inet addr:192.168.5.167 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::236c:b228:5d96:b0c4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4737 errors:0 dropped:3 overruns:0 frame:0
TX packets:244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:637377 (622.4 KiB) TX bytes:30171 (29.4 KiB)

También podemos comprobar que el dispositivo wlan1 se ha conectado a la red indicada en el fichero wpa_supplicant.conf

pi@zero:~ $ iw dev wlan1 link
Connected to 06:18:d6:87:52:40 (on wlan1)
SSID: The Papaya Group freq: 2412
RX: 3507059 bytes (26364 packets)
TX: 44181 bytes (392 packets)
signal: -47 dBm
tx bitrate: 60.0 MBit/s MCS 3 40MHz short GI
bss flags: short-preamble
dtim period: 1
beacon int: 100

Una vez que tenemos realizada de forma correcta la configuración wifi, necesitaremos instalar los programas necesarios.

Instalación hostapd y DNSmasq

Necesitaremos dos programas para poder realizar la gestión del AP con la raspberry. Estos programas son:

  • Hostapd: encargado de realizar el punto de acceso como tal y que los clientes se puedan conectar a él.
  • DNSmasq: encargado de realizar la gestión de las ips de los clientes que se conecten.

Ambos programas están incluidos por defecto en los repositorios de raspbian, por tanto, para instalarlos bastará con instalarlos desde apt-get:

sudo apt-get install hosted dnsmasq

Ficheros de configuración

El siguiente paso será realizar la configuración de cada uno de los programas instalados. Empezaremos editando el fichero de hostapd que será el encargado de crear el AP para que nos conectemos a él. Para ello, crearemos el fichero /etc/hostapd/hostapd.conf y añadiremos la siguiente información:

interface=uap0
ssid=zeroAP
hw_mode=g
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=zeroAp
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Podremos cambiar el parámetro asid (línea 2) con el ssid que queramos que nos aparezca; y el parámetro wpa_passphrase (linea 9) con la contraseña que queramos que tenga el AP.

Deberemos indicar a hostapd cual es el fichero de configuración que necesita usar. Editaremos el fichero /etc/default/hostapd añadiendo la siguiente línea:

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

Una vez realizada la configuración del AP, será necesario configurar DNSmasq, para poder realizar las gestiones a nivel de direcciones IP de los clientes. De esta manera, se podrán asignar IP a los clientes que se conecten mediante DHCP. Para configurar DNSmasq editaremos el fichero /etc/dnsmasq.conf

interface=lo,uap0
no-dhcp-interface=lo,wlan0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.50.50,192.168.50.150,12h

Configuración de inicio

Una vez que se han configurado los programas de manera individual será necesario hacer la configuración para que los programas se inicien automáticamente.

Hostapd

Crearemos el fichero /usr/local/bin/hostapdstart y añadiremos la siguiente información:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
iw dev wlan0 interface add uap0 type __ap
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
ifup uap0
service hostapd restart
hostapd /etc/hostapd/hostapd.conf > /dev/null 2>& 1

Una vez editamos, le daremos permisos 775:

sudo chmod 775 /usr/local/bin/hostapdstart

Editaremos el fichero /etc/rc.local añadiendo la siguiente línea:

/bin/bash /usr/local/bin/hostapdstart

Es importante añadir la línea justo antes de la línea de exit 0.

DNSmasq

Para iniciar DNSmasq, crearemos el fichero /etc/rc.local/HOSTAPD y añadiremos la siguiente información:

#! /bin/sh
# /etc/init.d/HOSTAPD
## BEGINN INIT INFO
# Provides: DNSmasq service
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start DNSmasq at boot
# Description: A simple script which will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)echo "Starting dnsmasq"
# run application you want to startcase "$1" in
start)
sleep 1
dnsmasq > /dev/null 2>& 1
;;
stop)
echo "Stopping DNSmasq"
# kill application you want to stop;;
*)
echo "Usage: /etc/init.d/DNSmasq {start|stop}"
exit 1
;;
esac
exit 0

Necesitaremos modificar los permisos del fichero, ya actualizar el fichero rc para que ejecute el nuevo script creado:

sudo chmod 755 /etc/init.d/HOSTAPD
sudo update-rc.d HOSTAPD defaults

Con esto, ya tendremos configurado el inicio automático de ambas aplicaciones al encender la raspberry.

Una vez terminado reiniciaremos la raspberry pi y cuando se inicie, nos aparecerá el AP creado.

Figura 1: AP creado con la raspberry pi.

Referencias

  1. antena wifi externa
  2. http://imti.co/post/145442415333/raspberry-pi-3-wifi-station-ap
Publicado en /Linux, /Manuales, /Sistemas Operativos, Electrónica, Informatica.

Deja un comentario