Raspberry Pi, esa multifacetica board que nos invita a investigar por medio de la electrónica o sacarle provecho a linux instalado en ella.
Una de las posibilidades es usarla como AP (Access Point o punto de acceso wifi), para esto debemos tener una interfaz USB WiFi las cuales por lo general las venden en bundle con la board o se pueden comprar por separado. Como ya imaginaran, hoy nuestro tema sera instalar y configurar paso a paso un AP en una raspberry pi. Daré por hecho que tienes ya instalado
Raspbian (debian para raspberry) o sino, es muy fácil instalarlo por medio de NOOBS como muestro en
este anterior articulo.
Requerimientos
- Raspberry Pi
- Interfaz USB WiFi
- Nuestro AP tendrá la ip 192.168.42.1 y compartirá por DHCP esta subred
-Instalamos dependencias
sudo apt-get install libnl1 libnl-dev pkg-config gcc hostapd nginx isc-dhcp-server iptables iptables-persistent
-Descargamos el paquete que nos permitirá crear el AP
wget -c https://www.kernel.org/pub/software/network/iw/iw-3.15.tar.gz
-Descomprimimos, entramos a su directorio y compilamos los fuentes
tar xzvf iw-3.15.tar.gz
cd iw-3.15/
make
-Verificamos las capacidades de la interfaz USB WiFi que tenemos conectada. Debemos tener disponible el modo AP como se ve marcado en rojo debajo
./iw list
Wiphy phy0
max # scan SSIDs: 4
max scan IEs length: 2257 bytes
Retry short limit: 7
Retry long limit: 4
Coverage class: 0 (up to 0m)
Device supports RSN-IBSS.
Supported Ciphers:
* WEP40 (00-0f-ac:1)
* WEP104 (00-0f-ac:5)
* TKIP (00-0f-ac:2)
* CCMP (00-0f-ac:4)
Available Antennas: TX 0 RX 0
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
Band 1:
Capabilities: 0x172
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
RX STBC 1-stream
Max AMSDU length: 3839 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 2 usec (0x04)
HT RX MCS rate indexes supported: 0-7, 32
TX unequal modulation not supported
HT TX Max spatial streams: 1
HT TX MCS rate indexes supported may differ
Bitrates (non-HT):
* 1.0 Mbps
* 2.0 Mbps (short preamble supported)
* 5.5 Mbps (short preamble supported)
* 11.0 Mbps (short preamble supported)
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 2412 MHz [1] (20.0 dBm)
* 2417 MHz [2] (20.0 dBm)
* 2422 MHz [3] (20.0 dBm)
* 2427 MHz [4] (20.0 dBm)
* 2432 MHz [5] (20.0 dBm)
* 2437 MHz [6] (20.0 dBm)
* 2442 MHz [7] (20.0 dBm)
* 2447 MHz [8] (20.0 dBm)
* 2452 MHz [9] (20.0 dBm)
* 2457 MHz [10] (20.0 dBm)
* 2462 MHz [11] (20.0 dBm)
* 2467 MHz [12] (20.0 dBm) (no IR)
* 2472 MHz [13] (20.0 dBm) (no IR)
* 2484 MHz [14] (20.0 dBm) (no IR)
Supported commands:
* new_interface
* set_interface
* new_key
* start_ap
* new_station
* new_mpath
* set_mesh_config
* set_bss
* authenticate
* associate
* deauthenticate
* disassociate
* join_ibss
* join_mesh
* set_tx_bitrate_mask
* frame
* frame_wait_cancel
* set_wiphy_netns
* set_channel
* set_wds_peer
* probe_client
* set_noack_map
* register_beacons
* start_p2p_device
* set_mcast_rate
* connect
* disconnect
Supported TX frame types:
* IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
Supported RX frame types:
* IBSS: 0x40 0xb0 0xc0 0xd0
* managed: 0x40 0xd0
* AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* mesh point: 0xb0 0xc0 0xd0
* P2P-client: 0x40 0xd0
* P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* P2P-device: 0x40 0xd0
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ AP, mesh point } <= 8,
total <= 8, #channels <= 1
HT Capability overrides:
* MCS: ff ff ff ff ff ff ff ff ff ff
* maximum A-MSDU length
* supported channel width
* short GI for 40 MHz
* max A-MPDU length exponent
* min MPDU start spacing
Device supports TX status socket option.
Device supports HT-IBSS.
Device supports low priority scan.
Device supports scan flush.
Device supports AP scan.
Activamos el DHCP Server
-Modificamos el archivo de configuración del DHCP
sudo vi /etc/dhcp/dhcpd.conf
ddns-update-style none;
authoritative;
subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "example.org";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
-Activamos la interfaz wlan0 como la usada por el dhcp server
sudo vi /etc/default/isc-dhcp-server
INTERFACES="wlan0"
-Apagamos la interfaz wlan0 y cambiamos su configuración
sudo ifdown wlan0
sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
-Activamos la interfaz wlan0
sudo ifconfig wlan0 192.168.42.1
Activamos el Access Point
-Configuramos nuestro AP teniendo especial cuidado en colocar una buena contraseña e inventarnos un SSID
sudo vi /etc/hostapd/hostapd.conf
interface=wlan0
#driver=rtl871xdrv
ssid=MiPiAP
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=contraseña-ap
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
-Configuramos el camino donde buscar la conf del AP
sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
DAEMON_OPTS="-dd"
Configuramos el NAT
-Ya nuestro AP permite conexiones, ahora debemos permitir que se haga forward del trafico recibido hacia internet
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
-Ejecutamos
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
-Agregamos reglas a iptables para que haga NAT de este trafico y lo acepte
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
-Verificamos las reglas estén activas
sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
-Guardamos las reglas
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
-Activamos para que se ejecute al hacer boot
sudo vi /etc/network/interfaces
up iptables-restore < /etc/iptables.ipv4.nat
-Activamos los servicios del AP y el DHCP server
sudo service hostapd start
sudo service isc-dhcp-server start
-Verificamos servicios del AP y DHCP
sudo service hostapd status
[ ok ] hostapd is running.
sudo service isc-dhcp-server status
Status of ISC DHCP server: dhcpd is running.
-Los activamos para que se ejecuten al hacer boot
sudo update-rc.d hostapd enable
update-rc.d: using dependency based boot sequencing
sudo update-rc.d isc-dhcp-server enable
update-rc.d: using dependency based boot sequencing
-Ya podemos hacer pruebas de conexión al AP. En el siguiente ejemplo conecto un smartphone Android por wifi y veo el proceso de conexión en logs
sudo tail -f /var/log/syslog
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 IEEE 802.11: authenticated
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 IEEE 802.11: associated (aid 1)
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 RADIUS: starting accounting session 542897F5-00000000
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 WPA: pairwise key handshake completed (RSN)
Sep 28 18:30:44 pibotero dhcpd: DHCPDISCOVER from d8:90:e8:31:f8:00 via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPOFFER on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPREQUEST for 192.168.42.10 (192.168.42.1) from d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPACK on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPREQUEST for 192.168.42.10 (192.168.42.1) from d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPACK on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:31:25 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 WPA: group key handshake completed (RSN)
Muy bien, ya tenemos un AP de bajo costo en producción con Linux instalado en el.
Tienes una Raspberry Pi, en que proyectos la usas? Con que Linux?
Si te resulto útil este articulo, se social, haz un tweet, compártelo con otros por medio de los botones o sígueme en twitter , google+, facebook o email y podrás estar enterado de todas mis publicaciones.