Premessa
Internet è una risorsa preziosa.
L’idea che sta dietro a questo progetto è quella di creare un access point che permetta di condividere in modo controllato un accesso ad internet.
L’utente si connette ma, prima di poter navigare, deve fornire uno username ed una password attraverso un’interfaccia web.
La web GUI, oltre a curare l’autenticazione, mette a disposizione una serie di funzioni (riservati agli amministratori) per la gestione degli utenti.
Il progetto può essere adatta per funzionare su qualsiasi distribuzione di Linux. La versione presentata in questo tutorial, presuppone l’uso di Raspberry.
La scelta di Raspberry è stata dettata dal fatto che:
- l’hardware è facilmente reperibile e a basso costo
- è facilmente standardizzabile
- il costo è contenuto
Il tutorial è suddiviso in due parti:
- Parte 1 – Installazione e configurazione del Raspberry
- Parte 2 – Installazione e configurazione del parte applicativa
Cosa serve
- Raspberry Pi Type B
- Scheda WiFi, attenzione non tutte supportano la modalità hotspot. Io ho usato la TP-Link TL-WN725N ver. 2
- Una SD compatibile con Raspberry da 2Gb
Configurazione sistemistica
Ho usato la Raspian. E’ abbastanza generica per essere considerata una buona base di partenza: ci sono distribuzioni già pronte per essere utilizzate come hostspot, ma nessuna fa quello che cercavo di fare io: tutte prevedono di utilizzare Raspberry come access-point casalingo, io lo voglio usare per condividere internet in maniera controllata.
Terminata l’installazione base della distribuzione è il momento di iniziare a fare qualche configurazione.
Iniziamo dalla configurazione della scheda wireless, modificando /etc/network/interfaces aggiungendo:
1 2 3 | iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0 |
La TP-Link TL-WN725N non è direttamente supportata dal kernel della Raspian, prima di poterla utilizzare è necessario installare un modulo del kernel. Niente paura, la procedura è semplice, semplice ed è descritta per filo e per segno qui. In breve si tratta di scaricare il modulo del kernel, decomprimere il file, installarlo nell’alberatura dei moduli per la versione del kernel usata (3 riga dei comandi riportati qui sotto) e caricarlo:
1 2 3 4 5 | wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20130209.tar.gz tar -zxvf 8188eu-20130209.tar.gz sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless sudo depmod -a sudo modprobe 8188eu |
Questa operazione è sufficiente farla una sola volta, ma bisogna ricordarsi di rifarla quando si aggiorna la versione del kernel.
Facendo un reboot, a questo punto, il comando ifconfig dovrebbe trovarvi 3 interfacce di rete: lo, eth0 e wlan0.
Adesso è necessario configurare la parte di hostspot.
Iniziamo con installare il software:
1 | sudo apt-get install hostapd |
La configurazione di hospapd si trova in /etc/hostapd/hostapd.conf. Se vogliamo creare un access-point protetto da WPA2 (quindi con password per la connessione dei device), il file dovrà essere simile al seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Basic configuration interface=wlan0 ssid=piWiFi channel=1 # WPA2 configuration macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=QUI_CI_VA_LA_PASSWORD_WPA2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP # Hardware configuration driver=rtl871xdrv ieee80211n=1 hw_mode=g device_name=RTL8192CU manufacturer=Realtek # Other configuration country_code=IT |
Nel mio progetto, l’autenticazione dell’utente è demandata alla GUI grafica scritta in PHP (descritta nella parte 2 di questo post), è pensabile di permettere la connessione all’AP senza nessuna password WPA2. In questo secondo caso il file dovrebbe essere simile a questo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Basic configuration interface=wlan0 ssid=piWiFi channel=1 # WPA2 configuration macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 # Hardware configuration driver=rtl871xdrv ieee80211n=1 hw_mode=g device_name=RTL8192CU manufacturer=Realtek # Other configuration country_code=IT |
Alla fine, qualsiasi scelta si è fatta, editare il file /etc/default/hostapd in questo modo:
1 | DAEMON_CONF="/etc/hostapd/hostapd.conf" |
HostAPd, nella versione pacchettizzata, non supporta la TP-Link in modalità access-point. Nessun problema basta scaricare i sorgenti e ricompilarli.
Da questo link di Github è possibile scaricare i sorgenti modificati per la TP-Link.
Rimuovere il pacchetto che contiene la versione originale di hostpAPd:
1 | sudo apt-get autoremove hostapd |
Non preoccupatevi, i file di configurazione non vengono toccati. A questo punto è possibile ricompilare.
1 2 3 4 5 | wget https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz tar xvfz v1.1.tar.gz cd RTL8188-hostapd-1.1/hostapd sudo make make install |
Se tutto funziona a dovere, provando a lanciare il demone, dovreste avere una risposta tipo questa:
1 2 3 | $ sudo service hostapd restart [ ok ] Stopping advanced IEEE 802.11 management: hostapd. [ ok ] Starting advanced IEEE 802.11 management: hostapd. |
Adesso è necessario abilitare il forward fra le due interfacce di rete (wlan0 e eth0). Con iptables, poi, faremo il masquerade dei pacchetti che provengono da wlan0 verso eth0 per instradarli verso internet.
Abilitare il forward modificando il file /etc/sysctl.conf in questo modo:
1 | net.ipv4.ip_forward=1 |
E queste righe di iptables applicano il NAT (masquerade):
1 2 3 | 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 |
Per fare in modo che, dopo il reboot, queste configurazioni vengono ricaricate create un file /etc/network/if-up.d/firewall con le 3 righe di iptables. Modificate i permessi in modo da renderlo eseguibile (chmod 755) e modificate /etc/network/interfaces aggiungendo:
1 2 3 4 | iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0 post-up /etc/network/if-up.d/firewall |
In questo modo, all’avvio, quando viene ripristinata l’interfaccia wlan0 viene eseguito lo script di attivazione del firewall.
Ultimo pezzettino di software da installare: un demone DHCP.
Visto che usiamo un Raspeberry Pi mettiamo un muDHCP 🙂
1 | sudo apt-get install udhcpd |
Il file di configurazione è /etc/udhcpd.conf:
1 2 3 4 5 6 7 8 | start 192.168.42.2 # Range di IP che il DHCP assegna. end 192.168.42.20 interface wlan0 # L'interfaccia sul quale il demone è in ascolto. remaining yes opt dns 8.8.8.8 4.2.2.2 opt subnet 255.255.255.0 opt router 192.168.42.1 # L'IP del Raspeberry che farà da gw opt lease 864000 |
Per vedere se tutto funziona:
1 2 | sudo service hostapd start sudo service udhcpd start |
A questo punto è possibile connettersi al nostro nuovo AP e provare a navigare.
Per fare in modo che i servizi partano all’avvio:
1 | sudo update-rc.d hostapd enable |
Mentre per il DHCP è necessario fare in modo che parta solo dopo che la scheda wlan0 è stata abilita. Per farlo usiamo la stessa tecnica usata per abilitare il firewall.
Creiamo un file /etc/network/if-up.d/udhcpd, chmod 755 /etc/network/if-up.d/udhcpd e al suo intero, mettiamo l’istruzione per far partire il serivizio:
1 | service udhcpd start |
Aggiungiamo la riga
1 | post-up /etc/network/if-up.d/udhcpd |
al file /etc/network/interfaces, in modo che appaia così:
1 2 3 4 5 | iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0 post-up /etc/network/if-up.d/firewall post-up /etc/network/if-up.d/udhcpd |
Se siamo stati bravi (io a scrivere questo tutorial e voi a seguirlo!) facendo un reboot del Raspberry dovreste ritornare ad avere un access-point che vi permette di navigare in WiFi.