Buon giorno a tutti,
questo post non vuole essere solo una richesta d'aiuto, ma anche un aiuto per altri utenti che si trovano nel mio stesso problema.
Lo scenario è quello di un chiosco nel sud italia, di fronte ad una bellissima spiaggia,
molto frequentata, senza possibilità di copertura nè telefonica ( niente telefono, fibra, adsl, etc) e
senza copertura cellulare ( nemmeno gsm o sos ).
Data la necessità di internet per le attività, il gestore del chiosco
ha chiuso un contratto con una piccola ditta locale che attraverso ponti radio gli garantisce
( a prezzi elevati ) una connessione internet.
Il proprietario del chiosco ha avuto l' idea di realizzare un hotspot legato alla consumazione di
pranzi o cene presso il suo locale, con un sistema che più consumi più
Giga di traffico internet hai.
Si è deciso di non fare grossi investimenti subito, ma di partire
con un piccolo investimento, vedere come procedeva la richiesta da parte dei consumatori e poi in futuro svilupparlo
a secondo di come funziona.
Il sistema è costituito da n. 1 hEX S, collegato via cavo al ponte radio ( WAN ) e
a n. 3 Cisco Aironet 3702i in autonomus mode, n. 1 PC Veriton N281G usato come logger.
Step 1
Conoscendo i problemi dei dispositivi Apple abbiamo impostato SSID
corto, senza spazi, numeri o caratteri speciali, rete aperta.
Sul mikrotik hex abbiamo attivato l' hotspot, radius, e User Manager
Il sistema prevede che è il gestore che registra gli utenti a sistema e gli assegna
un Profiles e li attiva.
Problemi riscontrati
Tantissimio dispositivi si agganciavano al wifi anche senza poi usare la rete,
tentativi di froza bruta su username e password dell' hotspot.
Problemi di connessione per Apple, android e windows
Step 2
Abbiamo impostato la rete con una chiave WPA2 TKIP , inserito nel
Hotspot.Walled_Garden una regola per la path /generate_204 ( dispositivi android)
Abbiamo cambiato il nome dns al Hotspot aggiungendo .lan finale ( chiosco -> chiosco.lan )
Problemi riscontrati
Nessun bruteforce alla pagina dell' hotspot, banda wifi libera e non più saturata.
Dispositivi android OK ( parte in automatico CPD ( captive portal detection ) e viene mostrata la pagina per richiede le credenzaili )
, apple e windows sempre con problemi ( la connessione alla rete wifi c'è , ma nessuna pagina web viene visualizzata ).
Step 3
Dopo avere passato una settimana a studiare i log di sistema ho visto che windows CPD tentata di accedere ai seguenti
url: /connecttest.txt, /canonical.html, *.msftncsi.com, *.msftconnecttest.com, /ncsi.txt, *.msedge.net e sè non li trova
accessibili direttamente blocca il traffico del Layer 3 , mentre il sistema ip e dns lavora correttamente.
Inseriti nel Hotspot.Walled_Garden finalmente anche le macchine windows riuscivano a connettersi!!
Android Ok, Windows OK ...Apple KO
Step 4
mi sono fatto prestare un ipad ed ho eseguito una serie di prove riscontrando i seguenti problemi:
Ios NON vuole la rete aperta con captive portal, non vuole TKIP , vuole solo WPA2 AES e WPA3 con poi captive portal, altrimenti la rete viene bloccata in fase di accesso al wifi.
Poi si attiva il CPD ( captive portal detection ), e quì tenta di comunicare con una serie di server attendendosi una risposta specifica.
Dopo varie prove ho inserito nel Hotspot.Walled_Garden i seguenti url /hotspot-detect.html , /success.html , /detect.html , *.apple.com, airport.us, itools.info .
Purtoppo ancora un 30% di diapositivi Apple aveva problemi ad accedere alla pagina del captive portal per autentificarsi.
Inoltre ho avuto feedback negativi da parte di persone con problemi di vista a cui il tema di default dell' hotspot creava problemi nel riconoscere la posizione dei campi da compilare con user e password
Step 5
Ho letto tutto quello che ho trovato in internet sul sistema dell' hotspot mikrotik, finchè analizzando il css presente ho trovato
la class "lite", ed è bastato cambiare con <body class="lite"> in tutti i file html per ottenere una pagina ad alto contrasto che andasse bene anche per chi ha problemi di vista.
Ho attivato i cookies MAC e impostati a 4 giorni.
Mi sono dedicato a capire come Apple ha implementato il sistema CPD, capendo alla fine che il vero problema non è il CPD,
ma la cache dns interna al dispositivo che viene aggiornata sempre più lentamente per i valori che rimangono stabili.
Provando con degli iPhone 13 di alcuni clienti ho visto che con venivano fatte richieste DNS alla rete, ma vi era tutta una serie di
connessioni a server come e6858.dscx.akamaiedge.net, captive-cidr.origin-apple.com.akadns.net, xxxxx.dsct.akamaiedge.net .
Non potendo agire sui dns, nemmeno sul device e nemmeno sul Hotspot.Walled_Garden, ho visto che quello che accomunava le richieste
era l' User-Agent che era sempre del tipo: "CaptiveNetworkSupport-407.0.1 wispr" , "CaptiveNetworkSupport/1.0 wispr", "CaptiveNetworkSupport-355.200.27 wispr",
"CaptiveNetworkSupport wispr", etc.
Ho deciso di modificare rlogin.html e login.html come segnalato in vecchi post
$(if user-agent == CaptiveNetworkSupport)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>
$(else)
.....
$(endif)
E finalmente su molti dispositivi recenti funziona!! .. ed ora una domanda:
Quale regex posso usare nell' if per matchare tutti i tipi di CaptiveNetworkSupport ?
ho provato con ^CaptiveNetworkSupport* ma non funziona ....
Grazie a tutti e susate per la lunghezza del post
Giorgio