OpenWrt su D-Link DSL-524T

Oggi scrivo per tutti gli sfortunati possessori di questo fantastico router ADSL, ebbene sì! Vi illustrerò come salvare gli € spesi per questo baracchino, cambiando il firmware (quello originale è pessimo e buggato) e risolvendo il problema del surriscaldamento che causa i frequenti blocchi riscontrati soprattutto in condizioni di alto carico di rete.

Ecco come si presenta la cavia, prima di diventare il frankenstein informatico di turno...

Ecco come si presenta la cavia, prima di diventare il frankenstein informatico di turno...

La procedura non richiede di aprire il router, ed è relativamente facile. Per installare OpenWrt bisognerà modificare le partizioni della flash, tramite il server FTP modificato del bootloader ADAM2. In caso voleste ripristinare il vecchio firmware, dovrete ripartizionare la flash coi valori originari (che io non mi sono segnato! ma sono facilmente individuabili nel programma CICLaMaB) per poi ricaricare l’immagine del firmware D-Link. Detto questo passiamo ai fatti!

Analisi tecnica

Questa etichetta riporta modello e revisione su cui ho fatto i miei esperimenti

Questa etichetta riporta modello e revisione su cui ho fatto i miei esperimenti

System-on-a-Chip:

Modello: Texas Instruments AR7 TNETD7300
Processore: MIPS 4KEc 32-Bit RISC @150MHz

RAM:

Modello: Hynix HY57V281620
Capacità: 16MB

Flash:

Modello: Spansion S29AL032090
Capacità: 4MB

Switch:

Modello: Infineon ADM6996M

Ecco i vari componenti principali

Ecco i vari componenti principali

Immagine OpenWrt

Per riflashare l’apparato avrete bisogno dell’immagine dell’ultima versione di OpenWrt che potete trovare qui:
http://downloads.openwrt.org/kamikaze/8.09.2/ar7/openwrt-ar7-squashfs.bin
http://downloads.openwrt.org/backfire/10.03-rc3/ar7/openwrt-ar7-squashfs.bin
(Lista aggiornata al 03/04/2010)

In ogni caso, se avete un po’ di dimestichezza vi consiglio di compilarvi la vostra immagine custom, scaricandovi l’ultima revision del trunk e includendo i pacchetti che vi servono. In questo modo i pacchetti rientreranno nella partizione compressa sola lettura squashfs e risparmierete spazio… installandoli in un secondo momento con opkg andrete a consumare memoria preziosa sulla partizione scrivibile jffs2!

Io ho preferito farmi la mia personalizzata, e ci ho incluso i pacchetti per il client DNS dinamico, il client NTP e l’interfaccia web X-Wrt. Per farlo, dovrete dare questi comandi nella directory in cui compilate OpenWrt:

scripts/feeds install updatedd
scripts/feeds install ddns-scripts
scripts/feeds install ntpclient
scripts/feeds install webif

E poi selezionarli (con l’asterisco) nel menu di configurazione per poi lanciare la compilazione vera e propria:

make menuconfig
make world -j3

L’opzione -j3 è molto utile se avete un processore multi-core o multi-threaded. In caso contrario non utilizzatela.

Installare OpenWrt

Prima di cominciare ricordatevi di non toccare la partizione mtd2, in quanto contiene il bootloader ADAM2 stesso… se lo toccaste rischiereste di rendere il vostro router non avviabile, richiedendo un ripristino via cavo JTAG. Uomo avvisato…!

Ripartizionare e Flashare con la console FTP di ADAM2

La procedura descritta in questo paragrafo è stata ottenuta dalla Wiki e dal Forum di OpenWrt [2], e nel mio caso è risultata un po’ imprecisa. Io mi sono affidato al software CICLaMaB e la procedura che ho seguito è scritta successivamente, se volete dargli un occhio, saltate questo paragrafo!

Per modificare le partizioni della flash e scriverla, vi occorrerà stabilire una connessione FTP all’indirizzo IP del bootloader. Il nostro D-Link DSL-524T all’accensione rimane in ascolto per qualche secondo sull’indirizzo 5.8.8.8, prima di avviare il sistema operativo.
Bene, detto ciò, modificate l’indirizzo del vostro PC e impostateci qualcosa tipo 5.8.8.9/24 giusto per trovarvi nella stessa subnet. Ora con una console posizionatevi nella cartella dove avete salvato l’immagine del firmware. Avviate il router e due/tre secondi dopo lanciate il comando:

ftp 5.8.8.8

A questo punto, se è andato tutto bene vi verrà chiesto di inserire l’username e la password che sono entrambi “adam2”. In caso contrario, riavviate il router e riprovate a connettervi!

Una volta in console, dovremo inserire qualche comando per ottenere la seguente tabella di partizioni:

Custom memory map for OpenWRT
Name Start End Description
mtd0 0x90086B80 0x903f0000 Filesystem
mtd1 0x90010000 0x90086B80 Kernel
mtd2 0x90000000 0x90010000 bootloader
mtd3 0x903f0000 0x90400000 config
mtd4 0x90010000 0x903f0000 Kernel + FS

Per farlo, digitate i seguenti comandi:

quote "SETENV mtd0,0x90086B80,0x903f0000" (fs)
quote "SETENV mtd1,0x90010000,0x90086B80" (kernel)
quote "SETENV mtd4,0x90010000,0x903f0000" (fs+kernel)

Ora la tabella di partizioni è pronta.  Potete scrivere l’immagine di OpenWrt con:

quote "MEDIA FLSH"
binary
debug
hash
put "openwrt-ar7-squashfs.bin" "c mtd4"
quote REBOOT
quit

Ora aspettate qualche minuto, l’unità si riavvierà e da subito noterete che il led status lampeggia in modo diverso da prima: durante il boot in modo veloce e, una volta avviato, lampeggia in stile heartbeat.

Ripartizionare e Flashare con CICLaMaB

Il software CICLaMaB [3] (funziona su Windows XP) è molto semplice: basta inserirvi l’indirizzo del bootloader (5.8.8.8 ricordate di impostare la vostra scheda di rete per trovarvi nella stessa subnet) e il path del file immagine “unico” che volete scrivere. A questo punto inserite l’alimentazione nel router e dopo circa tre secondi premere il tasto “connetti” in CICLaMaB. Ora modificate le partizioni con il tasto apposito in modo da rispecchiare i valori qui di seguito:

D-Link DSL-524T Partizioni CICLaMaB

Ecco come modificare il profilo "OpenWrt AR7Port"

Io ho modificato e salvato il profilo “OpenWrt AR7Port”. Per finire premete il tasto per flashare il router.
Non preoccupatevi se vi da errore al comando “quote REBOOT”, nonostante questa notifica tutto è andato come doveva.

Ora aspettate qualche minuto, l’unità si riavvierà e da subito noterete che il led status lampeggia in modo diverso da prima: durante il boot in modo veloce e, una volta avviato, in stile heartbeat (più la CPU è carica, più il LED “batte” velocemente).

Primo avvio di OpenWrt

Ora manca solo la parte più semplice!
Eseguite l’accesso in telnet e configurate la vostra password col comando passwd. Ora chiudete la connessione telnet e riapritene una ssh ed eseguite le modifiche ai file di configurazione!

Configurazione networking e ADSL

Per configurare il modem col protocollo PPPoE ed incapsulamento LLC, fate in modo che il vostro file /etc/config/network somigli a quello riportato qui:

root@DSL-524T:~# cat /etc/config/network

config 'interface' 'loopback'
    option 'ifname' 'lo'
    option 'proto' 'static'
    option 'ipaddr' '127.0.0.1'
    option 'netmask' '255.0.0.0'

config 'interface' 'lan'
    option 'type' 'bridge'
    option 'ifname' 'eth0'
    option 'proto' 'static'
    option 'netmask' '255.255.255.0'
    option 'nat' '1'
    option 'ipaddr' '192.168.1.1'
    option 'macaddr' ''
    option 'ip6addr' ''
    option 'gateway' ''
    option 'ip6gw' ''
    option 'dns' ''

config atm-bridge
    option unit     0
    option encaps   llc
    option vpi      8
    option vci      35

config interface wan
    option ifname   nas0
    option proto    pppoe
    option username aliceadsl
    option password aliceadsl

Avvio automatico connessione ADSL

Per far sì che il modem si connetta automaticamente all’avvio, dovete fare una piccola modifica al fie /etc/init.d/network. Sostituite all’interno della funzione boot() l’ultima istruzione: al posto di /sbin/wifi up scrivete start.
Dovrebbe risultare qualcosa del genere:

boot() {
    ...
    setup_switch
    [ -s /etc/config/wireless ] || \
        /sbin/wifi detect > /etc/config/wireless
    start
}

Ora salvate e riavviate. Una volta che il led status è in heartbeat e il led ADSL è acceso fisso provate a pingare un indirizzo internet… se ottenete risposta avete finito… altrimenti… ricontrollate i file di configurazione!

Interfaccia Web X-Wrt

Per qualsiasi altra configurazione, potete affidarvi all’interfaccia X-Wrt. Inserite nel browser l’idirizzo IP del vostro router, alla richiesta di username inserite root e come password quella che avete impostato col comando passwd alla prima connessione telnet. L’interfaccia è molto intuitiva, se siete arrivati fin qui non c’è bisogno che ve la spieghi!!! 😉

Dissipatore per la CPU

Per abbassare le temperature della calorosa CPU, ho recuperato un dissipatore da un transistor MOSFET e l’ho appiccicato con una goccia di colla e 2 strisce di pasta termoconduttiva al SoC. Avevo notato che anche lo switch ADM6996M scaldava, ma ho deciso di non aggiungerci un dissipatore… probabilmente questo componente è costruito con un processo produttivo meno recente e di dimensioni maggiori, per cui dovrebbe risentire meno del calore.

Vi riporto un paio di foto del piccolo mod effettuato al router:

La CPU con colla e pasta termoconduttiva

La CPU con colla e pasta termoconduttiva

Ecco la CPU con il dissipatore applicato

Ecco la CPU con il dissipatore applicato

LED Mod

Dato che i LED verdi del router sono invisibili di giorno, ma soprattutto dalla postazione dove mi trovo di solito, ho provveduto a dissaldare il LED di status e a sostituirlo con uno ad alta luminosità azzurro, recuperato da una RB411 colpita da un fulmine… l’effetto finale è ottimo!

Il nuovo led status azzurro, ora suffiicentemente visibile anche di giorno!

Il nuovo led status azzurro, ora suffiicentemente visibile anche di giorno!

Stanotte controllerò se è troppo luminoso o se mi permette di dormire!

Bibliografia

  1. La pagina di Linux MIPS su TI AR7
  2. La pagina OpenWrt OldWiki dedicata al DSL-524T
  3. CICLaMaB Che Iddio Ce La Mandi Buona

Tags: , , , , , ,

  1. ath’s avatar

    Il tuo 524t è instabile per la temperatura? Il mio scalda ma devo dire che non si è mai bloccato (sta giusto finendo un torrent da 77 GB senza il minimo problema :p)

    Su quello che avevo prima (sempre 524t) invece dopo parecchi mesi ha iniziato ad avere problemi lo switch, anche se non scaldava eccessivamente (va anche detto che gli ADM6996 sono abbastanza diffusi sui router per cui mi sembra difficile che soffrano tutti di surriscaldamento).

    Per il momento sta funzionando aperto 😉

  2. Mattia’s avatar

    Ricordo che il primo anno, quando lo comprai, d’estate capitava spesso che si bloccasse dopo poche ore di funzionamento, soprattutto aprendo programmi di p2p… la situazione è migliorata con gli ultimi firmware (nell’ultimo era anche stata rifatta la webif) ma in ogni caso presentava troppe limitazioni, e spesso per fare un port forward si dovevano seguire procedure macchinose e a mio parere inutili (ma forse la loro intenzione era di fare un sistema a prova di utonto).

    Tu invece per i torrent che sistema hai adottato? Monti un disco di rete e lo usi come partizione per i download? mi interesserebbe vedere la tua config, e magari scriverci un howto o qualcosa di simile! che ne pensi?

  3. ath’s avatar

    No, sto usando un pc (una EPIA) per i torrent, il D-Link mi fa da NAT per uscire. Ho installato OpenWrt per impostare il firewall più facilmente (anche l’ASUS WL-500gD che uso come router usa OpenWrt, in passato usavo quello per scaricare i torrent con un disco esterno).
    La configurazione che ho usato per il D-Link è abbastanza standard, ho abilitato IPv6 ed installato mini-snmpd per ottenere informazioni sul traffico (grafici su http://athproject.dyndns.org/rrd/).
    Se ti serve la configurazione di qualcosa chiedi pure, quando avrò finito (quest’estate, spero) di sistemare la rete a casa posterò delle foto di tutto il sistema e un po’ di documentazione…

  4. Mattia’s avatar

    Usi IPv6? Interessante… ma lo usi sulla lan, o in tunneling anche per la wan?

  5. ath’s avatar

    Per la LAN ed esce attraverso 6to4 verso internet, aspettando che prima o poi Telecom si decida a dare servizio IPv6 nativo (eh come no).
    Ho installato OpenVPN sul mio router in modo da raggiungere la mia LAN v6 quando sono in giro con il portatile, così non ci sono problemi di dover assegnare indirizzi o route a mano e incasinare il routing v4.
    Sarebbe bello preparare un howto, non so a quanti altri possa interessare però.

    Non è che sia poi tanto utile, è più che altro per curiosità… ho visto che però adesso D-Link vende alcuni router che supportano IPv6 già con il firmare originale, sia connettività nativa che tunnelling.

  6. Mattia’s avatar

    A me interesserebbe, e comunque meglio farsi trovare preparati, non ritengo che la transizione sia così lontana… adesso devo uscire ne riparliamo dopo con calma!

  7. bovirus’s avatar

    Ciao.

    Vorrei avere qualche info in più relativamente al partizionamento.

    Nella nuova 10.3 finale ma anche qualche versione precedente non abbia quel partizionamento.

    Nella nuova 10.3 leggendo il file squash.bin queste sono le info ricavabili

    setenv mtd0 0x900f0000,0x903f0000
    setenv mtd1 0x90010090,0x900f0000
    setenv mtd2 0x90000000,0x90010000
    setenv mtd3 0x901f0000,0x90200000
    setenv mtd4 0x90010000,0x903f0000

    Il file è paddato per riempire la zona flash a blocci di 8k.

    – Fiel configurazione
    Quando si carica un nuovo firmware andrebbe caricato anche nella zona MTD3 (configurazione) uno specifico file.

    Nelle operazioni indicate non vedo il caricamento del file di configuarzione. Va bene quello originale del modem (non viene toccata la zona MTD3)?

    Grazie.

  8. bovirus’s avatar

    Per chi avesse problemi con la ethernet segnalo che è un problemo conosciuto di Dlink/NetGear/Linksys.

    Potrebbe essere sistemato sostituendo alcuni condensatori LOW ESR 105C nelle vicinanze dello switch.

  9. Mattia’s avatar

    Ciao Bovirus, la tua segnalazione è corretta, le informazioni riportate sono un po’ datate… c’è da dire però che ogni volta che ci si crea un nuovo firmware si hanno partizioni di dimensione diversa (in base a quanti KB occupa il kernel).
    Insomma ognuno deve calcolarsele un po’ da sè… soprattutto poi coi cambi di release di OpenWrt possono esserci sostanziali differenze.

    La mtd3 l’ho sempre lasciata invariata, è l’area alla fine della flash che contiene le configurazioni del bootloader. Così come mtd2 (che contiene il bootloader all’inizio della flash).

    Penso che l’unica cosa fondamentale in mezzo a tutto quel casino è che la partizione mtd1 kernel punti correttamente all’area di memoria dove OpenWrt tiene il kernel. In questo modo una volta avviato si gestisce poi da sè lo spazio disponibile sulla flash…

    Scusa se sono un po’ vago ma sono reduce dal mio compleanno ed è da un po’ che non ripartiziono il Dlink! =)

    Grazie per la tua segnalazione riguardo i condensatori fallati!

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.