Quando l'adsl naviga solo più su Google e internet va in timeout
Voglio fare outing, ho un problema inspiegabile con l'adsl da molto tempo, dopo un numero variabile di minuti riesco solo a navigare su Google, Youtube e pochi altri siti.
Su internet si leggono le soluzioni più fantasiose, passare da PPPoA a PPPoE, cambiare router, cambiare DNS, ma il problema è davvero curioso perché anche se non ho ancora scoperto una causa sensata, almeno riesco ad identificarlo e a risolverlo con un hack/workaround.
Il mistero problema dell'adsl che naviga solo su Google
Il problema si manifesta all'improvviso e senza una motivazione precisa (forse se ci sono più connessioni attive è più probabile) e le caratteristiche sono queste:
- Il DNS funziona, dig risolve come al solito vecchi e nuovi indirizzi
- ping funziona, forse con qualche valore alto ma anche qui ci siamo
- curl -I , anche qui ci siamo restituisce 200 (http)
Anche se si vuole scaricare l'immagine binaria favicon funziona:
curl grigio.org/favicon.ico
<binary data>
Ma a questo punto se ci si collega a grigio.org (esempio) il browser (qualsiasi e su qualsiasi sistema operativo) resterà in attesa per un tempo indefinito e poi ci sarà timeout.
Infatti curl o telnet su una pagina html testuale ha smesso di funzionare e non riceve più i dati!
curl grigio.org -m 13
curl: (28) Operation timed out
L'opzione -m permette di prestabilire la durata del timeout.
Ora la "soluzione" per poter tornare a navigare su qualsiasi sito è riavviare la connessione adsl, riavviare il router da remoto o spegnere e riaccendere il router fisicamente. :(
Tralasciando l'automatizzazione di accendere e spegnere un tasto fisico, programmaticamente si può controllare ogni tot se il router si è imppalato e di conseguenza riavviarlo in automatico mandando una richiesta POST all'interfaccia di amministrazione Netgear.
#!/usr/bin/env ruby # source: http://grigio.orgdef restart(ip, user, pass)
puts ">> [restart]: " +curl -X POST --user #{user}:#{pass} http://#{ip}/setup.cgi --data "todo=reboot&this_file=diag.htm&next_file=diag.htm"
enddef is_down?(url)
res =curl #{url} -m 10
puts ">> [check]: " + res[0..100]
res.start_with? 'curl: (28) Operation timed out'
endmain loop
loop do
unless is_down? "grigio.org"
restart "192.168.1.1", "admin", "mypassword"
sleep 2 * 60
endputs "ii [loop]"
sleep 1 * 60
end
É un hack molto triste, ma almeno con questo script il problema viene mitigato.