Il problema
Da un po’ di tempo a questa parte ho un desiderio un po’ fisso: abilitare IPv6 nella mia LAN.
Il mio provider, Telecom Italia, per una volta non è troppo indietro e supporta IPv6, purché anche il router lo supporti.
Purtroppo, non so se l’ho già scritto e comunque non mi stancherò mai di farlo, i produttori pensano solo ai modelli recenti dei loro hardware e dopo un po’ non fanno aggiornamenti o ne fanno solo alcuni inutili.
Ovviamente la soluzione più efficace sarebbe usare un firmware open source come OpenWRT, un po’ come è stato con Android.
Purtroppo non lo fanno e chi ha la fortuna di avere un router supportato flasha l’immagine, gli altri devono accontentarsi di tenersi il loro router così… oppure darsi da fare a provvedere a portare OpenWRT da soli 😌 .
Preferirei la prima, ma in mancanza di essa provo anche la seconda.
Purtroppo questo router è uno dei pochi modem che potete trovare nei negozi di elettronica non basato su Linux, bensì su ZynOS, un OS proprietario di ZyXEL, e ciò spiega perché Nmap non lo riconosce come Linux ma dà moltissimi demoni della zyxel e perché al posto di una shell decente c’è quella schifezza di prompt.
Purtroppo questo l’ho scoperto scrivendo prima a D-Link.tw, poi a D-Link Italia, quindi telefonando al servizio clienti, minacciato che se fosse stato basato su Linux loro erano perseguibili legalmente poiché mancava il codice GPL (povero addetto del servizio tecnico) e, infine, dopo che mi hanno chiuso la pratica senza dirmi niente, ho aperto il router, usato la seriale e alla fine non ho potuto più fare nulla se non constatare che l’OS non è Linux.
Questo è decisamente negativo: senza Linux sono senza una base da cui estrarre i driver. Se poi sono binari e non c’è un modulo sono fregato del tutto.
I miei tentativi
Come dicevo, ieri ho aperto il router e ho cercato di ottenere informazioni.
Sapevo già dell’esistenza della seriale, diciamo che è propedeutica a questo tipo di hacking 😊 . Avevo trovato una discussione su un forum che spiegava il pinout (vedere il secondo link delle risorse utili).
Il materiale che serve è un convertitore RS-232 computer - RS-232 a 3.3V (tipico di questi dispositivi), un software per usare la seriale, un cacciavite a stella e magari un altro router se vi serve usare Internet mentre siete sul bootloader.
Io ho usato un cavo CA-42 di cui avevo già parlato tempo fa, così ho potuto usare la porta USB. Va bene qualsiasi convertitore, ce ne sono molti basati mi pare sull’integrato MAX2323 o su una coppia di transistor, però io vi consiglio di spendere 2-3€ in più e prendervene un convertitore già fatto e dotato di porta USB: vi risparmierà la fatica di far andare la seriale. Non avendo più header femmina ho usato dei cavetti con coccodrilli per collegarmi al router.
Come software invece ho usato Minicom. All’inizio avevo usato CuteCOM, però non mi sono trovato bene e così ho usato il tool basato su CLI. Vi ricordo che su Minicom le opzioni devono essere inserite usando la combinazione CTRL + A
seguita poi da un altro tasto (premere Z per avere l’elenco dei comandi disponibili). Se dovete fare trasferimenti assicuratevi che il vostro software supporti XMODEM. Quindi che io sappia, per esempio, il gestore consolle di Arduino in questo caso non può essere usato.
Un secondo router ve lo consiglio caldamente, anche se io ho fatto senza perché avevo solo il vecchio DSL-320T che ormai non funziona più tanto bene.
Una volta reperito il materiale aprire il router è abbastanza semplice. Staccatelo e giratelo col coperchio in basso. Vedrete che sul pannello che di solito sta in basso ci sono 4 gommini: sotto quello vicino alla porta di alimentazione e quello vicino all’antenna sono nascoste le due viti che dovrete svitare. Gli altri gommini lasciateli dove sono.
Perciò togliete i gommini e svitate le viti, dopodiché girate di nuovo il router e rimuovete delicatamente il pannello di copertura superiore. Dovete fare un po’ di pressione e alzarlo: più facile a farsi che a dirsi. Vi sembrerà di rompere tutto ma è fatto così, quindi non state facendo alcun danno.
Ora potete lavorare sul router. Volendo potete togliere anche la parte di plastica grigio chiara.
Collegate la vostra interfaccia seriale secondo il pinout indicato nel secondo link delle risorse utili, attaccate l’interfaccia al computer, aprite il programma della gestione della consolle e se ce n’è bisogno configuratelo come indicato sempre sullo stesso sito.
Ora accendete pure il router. Vedrete che sulla consolle verranno fuori dei controlli vari, dopo vi verranno dati tre secondi per interrompere il boot, altrimenti il router si accenderà regolarmente. Una volta completato il boot potrete premere invio per accedere all’interfaccia testuale del router.
Con gran disperazione dopo aver premuto invio e aver messo la stessa password del pannello di amministrazione, vederete la stessa interfaccia che potete raggiungere col telnet: nessuna busybox che nasconde una shell tipo bash.
Almeno una volta aperto potrete constatare che le informazioni trovate su internet sono vere: il chip è un Trendchip TC3162 P2 (su internet si diceva un TC3160, ma riguardando le foto ho visto che non lo è) e che ha solo 2MB (16Mb) di flash! Pochi per OpenWRT standard, anche se dovrebbero essere comunque utilizzabili.
L’unica forse buona notizia è che almeno avrete accesso alla consolle del bootloader: è abbastanza comoda, infatti permette di ottenere varie informazioni e volendo caricare su RAM dei dati e dopo si può fare il boot da questi. A tal proposito il quarto link delle risorse utili è molto interessante, peccato che manchi delle istruzioni su come creare l’immagine (magari sono altrove).
Ho scritto forse buona perché non sono riuscito ad abilitare la modalità debug, essenziale per ottenere gli indirizzi di memoria e forse anche per caricare il file. La versione di Bootbase è la VTC1.15 mi pare del 2007, però non ho ancora trovato molte informazioni utili.
Per il momento quindi è stato un po’ un fiasco il lavoro fatto. Ho richiuso il router e messo tutto com’era.
Tuttavia ho già alcune idee: intanto cercherò più informazioni sulla versione di bootbase e cercherò di abilitare le funzioni di debug. Poi vorrei vedere se ci sono router con configurazione simile ma basati su Linux in modo da vedere se riesco a far partire l’ADSL. Il link sul Prestige 335 dimostra che è possibile fare qualcosa anche senza avere i driver del produttore, seppure sarebbero comodissimi. 2MB sono pochi per OpenWRT, però vorrei lo stesso usarlo. Potrei magari rimuovere il gestore di pacchetti e a dir la verità avendo anche la Fonera non mi curerei più di tanto neanche del Wireless. Escluderei anche il file hosts per la pubblicità sul router: non mi posso permettere di usare così 600KB. Forse però potrei ottimizzarlo… Non escluderei anche il fatto di tenere o solo SSH (e mettere a root una password di default) o solo Telnetd. Se possibile vorrei tenere LuCI.
A livello hardware mi piacerebbe trovare un modo per tenere una seriale e chiudere il router. Purtroppo però il coperchio ha tre fori per le viti e penso che quello inutilizzato finisca sul connettore NC, perciò non potrei usare l’header. Escludo anche di stagnare i fili direttamente e di modificare il case. Piuttosto rimuovere il tasto WPS che tanto non uso e farei passare di là i tre fili.
Se proprio non riuscirò a far niente potrei vedere di mettere il router in modalità PPPoE e usare la Fonera come router, però la soluzione non mi entusiasma.
Risorse utili
- D-Link DSL-2640U(B): una pagina sul wiki di OpenWRT su un modello simile al mio ma con chip Broadcom e basato su Linux
- Recovery con seriale del DSL-2640R: ho scoperto come usare la seriale del router. Quel forum ha altre discussioni utili, per infomazioni maggiore sfogliatele…
- Running uCLinux on a ZyXEL router: utile soprattutto per il bootloader Bootbase
- Hacking the ZyXEL P-335WT: è interessante vedere come è stato trattato questo modello per mettere OpenWRT
- Varie ed eventuali che potrei essermi dimenticato (se me ne ricordo le aggiungo)