Ormai avete imparato quanto amo l’IoT; oggi vi svelo un piccolo trucco per trasformare il nostro amico “RaspBerry pi 0 w” in un Access Point e nello stesso tempo in un Client Wifi condividendo la connessione internet!
Ogni qualvolta abbiamo a che fare con progetti da portare in giro con noi e facilmente occultabili, abbiamo talvolta la necessità di creare una piccola rete tra noi e il nostro smartphone per poter accedere al nostro piccolo amico “pi”;
Ecco che ci viene in aiuto questa piccola guida, cosa occorre? nulla, solo un pò di pazienza.
Utilizzeremo a questo scopo la scheda Wireless (wlan0) inclusa nella nostra raspberry.
Andiamo a creare l’interfaccia “ap0” ci servirà per differenziare la scheda wlan0 e creare quindi l’AP:sudo pico /etc/udev/rules.d/70-persistent-net.rules
inseriamo all’interno il codice:SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:eb:ff:ff:ff", KERNEL=="phy0",
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap",
RUN+="/bin/ip link set ap0 address b8:27:eb:ff:ff:ff"
modifichiamo prima di uscire e salvare il tutto con il solito ctrl+x e un bel si, il mac address con il nostro, vi starete chiedendo come reperirlo? facile:iw dev
avrete un risultato del genere:
[email protected]:~$ iw dev
phy#0
Unnamed/non-netdev interface
wdev 0x4
addr ba:27:eb:07:28:1f
type P2P-device
txpower 31.00 dBm
Interface wlan0
ifindex 2
wdev 0x1
addr b8:27:eb:ff:ff:ff
ssid
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBm
Questo è l’indirizzo che vi serve da modificare nelle regole.
Adesso passiamo all’installazione del dnsmasq e dell’hostpad due piccoli software (già conosciamo) per la realizzazione dell’AP.sudo apt-get install dnsmasq hostapd
dopo l’installazione …. modifichiamo il file sudo pico /etc/dnsmasq.conf
ed inseriamo:interface=lo,ap0
no-dhcp-interface=lo,wlan0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.10.50,192.168.10.150,12h
Notiamo che facciamo riferimento ad ap0, quindi usa il nome del tuo dispositivo qui se lo hai cambiato prima. Ho aggiunto l’IP del server DNS di Google qui (8.8.8.8), ma sentiti libero di usarne uno dal tuo router / ISP / o altro. Ho anche ipotizzato che il nostro server DHCP fornisca indirizzi sulla sottorete 192.168.10.0/24, che vanno da .50 a .150. Puoi, se vuoi, sostituire la tua sottorete direttamente qui, ma ricordatela per dopo, poiché dovrebbe corrispondere all’IP statico che assegniamo al tuo AP. Il tempo di leasing di 12 ore può anche essere modificato arbitrariamente in base alle proprie esigenze.
Successivamente, dobbiamo modificare il file in sudo pico /etc/hostapd/hostapd.conf
come segue:ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=ap0
driver=nl80211
ssid=Il nome del tuo AP
hw_mode=g
channel=11
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=La password scelta
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
Una volta salvato, modifichiamo sudo pico /etc/default/hostapd
ed aggiungiamo questa riga alla fine del file:DAEMON_CONF="/etc/hostapd/hostapd.conf"
Adesso salviamo ed andiamo a modificare sudo pico /etc/wpa_supplicant/wpa_supplicant.conf
, il nostro file di configurazine per il client wifi, ovvero le reti dove il piccolo pi andrà a connettersi:country=EU
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="YourSSID1"
psk="YourPassphrase1"
id_str="AP1"
}
network={
ssid="YourSSID2"
psk="YourPassphrase2"
id_str="AP2"
}
Modifichiamo il file di configurazione delle interfacce tramite sudo pico /etc/network/interfaces
Sistemiamole cosi:# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
auto ap0
auto wlan0
iface lo inet loopback
allow-hotplug ap0
iface ap0 inet static
address 192.168.10.1
netmask 255.255.255.0
hostapd /etc/hostapd/hostapd.conf
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface AP1 inet dhcp
iface AP2 inet dhcp
Bene, abbiamo quasi completato, diciamo al nostro piccolo “pi” di fare il forward dei pacchetti da una rete all’altra con questi semplici comandi:sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
sudo systemctl restart dnsmasq
Realizziamo un file in /home/pi/ chiamato startAP.shsudo pico /home/pi/startAP.sh
copia ciò che è scritto sotto all’interno del nostro file, non è altro che ciò che abbiamo fatto prima, ma stavolta ogni qualvolta riavviamo partirà in automatico attraverso il crontab:#!/bin/bash
sleep 30
sudo ifdown --force wlan0 && sudo ifdown --force ap0 && sudo ifup ap0 && sudo ifup wlan0
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
sudo systemctl restart dnsmasqsudo crontab -e
Inserendo questa riga:
@reboot /home/pi/startAP.sh
I giochi sono stati fatti, riavviate: sudo reboot
.
A questo punto vi ritroverete tra la lista delle reti WiFi il vostro AP, oltre che nelle reti associate in precedenza il vostro amico come client.
Alla prossima!