OpenWRT su DGN2200v1

Il mio firmware preferito per i router è OpenWRT: è estremamente versatile, in quanto trasforma un router in una Linux box, e molto molto stabile. Basti pensare che il mio router principale, il TP-Link TD-W8970, ha fatto più di 100 giorni di uptime senza mai dare problemi.

Questa volta il router su cui ho cercato di installarlo è il Netgear DGN2200 prima versione. Può essere riconosciuto dall’assenza di versioni nel nome del modello dell’eticheta posta sul fondo.

Questo device è basato su piattaforma Broadcom brcm63xx, quindi su OpenWRT l’ADSL non sarà più disponibile poiché richiede dei blob proprietari compatibili solo con un kernel di 10 anni fa. Se vi serve ma volete comunque potenziare il vostro dispositivo, dovrete per forza ricorrere a ModFS, un firmware basato su quello stock che rende possibile l’aggiuntà di funzionalità tramite una memoria USB.

Un’altra cosa che può far desistere dal cambio è che per flashare OpenWRT è necessario utilizzare l’interfaccia seriale. Il formato dell’interfaccia originale è proprietario e aggiunge al filesystem squash e al kernel compresso con LZMA un header proprietario. Ci sarebbero anche i tool per creare quell’immagine, basterebbe scaricare il pacchetto GPL dal sito ufficiale Netgear. Ci ho anche provato, portando al brick il router a causa di un’incompatibilità tra la versione di JFFS2 dei tool e del kernel di OpenWRT.

Il mio amico proprietario del firmware comunque ha una connessione in fibra ottica, quindi non gli interessava molto dell’ADSL, e per il flash tramite seriale e TFTP si è fidato di me, che ho fatto più volte la procedura con router diversi 😊 .

Vi consiglio di leggere prima tutta la guida, prima di fare l’upgrade.

Per portare a termine la procedura avrete bisogno delle seguenti cose:

  • Cacciavite Torx T8
  • Convertitore TTL a 3.3V: un PL2303 per avere l’USB (io ho usato questo, è contenuto anche nei cavi Nokia CA-42), oppure un FTDI o un MAX2323, o Arduino (non sono sicuro di questo, dato che lavora a 5V)
  • Software per la gestione della seriale (io ho usato l’IDE Arduino, ma qualsiasi software dovrebbe andare)
  • Server TFTP (ho usato TFTPGUI, che è scritto in Python)
  • Cavo di rete
  • Privilegi di root/sudo/amministratore
  • Immagine di OpenWRT: scaricatela dalla sezione download ufficiale, la versione che preferite. Io ho scaricato l’ultima stable, ovvero Barrier Braker (14.07). Una volta selezionata la versione scaricate il file brcm63xx/generic/openwrt-96358VW-generic-squashfs-cfe.bin

Procuratevi prima di tutto i vari software e assicuratevi, se siete su Windows, di avere i driver del vostro convertitore seriale.

Dopodiché impostate un indirizzo statico alla vostra connessione cablata. Per non cambiare le impostazioni del router insierite 192.168.1.100 e netmask 255.255.255.0, il resto vuoto. Se avete altre interfacce con un indirizzo di quella rete (ovvero 192.168.1.x) disabilitatele.

Avviate anche il server TFTP. Se come me usate TFTPGUI, basta inserire il firmware nella directory tftproot e avviare il server da root con python3 tftpgui.py --nogui. Il parametro nogui è opzionale, io l’ho aggiunto perché non ho thinker per python 3. Nei sistemi POSIX non potete avviare il server da utente non privilegiato perché TFTP lavora sulla porta 69.

Adesso bisogna preparare l’hardware. Il DGN è facile da aprire, a patto che abbiate il cacciavite torx: basta svitare le 4 viti poste sotto i gommini inferiori, che peraltro non sono neanche incollati.

La seriale si trova vicino alla schermatura. Ecco un’immagine:

Interfaccia seriale del DGN2200

Questa seriale non è di certo tra le migliori che potessero capitare: non solo non ha gli header, ma i pad di Tx e Rx non sono neanche forati, quindi, se come me non volete stagnare niente, è molto difficile tenere i fili con una sola mano. Per fortuna c’è quella schermatura che è connessa a massa, quindi almeno la massa la potete attaccare con il nastro adesivo. Se avete del filo con anima singola e abbastanza rigida riuscite a tenere con nastro adesivo anche i fili di Rx e Tx, o almeno uno dei due in modo da avere una mano libera. Nel mio caso ha funzionato.

Dopo la seriale attaccate anche il cavo di rete e di alimentazione, ma non accendete ancora il Netgear.

Aprite il programma della seriale. Le impostazioni per la seriale sono 115200 baud per secondo, 8N1, il resto dipende dal vostro convertitore.

Accendete il router e premete un tasto qualsiasi sul computer, serve per fermare il boot. Avete solo un secondo per farlo.

Se ce l’avete fatta dovrebbe esserci un prompt con la scritta CFE>.

Date il comando flashimage openwrt-96358VW-generic-squashfs-cfe.bin.

Non mi sono salvato l’output, ma se va tutto bene prima dovrebbe venire fuori una cosa simile a questa (vado a memoria):

Loading from 192.168.1.100:openwrt-96358VW-generic-squashfs-cfe.bin
Loaded xxx bytes.
Flashing into 0xb....

Dopodiché si dovrebbe riavviare. Questa volta lasciate che faccia il boot, andrà su OpenWRT.

Io ci ho provato in due giorni diversi perché al primo mi dava errori tipo eccezioni, li scriveva molto velocemente sulla seriale, e non flashava niente, anche se riavviavo il router, staccavo l’alimentazione etc… Inoltre dovevo dargli manualmente l’indirizzo IP, anche se era impostato correttamente. Non so come mai.

Al secondo giorno invece è andato senza problemi, ma avevo rinominato il file di OpenWRT in stable.bin ed era quando avevo già brickato provando tramite web.

In ogni caso se funziona dovreste vedere le informazioni tipiche di un boot di Linux sulla seriale e dato che ci siete potreste anche cambiare direttamente dalla seriale la password di root. Dovete prima attivare la console con il tasto invio, quindi dare il comando passwd.

Se non avete problemi in meno di mezz’ora dovreste riuscire a compiere la procedura e vi troverete con un router ricco di funzionalità.

Per il momento abbiamo provato solamente il network base (rete cablata e wireless) e tutto andava correttamente.

Casomai se avete problemi fatemi sapere 😊 .

23 commenti