Che cos’è un hotspot con captive portal?

È una rete WiFi aperta (senza password WPA2/WPA3) in cui ogni tentativo di navigazione viene dirottato su una pagina di login, il captive portal. Solo dopo l’autenticazione il client può uscire su internet.

Il principio che vale dal 2015 a oggi: la rete degli ospiti deve stare su una subnet diversa da quella da cui arriva internet. Un hotspot non si fa in bridge trasparente: il router deve instradare e filtrare il traffico dei client.

Lo schema dell’esempio:

  • WAN (verso internet): ether1, indirizzo 10.6.0.10/12, gateway e DNS 10.0.0.1;
  • rete ospiti: bridge bridge-hs con la radio, rete 172.16.0.0/22.
Schema: internet, router MikroTik con hotspot e captive portal su bridge-hs 172.16.0.1/22, radio Wi-Fi e dispositivi degli ospiti
Gli ospiti si collegano al Wi-Fi del bridge-hs e prima di navigare passano dalla pagina di accesso dell’hotspot.

Passo 1: come parto da una configurazione pulita?

Se l’apparato ha la configurazione di fabbrica, conviene azzerarla (c’è un howto dedicato a come resettare un MikroTik con RouterOS 7):

/system reset-configuration no-defaults=yes skip-backup=yes

⚠️ Attenzione: il reset lo facciamo per scopi didattici. Un router azzerato con no-defaults=yes non ha nessun firewall e ha l’utente admin e i servizi di gestione aperti: così com’è non è installabile in produzione. Prima di metterlo in rete, anche solo in LAN, segui l’Hardening di base di un router MikroTik.

Dopo il riavvio il router è vuoto, senza indirizzi IP. Ci si collega con WinBox via indirizzo MAC: nella scheda Neighbors compare il router, si clicca sul suo MAC e si entra con l’utente admin.

Passo 2: come configuro la WAN?

La WAN è l’interfaccia che va verso internet: qui ether1, collegata alla rete del laboratorio.

⚠️ Attenzione: questi indirizzi sono quelli del mio laboratorio. Sostituiscili con quelli della tua rete: l’indirizzo libero che puoi dare al router, il gateway (il router o il modem che porta a internet) e il DNS.

Tre comandi: indirizzo, rotta di default, DNS.

/ip address add address=10.6.0.10/12 interface=ether1 comment="WAN"
/ip route add dst-address=0.0.0.0/0 gateway=10.0.0.1 comment="Default verso internet"
/ip dns set servers=10.0.0.1

Per controllare rete, broadcast e indirizzi utilizzabili di 10.6.0.10/12 c’è l’IP calculator del Dojo (si apre in una nuova scheda).

Verifichiamo che il router esca su internet prima di andare avanti: se questo ping non risponde, l’hotspot non potrà funzionare.

/ping 8.8.8.8 count=4
/ping mikrotik.com count=4

Il primo ping prova la connettività, il secondo anche la risoluzione dei nomi.

Passo 3: come preparo la rete degli ospiti?

Creiamo un bridge e gli diamo l’indirizzo della rete ospiti. Il bridge serve a non legare l’hotspot a una singola radio: domani potremo aggiungere una seconda banda, una porta per un access point esterno o CAPsMAN senza rifare nulla.

/interface bridge add name=bridge-hs comment="Rete ospiti"
/ip address add address=172.16.0.1/22 interface=bridge-hs comment="Rete ospiti"

Per controllare rete, broadcast e indirizzi utilizzabili di 172.16.0.1/22 c’è l’IP calculator del Dojo.

Quanto deve essere grande la rete degli ospiti?

Va dimensionata sull’installazione. Gli indirizzi privati sono gratis, quindi meglio abbondare, ma con criterio. Tre cose da considerare:

  • dispositivi per persona: oggi ognuno porta smartphone, spesso tablet o portatile, a volte l’orologio. Contare due o tre dispositivi a persona è realistico;
  • durata del lease: un dispositivo che se ne va tiene occupato il suo indirizzo fino alla scadenza del lease. Con lease di un’ora o più, gli indirizzi “occupati” sono molti di più dei dispositivi presenti in quel momento;
  • il DHCP pieno non perdona: se il pool si esaurisce, i nuovi arrivati non ricevono un indirizzo. Per l’ospite l’hotspot “non funziona”, che sia un errore di configurazione o un pool finito non fa differenza.

Un esempio: un albergo con 50 camere. Due ospiti per camera, due o tre dispositivi a testa, più personale e aree comuni: si arriva facilmente a 300 dispositivi, a cui aggiungere quelli degli ospiti appena partiti, ancora in lease. Una /24 (253 indirizzi utilizzabili) è sconsigliata; una /23 (510) o una /22 (1022) è la scelta saggia.

E una /16? La maschera da sola non crea rumore: una /16 con 300 dispositivi è silenziosa quanto una /22 con 300 dispositivi. Il traffico broadcast (ARP, DHCP, annunci dei dispositivi) dipende da quanti dispositivi stanno nello stesso segmento, non da quanto è grande la subnet; in WiFi pesa di più perché broadcast e multicast vanno in onda alla velocità più bassa. Una rete enorme diventa un problema solo se ci metti davvero migliaia di client nello stesso segmento: lì conviene dividere in più reti o VLAN. Per un albergo una /22 è più che sufficiente e resta ordinata.

Per fare i conti senza sbagliare c’è l’IP calculator del Dojo: scrivi indirizzo e maschera e ti dà numero di host, primo e ultimo indirizzo utile e i comandi RouterOS per indirizzo e pool.

Passo 4: come configuro la radio?

Dipende dal pacchetto installato sul router. Sui modelli recenti (hAP ax, cAP ax e simili) c’è il pacchetto wifi: creiamo una rete aperta chiamata “Ospiti” e aggiungiamo la radio al bridge.

/interface wifi set [find default-name=wifi1] configuration.ssid="Ospiti" \
    configuration.mode=ap configuration.country=Italy security.authentication-types="" disabled=no
/interface bridge port add bridge=bridge-hs interface=wifi1

Sui modelli con il pacchetto wireless la sintassi è quella storica:

/interface wireless set [find default-name=wlan1] ssid="Ospiti" mode=ap-bridge \
    band=2ghz-g/n country=italy disabled=no
/interface bridge port add bridge=bridge-hs interface=wlan1

Il paese (country) non è un dettaglio: decide quali canali e quali potenze la radio può usare. Mettilo sempre, è quello che fanno anche gli esempi del manuale MikroTik.

Non sai quale pacchetto hai? Basta guardare quale menu esiste: /interface wifi print oppure /interface wireless print.

Passo 5: come funziona il wizard dell’hotspot?

/ip hotspot setup crea da solo server hotspot, pool e server DHCP, profilo, regole NAT e firewall. Si risponde alle domande una alla volta:

/ip hotspot setup
hotspot interface: bridge-hs
local address of network: 172.16.0.1/22
masquerade network: yes
address pool of network: 172.16.0.10-172.16.3.254
select certificate: none
ip address of smtp server: 0.0.0.0
dns servers: 10.0.0.1
dns name: login.ospiti.lan
name of local hotspot user: test
password for the user: test

Cosa vuol dire ogni risposta:

  • hotspot interface: il bridge degli ospiti, non la radio;
  • masquerade network: yes, così gli ospiti escono su internet con l’indirizzo della WAN;
  • address pool: gli indirizzi da dare agli ospiti (lasciamo liberi i primi per eventuali apparati fissi);
  • dns servers: lo stesso DNS della WAN (nel mio lab 10.0.0.1);
  • dns name: il nome che l’ospite vedrà nella barra degli indirizzi della pagina di login. Meglio un nome che non sia un dominio reale di qualcun altro.

Il wizard dà i nomi da solo: il server hotspot si chiama hotspot1, il server DHCP dhcp1 (o dhcp2, se un dhcp1 esiste già) e il pool hs-pool- seguito da un numero. Il significato di ogni domanda è nel manuale MikroTik: parametri del setup HotSpot.

Il wizard crea anche il server DHCP. Possiamo regolare la durata del lease in base al luogo: per un albergo un’ora va bene, per un bar con ricambio veloce bastano 30 minuti.

/ip dhcp-server print
/ip dhcp-server set [find interface=bridge-hs] lease-time=1h

Passo 6: come verifico che funzioni?

Colleghiamo uno smartphone all’SSID “Ospiti”: deve comparire la pagina di login. Con l’utente test / test si naviga. Dal router controlliamo:

/ip hotspot active print
/ip hotspot host print
/ip dhcp-server lease print where server=dhcp1
  • active mostra gli utenti autenticati;
  • host mostra anche i dispositivi collegati ma non ancora autenticati: è il primo posto dove guardare se qualcuno “non vede la pagina di login”;
  • i lease DHCP dicono quanti indirizzi sono in uso e aiutano a capire se il pool è dimensionato bene. Il filtro usa il nome del server creato dal wizard: controllalo con /ip dhcp-server print.

Passo 7: che cosa sistemo dopo la prova?

Quattro cose da fare subito:

  • l’hardening di base del router (qui l’howto dedicato): utente diverso da admin, servizi limitati, firewall verso internet, gestione via VPN;
  • cancellare l’utente test e creare gli utenti veri, o collegare un server RADIUS;
  • proteggere la LAN dai client dell’hotspot con una regola di firewall dedicata (c’è un howto a parte: come proteggere la LAN dai client WiFi);
  • valutare un certificato per la pagina di login in HTTPS, se gli utenti inseriscono credenziali.
    /ip hotspot user remove [find name=test]
    /ip hotspot user add name=mario password=una-password-vera profile=default

Provato in laboratorio su PNETLab con CHR RouterOS 7.24.5 (stable) e un client Linux: WAN, bridge degli ospiti, wizard /ip hotspot setup con queste risposte, redirect alla pagina di login, DHCP e comandi di verifica. La configurazione della radio (passo 4) non si può provare su un CHR: viene dalla documentazione MikroTik.

Domande frequenti

Posso fare un hotspot MikroTik in bridge con la LAN?

No. L’hotspot MikroTik deve instradare il traffico dei client, quindi serve una subnet dedicata agli ospiti, diversa da quella della rete che porta a internet.

Quanto deve essere grande la subnet di un hotspot?

Dipende dall’installazione: si contano due o tre dispositivi per persona e si tiene conto che i lease restano occupati anche dopo che il dispositivo se n’è andato. Per un albergo di 50 camere una /24 è stretta, una /23 o una /22 è la scelta giusta.

Una subnet grande come una /16 crea più traffico broadcast?

No, la maschera da sola non genera traffico: il broadcast dipende da quanti dispositivi stanno nello stesso segmento. Una rete enorme diventa un problema solo se ci si mettono davvero migliaia di client, e allora conviene dividerla in più reti.

Che valori accetta il lease-time del DHCP server MikroTik?

Provato in laboratorio su RouterOS 7 (CHR): il server DHCP accetta da 1s a 4294967295s (circa 7101 settimane), quindi 30m, 1h o 1d vanno tutti bene. 0s e i valori oltre il massimo danno “out of range”, mentre forever, infinite e none non sono valori validi. Su un lease statico 0s invece è accettato e vuol dire “usa il lease-time del server”.

Che differenza c’è fra il pacchetto wifi e il pacchetto wireless?

Il pacchetto wifi è quello nuovo di RouterOS 7 per le radio 802.11ax e alcune ac, con il menu /interface wifi; il pacchetto wireless è quello storico, con il menu /interface wireless. L’hotspot funziona allo stesso modo con entrambi.

Il wizard dell’hotspot crea anche le regole di firewall?

Sì, /ip hotspot setup crea le regole NAT e di firewall dinamiche che servono al captive portal. Non crea invece le regole per isolare la rete del cliente dagli ospiti: quelle vanno aggiunte a mano.

Questo howto aggiorna a RouterOS 7 un articolo del 2015 sul mio vecchio blog wirelessguru.it, ormai offline.