Come ho già scritto diverso tempo fa sul wiki dell’Associazione PN LUG, replico anche sul mio blog l’articolo esplicativo.

Come liberare il router Cisco Linksys WRT54GL dal firmware originale proprietario.
OpenWrt è il firmware interno per dispositivi embedded utilizzato per la gestione del traffico. Nel nostro caso utilizzeremo OpenWRT dentro un router domestico, effettuando un test hardware per il Cisco Linksys Wireless-G Broadband Router WRT54GL v1.1.

OpenWrt è Linux based e include un kernel Linux come i BusyBox. Ha all’interno un gestore di pacchetti chiamato opkg (simile al pacchetto apt di ubuntu).

Prima di installare OpenWrt nel router, è necessario sapere se il device è compatibile con OpenWrt, per averne la certezza è necessario vedere se il modello è compreso nella Tabella degli hardware di OpenWrt.

Progetti collegati
Successivamente all’installazione e alla prima configurazione di OpenWrt su questo apparato, desidero proporre i seguenti progetti dedicati allo stesso OpenWrt:

  • WifiDog,  un semplice ma preciso hotspot captive portal wifi realizzato con software open source per OpenWrt;
  • OpenWisp, un ampio progetto  di captive portal (manager, geografico, ecc. scritto su scratch con Ruby on Rails;
  • Mesh Network con Openwrt Backfire, come configurare il router con OpenWrt backfire 10.03.1 per una mesh network con l’utilizzo di batman-adv;
  • OpenMesh batman-adv, un esempio di parti della configurazione B.A.T.M.A.N. su OpenWrt.

Specifiche Hardware
Prima di esplorare il sistema OpenWrt, andiamo a conoscere qual’è l’hardware che abbiamo a disposizione nel nostro device:

  • CPU: Broadcom BCM5352 @ 200 MHz
  • RAM: 16 MB
  • Memoria Flash:  4 MB

CONTROLLO VELOCE: Per essere sicuri che l’hardware contenuto sia esatto, possiamo controllare le specifiche del modello leggendo il prefisso del numero di serie del device, utilizzando queste informazioni.  
Nel nostro caso l’hardware viene supportato completamente da OpenWrt, ma ci sono alcuni limitazioni dovute al tipo di memoria flash utilizzata.
Vedi le informazioni riportate in queste pagine:

La soluzione per il nostro caso è ben documentata. Utilizzeremo il firmware OpenWrt 10.03.1-rc6 (nome in codice “backfire”).

Scaricare la versione corretta del firmware
Per installare OpenWrt nel router, la prima cosa da fare è andare a controllare le indicazioni presenti e dedicate al nostro modello Linksys, descritte nel sito di OpenWrt. Per questa marca di router troviamo molte versioni disponibili di OpenWrt, ma per trovare la versione corretta dobbiamo cercare il modello esatto:

  • La versione stabile di OpenWrt è la Kamilaze, anche se troviamo presente la versione Backfire con qualche bug e qualche instabilità negli adattamenti di attitude;
  • La versione che viene normalmente raccomandata è la 8.09 con Kamilaze, mentre la versione più aggiornata del firmware è la brcm-2.4;
    Durante questo test installeremo la versione brcm-2.4 Backfire
  • La CPU è una Broadcom con il prefisso brcm

In questa pagina viene evidenziato che il supporto esiste sia per la versione brcm-2.4 che per la brcm47xx; la differenza tra la versione brcm-2.4 e brcm47xx viene spiegata in questa pagina.
Per ognuna delle versioni del firmware, è possibile scaricare il file immagine che termina con l’estensione .bin .
Se sono disponibili sia i file JFFS2 che SquashFS, è preferibile utilizzare l’immagine di tipo SquashFS.
Andando a vedere lo storico della versione, possiamo determinare se la versione 8.09 sia la migliore e quali siano le differenze nelle versioni kamikaze, backfire e le configurazioni attitude.

L’immagine del firmware che utilizzeremo per il nostro test è quella corrispondente alla versione brcm-2.4 Backfire.

Installazione
È possibile installare OpenWrt direttamente dall’interfaccia web del router Linksys. Se state effettuando la prima installazione fatelo utilizzando questa interfaccia, è il modo più semplice e veloce.

Procedura

  • Scaricate il file immagine del firmware ”’openwrt-wrt54g-squashfs.bin”’ dalla cartella ”’brcm-2.4”’ del sito, nel vostro PC. Trovate il file immagine su http://downloads.openwrt.org/backfire/10.03.1/brcm-2.4/
  • Aprite un browser alla pagina di login del router, all’indirizzo http://192.168.1.1 ed effettuate il login standard (user root e password admin);
  • Tramite il browser andate all’indirizzo http://192.168.1.1/Upgrade.asp, oppure scegliete dal menu del web la pagina Administration → Firmware Upgrade;
  • Fate l’upload del firmware, utilizzando il file precedentemente scaricato openwrt-wrt54g-squashfs.bin , prelevandolo dalla vostra cartella locale di download;
  • Attendete il completamento del trasferimento del firmware per 2 minuti. Il router si riavvierà automaticamente dopo aver completato l’aggiornamento.

Connessione al router via Telnet
Il router, una volta aggiornato, può essere connesso via Telnet all’indirizzo 192.168.1.1. Per testare questa possibilità, aprite un terminale e digitate:
  > telnet 192.168.1.1
Questa modalità di connessione vi farà conoscere un modo diverso di accedere al vostro router. I Cisco Admin ne sanno qualcosa in merito!  🙂

Connessione al router via browser
Il primo accesso all’interfaccia web luci di OpenWrt è disponibile all’indirizzo http://192.168.1.1 , con user root e SENZA password iniziale.

Servizi Telnet e SSH
ATTENZIONE: Solo dopo l’avvenuto inserimento della password di login, il servizio Telnet verrà disabilitato e il servizio SSH verrà abilitato!!

Servizio TFTP
Ora assicuratevi che anche il servizio tftp sia disponibile.
Digitate i seguenti comandi dopo esservi connessi al router via terminale o in Telnet o in SSH.
Questo vi assicurerà che il servizio tftp è disponibile, nel caso in cui il vostro router necessiti di essere riconfigurato in emergenza.
  > nvram set boot_wait=on
  > nvram set wait_time=10
  > nvram commit && reboot

NOTA: in generale per i modelli WRT54G* la variabile per impostare il tempo d’attesa per l’avvio del router è boot_time. Sembra che per questo particolare modello (WRT54GL) la variabile corretta sia invece wait_time come ho indicato sopra. Vedi la pagina di riferimento.

Connessione al router via SSH
La connessione via web tra il router e il client genererà automaticamente una chiave SSH al primo login effettuato con la password di amministratore.
Il router inizialmente potrebbe metterci un po di tempo durante la prima generazione delle chiavi. Nel caso il router vi butti fuori dalla connessione via web tramite il browser, riprovate a connettervi dopo aver atteso uno o due minuti.
NOTA: Al primo avvio OpenWrt ci metterà un po di tempo prima di rendere disponibile la connessione via web, in quanto deve configurare per la prima volta, ed avviare, i suoi file di sistema oltre a generare le chiavi SSH; il server SSH non si avvierà fino a quando la generazione delle chiavi non sarà terminata.

Configurazione del router
La configurazione di rete del router viene scritta nel file  /etc/config/network. I valori iniziali di questo file, per la nostra configurazione, dovranno essere:

 #### VLAN configuration
 config switch eth0
        option vlan0    “0 1 2 3 5*”
        option vlan1    “4 5”
 
 #### Loopback configuration
 config interface loopback
        option ifname   “lo”
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0
 
 #### LAN configuration
 config interface lan
        option type     bridge
        option ifname   “eth0.0”
        option proto    static
        option ipaddr   192.168.1.1
        option netmask  255.255.255.0
 
 #### WAN configuration
 config interface        wan
        option ifname   “eth0.1”
        option proto    dhcp

Dopo aver editato e salvato questo file, per applicare la nuova configurazione, digitate il comando:
  > /etc/init.d/network restart

Configurazione dello Switch del router
La sezione dello Switch che troviamo di seguito nel file è responsabile del funzionamento di una parte dell’hardware, facendola apparire come un’interfaccia indipendente. La parte di configurazione che specifica la caratteristiche dello switch, è la seguente:

 #### VLAN configuration
config switch eth0
        option vlan0    “0 1 2 3 5*”
        option vlan1    “4 5”

Nella configurazione seguente, i numeri da 0 a 5 rappresentano i numeri delle porte, dove per la VLAN0 si prevedono le porte da 0 a 5* e per la VLAN1 vengono incluse le porte 4 e 5.
(Il simbolo * nella porta 5* indica il PVID).

Come visualizzato nella grafica, in questo caso lo switch separa le porte LAN dalle WAN.

Interfacce
Gli altri parametri nel file di configurazione di rete descrivono le interfacce. Le interfacce sono reti logiche, alle quali possono essere configurati i vari indirizzi IP, le rotte e altre magie.

Le 3 interfacce vengono chiamate loopback, lan e wan. Le interfacce fisiche associate con queste interfacce logiche sono: lo, eth0.0 e eth0.1.

Ripristino del router e ricaricamento del firmware
In alcuni casi, potrà capitare che la procedura di aggiornamento del firmware non vada a buon fine, rendendo il router del tutto inutilizzabile e inaccessibile al login.
Questo problema viene spesso descritto come bad upgrade o router bricked, che significa aggiornamento non andato a buon fine o router danneggiato
Nessun problema. Questo modello di router ha 7 vite come i gatti e sarà possibile reinstallare nuovamente il firmware daccapo, seguendo le seguenti informazioni.
Come spesso accade se il router non riesce a caricare correttamente il firmware, la spia POWER presente sul router non smetterà MAI di lampeggiare (lo fa normalmente all’accensione, fino al completamento del caricamento del sistema operativo).
Nonostante questo errore, sarà comunque possibile riuscire a connettersi al router utilizzando un normale cavo di rete ethernet e seguendo una particolare procedura.

Vi descrivo le diverse procedure da seguire per riuscire a connettere il router, in modo da poterne ripristinare il firmware originale.  Utilizzate la procedura a voi più ottimale per riuscire a risolvere il problema

Come fare
Attivazione della modalità failsafe
Per arrivare a questa modalità, è necessario accendere il router normalmente e attendere l’accensione della spia DMZ. Alla sua accensione, premere immediatamente e mantenere premuto (utilizzando una penna o una graffetta per documenti) il pulsante posteriore di RESET, fino a quando anche la spia DMZ non inizierà a lampeggiare. Successivamente, potete rilasciare il pulsante di RESET.
Per accedere al router, sarà necessario connettere un cavo ethernet ad una delle sue quattro porte interne (non alla porta Internet) e impostare sul vostro PC una configurazione di rete statica, configurando il PC in questo modo:

Indirizzo IP: 192.168.1.2
Netmask: 255.255.255.0
Gateway: 192.168.1.1

Procedura diretta
Questa procedura è possibile SOLO se è possibile connettere direttamente il device via Telnet, tramite la sua porta interna.

  • Connettere il router via telnet da terminale, con il comando:  telnet 192.168.1.1
  • entrare nella cartella /tmp/, con il comando   cd /tmp/
  • scaricare il file del firmware nella cartella, con il comando wget http://downloads.openwrt.org/backfire/10.03.1/brcm-2.4/openwrt-brcm-2.4-squashfs.trx
  • assicurarsi di essere posizionati nella cartella dove è stato scaricato il file, usando il comando  cd /tmp/
  • digitare il comando di scrittura del firmware  mtd -r write openwrt-brcm-2.4-squashfs.trx linux
  • attendere il completamento della scrittura del file all’interno della cartella del router

ATTENZIONE: al termine della scrittura il router cercherà di riavviarsi da solo, senza riuscirci. Sarà necessario spegnere e riaccendere il router manualmente.  

Procedura di connessione dal PC via SSH
Questa procedura è possibile SE NON è stato possibile connettere direttamente il device tramite la sua porta TELNET.
NOTA: Se avevate già impostato una password al router, procedete oltre a questo paragrafo, passando al paragrafo riguardante la connessione in SSH.

Se precedentemente non avevate ancora impostato la password di login, sarà necessario abilitare prima di tutto il servizio SSH che provvederà a dare una password fittizia all’utente root, in quanto solo in questo caso verrà abilitato automaticamente il servizio SSH.

Proseguire come indicato in questa procedura:

  • accedere al router da terminale, in modalità Telnet, all’indirizzo IP impostato nella precedente configurazione (che consideriamo essere quella predefinita)
    >  telnet 192.168.1.1
  • una volta entrati nel router, digitare i seguenti comandi:
    > mount_root
    > /etc/init.d/dropbear start   (avvierà il demone SSH)
  • > passwd               (modificherà la password di root)
  • uscite dalla connessione Telnet, con il comando:  exit o quit

Ora il router sarà raggiungibile tramite la connessione via SSH.

Procedete con il download del firmware, come indicato in precedenza, scaricando il file del firmware in una cartella del PC a vostra scelta; per far questo aprire il terminale, posizionarsi nella cartella desiderata e digitare il comando:
 
 wget http://downloads.openwrt.org/backfire/10.03.1/brcm-2.4/openwrt-brcm-2.4-squashfs.trx

Per inviare il file del firmware al router, tramite una connessione in SSH, sempre da terminale posizionarsi all’interno della cartella che contiene il file scaricato e inviare il file al router con il comando:
 > scp openwrt-brcm-2.4-squashfs.trx root@192.168.1.1:/tmp

Successivamente, sempre da terminale, connettere il router in SSH, con il comando:
  >  ssh root@192.168.1.1

posizionarsi nella cartella dove è stato scaricato il file, con il comando:
  >  cd /tmp/

digitare il comando di scrittura del firmware:
  >  mtd -r write openwrt-brcm-2.4-squashfs.trx linux

e attendere il completamento della scrittura del file.

ATTENZIONE: anche in questo caso al termine della scrittura del file, il router cercherà di riavviarsi, senza riuscirci. Sarà necessario spegnere e riaccendere il router manualmente.  

Procedura di connessione al router dal PC via TFTP
Come spesso accade se il router non riesce a caricare correttamente il firmware, la spia POWER presente sul router non smetterà mai di lampeggiare (lo fa normalmente per breve tempo all’accensione, fino al completamento del caricamento del sistema operativo).
Nonostante questo errore, sarà comunque possibile connettere il router utilizzando un cavo di rete. Per fare questo, seguite queste semplici operazioni:

  • connettete la porta ethernet del PC con il cavo di rete ad una delle 4 porte del router; NON alla porta Internet;
  • impostare l’avvio del device, bloccandolo al boot, come fatto in precedenza.
    * impostate nel PC questa la stessa configurazione utilizzata in questo articolo per la connessione Telnet;
  • successivamente aprite un terminale e digitate il comando:
    > ping 192.168.1.1
    noterete che il router sta rispondendo, segno che la connessione via cavo ethernet è funzionante.

A questo punto, sempre utilizzando il terminale, spostatevi all’interno della cartella che contiene il file del firmware da inviare al router,  verificate la presenza del file  .bin , con il comando:
  >  ls -la *.bin

il terminale visualizzerà un testo simile a questo:
  >  ls -la *.bin
 -rw-rw-r– 1 utente utente 2428960 ago  1 15:38 openwrt-wrt54g-squashfs.bin

Arrivati a questo punto è possibile trasferire il file del firmware nel router, utilizzando da terminale i seguenti comandi:
  >  tftp 192.168.1.1
  > tftp> binary
  > tftp> put openwrt-wrt54g-squashfs.bin

Il router, uan volta trasferito il file, risponderà con:
  > Sent 2428960 bytes in 23.8 seconds
  > tftp>

A questo punto il lavoro è completato.  Uscire dal programma tftp con il comando:
  > tftp> quit

Uscite dal terminale, digitando il comando   exit .
Se tutto è andato a buon fine, il router si sarà riavviato normalmente e avrete finalmente aggiornato con successo il vostro router Cisco Linksys WRT54GL con il firmware da voi desiderato.

Buon divertimento con il Software Libero.

Grazie per aver visitato il mio blog, lasciate un vostro commento a questo post...