Configurare la Raspberry pi 3 come access point
In questo tutorial spiegherò una via molto semplice per utilizzare la Raspberry Pi 3 come un access point. Il motivo di questo tutorial è squisitamente didattico e comunque interessante per chiunque voglia avere il pieno controllo della rete e del traffico, avendo la possibilità di utilizzare un sistema aperto quale linux per modificare a proprio piacimento il comportamto del proprio custom AP. Di cosa dobbiamo dotarci per raggiungere questo obiettivo?
- 1 Raspberry pi 3
- 1 microsd di almeno di 8 GB preferibilmente 32Gb.
Installazione dei tools necessari
Il progetto è molto semplice, pertanto per raggiungere l’obiettivo, sarà sufficiente installare due pacchetti :
- HostAPD (Host access point daemon) è un software per la gestione dell’interfaccia wireless e anche un server di autenticazione
- DNSMasq è un server DHCP che eroga anche servizi di cache DNS.
Iniziamo la procedura collegandoci alla raspberry via terminale ad esempio via ssh o direttamente in console procedendo subito all’installazione dei paccheti eseguendo il comando:
sudo apt install dnsmasq hostapd
dovreste ottenere qualcosa del genere:
pi@raspberrypi:~ $ sudo apt install dnsmasq hostapd Lettura elenco dei pacchetti... Fatto Generazione albero delle dipendenze Lettura informazioni sullo stato... Fatto I seguenti pacchetti aggiuntivi saranno inoltre installati: dns-root-data dnsmasq-base I seguenti pacchetti NUOVI saranno installati: dns-root-data dnsmasq dnsmasq-base hostapd 0 aggiornati, 4 installati, 0 da rimuovere e 1 non aggiornati. È necessario scaricare 400 kB/1.052 kB di archivi. Dopo quest'operazione, verranno occupati 2.666 kB di spazio su disco. Continuare? [S/n] S Scaricamento di:1 http://archive.raspberrypi.org/debian buster/main armhf dnsmasq-base armhf 2.80-1+rpt1 [400 kB] Recuperati 400 kB in 1s (712 kB/s) Selezionato il pacchetto hostapd non precedentemente selezionato. (Lettura del database... 158415 file e directory attualmente installati.) Preparativi per estrarre .../hostapd_2%3a2.7+git20190128+0c1e29f-6+deb10u1_armhf.deb... Estrazione di hostapd (2:2.7+git20190128+0c1e29f-6+deb10u1)... Selezionato il pacchetto dns-root-data non precedentemente selezionato. Preparativi per estrarre .../dns-root-data_2019031302_all.deb... Estrazione di dns-root-data (2019031302)... Selezionato il pacchetto dnsmasq-base non precedentemente selezionato. Preparativi per estrarre .../dnsmasq-base_2.80-1+rpt1_armhf.deb... Estrazione di dnsmasq-base (2.80-1+rpt1)... Selezionato il pacchetto dnsmasq non precedentemente selezionato. Preparativi per estrarre .../dnsmasq_2.80-1+rpt1_all.deb... Estrazione di dnsmasq (2.80-1+rpt1)... Configurazione di dnsmasq-base (2.80-1+rpt1)... Configurazione di dns-root-data (2019031302)... Configurazione di dnsmasq (2.80-1+rpt1)... Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /lib/systemd/system/dnsmasq.service. Configurazione di hostapd (2:2.7+git20190128+0c1e29f-6+deb10u1)... Created symlink /etc/systemd/system/multi-user.target.wants/hostapd.service → /lib/systemd/system/hostapd.service. Job for hostapd.service failed because the control process exited with error code. See "systemctl status hostapd.service" and "journalctl -xe" for details. Created symlink /etc/systemd/system/hostapd.service → /dev/null. Elaborazione dei trigger per systemd (241-7~deb10u1+rpi1)... Elaborazione dei trigger per man-db (2.8.5-2)... Elaborazione dei trigger per dbus (1.12.16-1)... pi@raspberrypi:~ $
Installati i software, procediamo alla disattivazione dei servizi installati, almeno fin quando non saranno opportunamente modificati i files di configurazione. Lanciamo i seguenti comandi:
sudo systemctl stop dnsmasq sudo systemctl stop hostapd
Scenario di utilizzo
Per procedere alla fase di configurazione ipotizziamo che lo scenario di utilizzo sarà quello più semplice, costituito da un access point che eroga servizio di connettività ad una rete di client il cui indirizzamento sarà 192.168.3.0/24. Alla raspberry assegneremo l’indirizzo statico 192.168.3.1 che per convenzione identifica spesso l’ip del gateway. Come SSID (nome della rete wireless) utilizzeremo : TestReteWifi.
Configurazione di un IP statico
Per configurare l’indirizzo ip statico,da assegnare all’interfaccia wireless, sarà necessario, innanzitutto, identificarne il nome tra quelle disponibili. La raspberry pi 3 ha come caratteristiche di fabbrica una sola interfaccia wireless, che su linux viene indentificata generalemente come wlan0, ma per sicurezza , nel caso in cui desciste di utilizzare, anche, dei dongle wifi, basterà lanciare il comando seguente per assicurarsi di utilizzare l’identificativo di interfaccia corretta.
sudo ifconfig -a
dovreste ottenere qualcosa del genere:
pi@raspberrypi:~ $ sudo ifconfig -a eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether b8:27:eb:5c:a7:01 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.50 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::f16f:5c00:be2b:c88f prefixlen 64 scopeid 0x20<link> ether b8:27:eb:09:f2:54 txqueuelen 1000 (Ethernet) RX packets 13238 bytes 4959004 (4.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 888 bytes 114046 (111.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Come previsto nel mio caso l’interfaccia di interesse è la wlan0.
Per configurare l’indirizzo IP statico, da assegnare alla interfaccia della raspberry, andremo a modificare il file di configurazione dhcpcd.
Attenzione! qualora in si stia lavorando già via wifi, nel momento in cui verrà modificato l’ip della wlan0 si perderà la connessione di rete, per cui, vi suggerisco di connettere la raspberry ad un cavo di rete, in modo da evitare in questa fase problemi di raggiungibilità dal vostro pc.
A questo punto sarà sufficiente editare il file dhcpcd.conf, lanciando il comando
sudo vi /etc/dhcpcd.conf
oppure
sudo nano /etc/dhcpcd.conf
dipende dalle vostre preferenze, per aggiungere in coda la seguente configurazione:
interface wlan0 static ip_address=192.168.3.1/24 nohook wpa_supplicant
Configurazione del DHCP server (dnsmasq)
Il servizio DHCP come abbiamo già anticiapato sarà erogato da dnsmasq. Per default, la configurazione contiene numerose informazioni, per cui, per semplificazione proveremo a riscrivere da zero un nuovo file, facendo prima un opportuno backup del file originale. Eseguiamo duqnue i seguenti comandi per fare il backup e per editare il nuovo file di configurazione:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig sudo nano /etc/dnsmasq.conf
Inseririamo le seguenti informazioni nel file dnsmasq.conf e salviamo:
interface=wlan0 # Use the require wireless interface - usually wlan0 dhcp-range=192.168.3.2,192.168.3.20,255.255.255.0,24h
riavviamo il servizio dnsmasq.
sudo systemctl start dnsmasq
Il server dhcp a questo punto è già pronto ad erogare ai client gli indirizzi ip, inclusi nel range compreso tra 192.168.3.2 e 192.168.3.20
Configurazione di hostapd
Per completare la configurazione editiamo il file /etc/hostapd/hostapd.conf ed aggiungiamo i parametri necessari partendo da un file vuoto.
sudo nano /etc/hostapd/hostapd.conf
La configurazione che faremo ipotizza di utilizzare :
- il canale 7 come banda di frequenza;
- SSID : TestReteWifi
- password PasswordDiReteWifi
Ricordatevi che la passphrase dovrà avere una lunghezza compresa tra 8 e 64 caratteri, compatibilimente con le specifiche imposte dal protocollo di sicurezza scelto wpa2.
Di seguito, trovrete una piccola leggenda che vi consentirà eventualmente di scegliere opportunamente la banda di frequenza dell’AP a voi più utile. Nel nostro esempio useremo la configurazione hw_mode=g, ma potete decidere di cambiarla in funzione delle vostre esigenze.
- a = IEEE 802.11a (5 GHz)
- b = IEEE 802.11b (2.4 GHz)
- g = IEEE 802.11g (2.4 GHz)
- ad = IEEE 802.11ad (60 GHz)
Riporto di seguito la configurazione da copiare nel file /etc/hostapd/hostapd.conf
interface=wlan0 driver=nl80211 ssid=TestReteWifi hw_mode=g channel=7 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=PasswordDiReteWifi wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
A questo punto possiamo attivare la configurazione creata, editando il seguente file:
sudo nano /etc/default/hostapd
cercate all’interno la linea contenente questa stringa : #DAEMON_CONF e sostituitela con questa:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Riavviamo il servizio di rete dhcpcd per riconfigurare l’indirizzo della wlan0
:
sudo service dhcpcd restart
Abilitiamo e riavviamo hostapd
:
sudo systemctl unmask hostapd sudo systemctl enable hostapd sudo systemctl start hostapd
oppure riavviamo la raspberry.
A questo punto dovremmo già trovare, tra le reti wifi disponibili, quella configurata. Per una verifica sullo stato dei servizi potrete usare i seguenti comandi:
sudo systemctl status hostapd sudo systemctl status dnsmasq
Sarà già possibile a questo punto far connetttere dei client alla rete wifi creata, ma non sarà ancora possibile ad esempio connettersi al di fuori della rete stessa. Cerchiamo di capire come abilitare, dunque, i client alla navigazione internet via raspberry.
Configurazione del routing e del masquerade (NAT)
Editare /etc/sysctl.conf lanciando il comando:
sudo nano /etc/sysctl.conf
andare alla riga che contiene la stringa seguente e decommentare togliendo il #.
#net.ipv4.ip_forward=1
A questo punto il sistema sarà abilitato a ruotare i pacchetti da un’iterfaccia ad un altra, ma ancora non sarà possibile navigare in quanto gli ip dei client appartengono ad una rete privata, quindi sarà necessario mascherarli/nattarli per consentire il traffico in uscita sull’interfaccia eth0, che supponiamo sia connessa ad esempio ad un router abilitato alla navigazione internet. Per nattare la rete verso il traffico su eth0 sarà sufficiente eseguire questo comando.
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
e per rendere le modifiche definitive basterà creare un file di configurazione eseguendo il seguente comando
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
Aggiungiamo al file /etc/rc.local la seguente riga in modo che al reboot della raspberry la configurazione di iptables venga caricata opportunamente.
iptables-restore < /etc/iptables.ipv4.nat
dovreste ottenere qualcosa di simile:
# # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi iptables-restore < /etc/iptables.ipv4.nat exit 0
La nostra raspberry è finalmente diventata un access point.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments