Openwrt su Netgear DGN2200v1

Pubblicato il dom 06 marzo 2016 in howto • 10 min read

La sezione modem del mio modem/router ha cessato di funzionare e, piuttosto che buttare via questo giocattolino che mi ha servito fedelmente per 5 anni 24/7, ho deciso di riutilizzarlo installandovi OpenWRT.

Per coloro, fra di voi, che non hanno mai sentito parlare del progetto OpenWRT si tratta di un firmware basato su Gnu/Linux che supporta decine di modelli di dispositivi di diversi produttori. Le possibilità di utilizzo sono infinite, limitate solo dalla vostra fantasia e... beh dalle caratteristiche hardware del vostro dispositivo.

Potete utilizzare vostro dispositivo come router, firewall, VPN server, DNS caching, transparent proxy, server samba, print server, ftp server, download station, etc ...

Io ad esempio ho sostituito con Openwrt il firmware di tutti i miei router/AP casalinghi. Ne ho montato alcuni presso alcuni clienti SOHO per gestire la loro rete in ufficio con piena soddisfazione di tutti devo dire.

Se volete saperne di più visitate la pagina ufficiale del progetto.

L'occorente per installare OpenWRT sul DGN2200v1 è:

  • DGN2200 v1 (conoscere la revisione hardware è fodamentale. Se installaste un firmware sbagliato rischiereste di brickare il vostro router trasformandolo in un bel fermacarte);
  • Cacciaviti Torx;
  • Cavo di rete;
  • Adattatore USB to serial TTL a 3V3 Volts (Io ho usato un FTDI232RL);
  • Saldatore e tirastagno(se non siete capaci di usarne uno, vi consiglio di affidarvi ad un esperto);
  • Un computer/laptop con privilegi di amministratore/root;
  • Un software per gestire la comunicazione seriale (screen, minicom, picocom, PuTTY);
  • Un server TFTP funzionante (io ho usato su Arch Linux tftp-hpa);
  • L'immagine del firmware scaricata dal sito ufficiale nella sezione download. Io ho usato l'ultima versione stabile di OpenWRT, ovvero Chaos Calmer (15.05). Scaricate il file openwrt-15.05-brcm63xx-generic-96358VW-generic-squashfs-cfe.bin dalla sottosezione brcm63xx/generic/, dopo aver selezionata la versione di OpenWRT voluta, nel mio caso la 15.05 appunto. Rinominate il file openwrt-15.05-brcm63xx-generic-96358VW-generic-squashfs-cfe.bin in qualcosa di più semplice da ricordare, ad es. firmware.bin.

Non mi dilungherò su come impostare un server TFTP sul vostro computer. Usate la wiki di OpenWRT e/o Google, esistono decine di tutorial che spiegano in dettaglio come fare. Vedetelo come un test, se non siete in grado di impostare un semplice server TFTP allora ....

Dunque, come primo passo dovete saldare i pin sulla porta seriale a bordo del router.

Svitate il case di plastica.

La porta seriale si trova immediatamente sotto la scheda wireless.

Con il tirastagno dovete prima liberare i fori dallo stagno presente. Questa parte è un po' una rogna ed occorre manualità oltre che una certa esperienza con il saldatore. Nell'immagine sottostante potete vedere il risultato. (ho scattato la foto quando ancora dovevo liberare il foro della massa)

Porta seriale

Qui l'immagine ingrandita.

Dopo over saldato i pin dovreste ottenere qualcosa del genere

Porta seriale

Qui l'immagine ingrandita.

Impostate la scheda di rete ethernet del vostro pc con l'indirizzo fisso 192.168.1.100 e netmask 255.255.255.0.

Disabilitate il vostro firewall oppure configuratelo in modo da permettere le connessioni UDP in entrata sulla porta 69.

Collegate il cavo di rete ad una qualunque porta lan del modem.

Collegate il vostro adattatore USB to Serial TTL alla scheda non alimentata secondo lo schema:

Adattatore Modem
GND GND
TX RX
RX TX

Io ho usato questo adattatore

![FTDI232RL USB to serial TTL]({filename}/f/imgs/usb-ttl-ft232rl-pinout.png "Adattatore FTDI232RL)

Ecco un'immagine del collegamento

Collegamento

Qui l'immagine ingrandita.

Avviate il programma per gestire la seriale. I parametri della connessione sono 115200 bps, 8N1. Come impostarli dipende dal soft che usate.

Ecco per comodità la configurazione di PuTTY

PuTTY seriale

Accendete il modem. Dovreste vedere scorrere l'output della connessione seriale.

Premete un tasto qualunque per arrestare il boot del modem. Occhio che avete solo un secondo.

Se non doveste riuscirvi vi basterà spegnere e riaccendere il modem e riprovare.

Questo dovrebbe essere l'output mostrato:

DGN2200 Boot Code V1.0.6
CFE version 1.0.37-102.9 for BCM96358 (32bit,SP,BE)
Build Date: Fri Nov  6 12:05:36 CST 2009 (weal@svn)
Copyright (C) 2000-2009 Broadcom Corporation.
Parallel flash device: name AM29DL800B, id 0x22cb, size 8192KB
CPU type 0x2A010: 300MHz, Bus: 133MHz, Ref: 64MHz
CPU running TP0
Total memory: 33554432 bytes (32MB)
Boot Address 0xbe000000


Board IP address                  : 192.168.1.1:ffffff00
Host IP address                   : 192.168.1.100
Gateway IP address                :
Run from flash/host (f/h)         : f
Default host run file name        : vmlinux
Default host flash file name      : bcm963xx_fs_kernel
Boot delay (0-9 seconds)          : 1
Board Id (0-5)                    : 96358VW
Number of MAC Addresses (1-32)    : 11
Base MAC Address                  : xx:xx:xx:xx:xx:xx
PSI Size (1-64) KBytes            : 48
Main Thread Number [0|1]          : 0

*** Press any key to stop auto run (1 seconds) ***
Auto run second count down: 1
CFE>

Al prompt CFE> digitate f 192.168.1.100:firmware.bin:

CFE> f 192.168.1.100:firmware.bin

A questo punto se il vostro server TFTP funziona a dovere dovreste vedere questo output:

Loading 192.168.1.100:firmware.bin ...
Finished loading 2818052 bytes
Flashing root file system and kernel at 0xbe010000: .............................................
*** Image flash done *** !
Resetting board...

Il modem si dovrebbe riavviare. Lasciate che esegua normalmente il boot. Ecco l'output:

DGN2200 Boot Code V1.0.6
CFE version 1.0.37-102.9 for BCM96358 (32bit,SP,BE)
Build Date: Fri Nov  6 12:05:36 CST 2009 (weal@svn)
Copyright (C) 2000-2009 Broadcom Corporation.
Parallel flash device: name AM29DL800B, id 0x22cb, size 8192KB
CPU type 0x2A010: 300MHz, Bus: 133MHz, Ref: 64MHz
CPU running TP0
Total memory: 33554432 bytes (32MB)
Boot Address 0xbe000000
Board IP address                  : 192.168.1.1:ffffff00
Host IP address                   : 192.168.1.100
Gateway IP address                :
Run from flash/host (f/h)         : f
Default host run file name        : vmlinux
Default host flash file name      : bcm963xx_fs_kernel
Boot delay (0-9 seconds)          : 1
Board Id (0-5)                    : 96358VW
Number of MAC Addresses (1-32)    : 11
Base MAC Address                  : xx:xx:xx:xx:xx:xx
PSI Size (1-64) KBytes            : 48
Main Thread Number [0|1]          : 0

*** Press any key to stop auto run (1 seconds) ***
Auto run second count down: 0
Booting from only image (0xbe010000) ...
Code Address: 0x80A00000, Entry Address: 0x80a00000
LZMA: Prossible old LZMA format, trying to decompress..
Decompression OK!
Entry at 0x80a00000
Closing network.
Closing DMA Channels.
Starting program at 0x80a00000
[    0.000000] Linux version 3.18.20 (buildbot@builder1) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r46450) ) #1 Fri Sep 4 15:12:19 CEST 2015
[    0.000000] Detected Broadcom 0x6358 CPU revision a1
[    0.000000] CPU frequency is 300 MHz
[    0.000000] 32MB of RAM installed
[    0.000000] board_bcm963xx: Boot address 0xbe000000
[    0.000000] board_bcm963xx: CFE version: 1.0.37-102.9
[    0.000000] bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 0002a010 (Broadcom BMIPS4350)
[    0.000000] board: board name: 96358VW
[    0.000000] MIPS: machine is Broadcom BCM96358VW reference board
[    0.000000] Determined physical RAM map:
[    0.000000]  memory: 02000000 @ 00000000 (usable)
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x00000000-0x01ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x00000000-0x01ffffff]
[    0.000000] Initmem setup node 0 [mem 0x00000000-0x01ffffff]
[    0.000000] Primary instruction cache 32kB, VIPT, 2-way, linesize 16 bytes.
[    0.000000] Primary data cache 16kB, 2-way, VIPT, cache aliases, linesize 16 bytes
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
[    0.000000] Kernel command line:  root=/dev/mtdblock2 rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200
[    0.000000] PID hash table entries: 128 (order: -3, 512 bytes)
[    0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Memory: 27420K/32768K available (2805K kernel code, 139K rwdata, 464K rodata, 1320K init, 192K bss, 5348K reserved)
[    0.000000] NR_IRQS:256
[    0.000000] Calibrating delay loop... 299.26 BogoMIPS (lpj=598528)
[    0.040000] pid_max: default: 32768 minimum: 301
[    0.044000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.048000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.060000] NET: Registered protocol family 16
[    0.068000] registering PCI controller with io_map_base unset
[    0.072000] registering PCI controller with io_map_base unset
[    0.092000] PCI host bridge to bus 0000:00
[    0.096000] pci_bus 0000:00: root bus resource [mem 0x30000000-0x37ffffff]
[    0.100000] pci_bus 0000:00: root bus resource [io  0x8000000-0x8007fff]
[    0.104000] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
[    0.112000] pci 0000:00:01.0: BAR 0: assigned [mem 0x30000000-0x30003fff]
[    0.116000] PCI host bridge to bus 0000:01
[    0.120000] pci_bus 0000:01: root bus resource [mem 0x38000000-0x3fffffff]
[    0.124000] pci_bus 0000:01: root bus resource [io  0x8008000-0x800ffff]
[    0.128000] pci_bus 0000:01: No busn resource found for root bus, will use [bus 01-ff]
[    0.132000] pci 0000:01:1e.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[    0.136000] pci 0000:01:1e.0: BAR 10: assigned [mem 0x38000000-0x3fffffff]
[    0.140000] pci 0000:01:1e.0: BAR 7: assigned [io  0x8008000-0x80080ff]
[    0.144000] pci 0000:01:1e.0: BAR 8: assigned [io  0x8008400-0x80084ff]
[    0.148000] pci 0000:01:1e.0: CardBus bridge to [bus 02-05]
[    0.152000] pci 0000:01:1e.0:   bridge window [io  0x8008000-0x80080ff]
[    0.156000] pci 0000:01:1e.0:   bridge window [io  0x8008400-0x80084ff]
[    0.160000] pci 0000:01:1e.0:   bridge window [mem 0x38000000-0x3fffffff]
[    0.164000] Switched to clocksource MIPS
[    0.168000] PCI: Enabling device 0000:00:01.0 (0000 -> 0002)
[    0.200000] ssb: Found chip with id 0xA8D6, rev 0x00 and package 0x08
[    0.228000] ssb_fallback_sprom: pci bus/device num mismatch: expected 0/0, but got 0/1
[    0.256000] ssb: Sonics Silicon Backplane found on PCI device 0000:00:01.0
[    0.264000] NET: Registered protocol family 2
[    0.272000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[    0.280000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[    0.284000] TCP: Hash tables configured (established 1024 bind 1024)
[    0.292000] TCP: reno registered
[    0.296000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.304000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.308000] NET: Registered protocol family 1
[    0.316000] futex hash table entries: 256 (order: -1, 3072 bytes)
[    0.324000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.332000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.340000] msgmni has been set to 53
[    0.348000] io scheduler noop registered
[    0.352000] io scheduler deadline registered (default)
[    0.360000] bcm63xx_uart.0: ttyS0 at MMIO 0xfffe0100 (irq = 10, base_baud = 1562500) is a bcm63xx_uart
[    0.368000] console [ttyS0] enabled
[    0.368000] console [ttyS0] enabled
[    0.376000] bootconsole [early0] disabled
[    0.376000] bootconsole [early0] disabled
[    0.384000] physmap platform flash device: 02000000 at 1e000000
[    0.392000] physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank. Manufacturer ID 0x0000c2 Chip ID 0x0022cb
[    0.404000] Amd/Fujitsu Extended Query Table at 0x0040
[    0.408000]   Amd/Fujitsu Extended Query version 1.1.
[    0.412000] number of CFI chips: 1
[    0.416000] bcm63xxpart: CFE boot tag found with version 6 and board type 96358VW
[    0.424000] bcm63xxpart: Partition 0 is CFE offset 0 and length 10000
[    0.432000] bcm63xxpart: Partition 1 is kernel offset 10100 and length 11ebe8
[    0.440000] bcm63xxpart: Partition 2 is rootfs offset 12ece8 and length 6c1318
[    0.444000] bcm63xxpart: Partition 3 is nvram offset 7f0000 and length 10000
[    0.452000] bcm63xxpart: Partition 4 is linux offset 10000 and length 7e0000
[    0.460000] 5 bcm63xxpart partitions found on MTD device physmap-flash.0
[    0.468000] Creating 5 MTD partitions on "physmap-flash.0":
[    0.472000] 0x000000000000-0x000000010000 : "CFE"
[    0.480000] 0x000000010100-0x00000012ece8 : "kernel"
[    0.488000] 0x00000012ece8-0x0000007f0000 : "rootfs"
[    0.496000] mtd: device 2 (rootfs) set to be root filesystem
[    0.500000] 1 squashfs-split partitions found on MTD device rootfs
[    0.508000] 0x0000002c0000-0x0000007f0000 : "rootfs_data"
[    0.516000] 0x0000007f0000-0x000000800000 : "nvram"
[    0.520000] 0x000000010000-0x0000007f0000 : "linux"
[    0.532000] bcm63xx-spi bcm63xx-spi: at 0xfffe0800 (irq 9, FIFOs size 542)
[    0.568000] libphy: bcm63xx_enet MII bus: probed
[    0.636000] bcm63xx_enet bcm63xx_enet.0: attached PHY at address 1 [Broadcom BCM63XX (2)]
[    0.648000] libphy: bcm63xx_enet MII bus: probed
[    0.716000] b53_common: found switch: BCM5325, rev 0
[    0.724000] bcm63xx_enet bcm63xx_enet.1: attached PHY at address 0 [Broadcom B53 (1)]
[    0.732000] bcm63xx-wdt bcm63xx-wdt:  started, timer margin: 30 sec
[    0.740000] TCP: cubic registered
[    0.744000] NET: Registered protocol family 17
[    0.752000] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[    0.764000] Bridge firewalling registered
[    0.768000] 8021q: 802.1Q VLAN Support v1.8
[    0.788000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2.
[    0.812000] Freeing unused kernel memory: 1320K (80366000 - 804b0000)
[    2.420000] init: Console is alive
[    2.424000] init: - watchdog -
[    3.428000] init: - preinit -
[    4.304000] random: mktemp urandom read with 16 bits of entropy available
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[    7.824000] mount_root: jffs2 not ready yet, using temporary tmpfs overlay
ifconfig: SIOCGIFFLAGS: No such device
[    7.876000] procd: - early -
[    7.880000] procd: - watchdog -
[    8.952000] procd: - ubus -
[    9.964000] procd: - init -
Please press Enter to activate this console.
[   11.524000] NET: Registered protocol family 10
[   11.544000] ip6_tables: (C) 2000-2006 Netfilter Core Team
[   11.576000] ip_tables: (C) 2000-2006 Netfilter Core Team
[   11.604000] nf_conntrack version 0.5.0 (449 buckets, 1796 max)
[   11.680000] xt_time: kernel timezone is -0000
[   11.708000] PPP generic driver version 2.4.2
[   11.716000] NET: Registered protocol family 24
[   18.696000] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[   20.068000] eth1: link UP - 100/full - flow control off
[   20.080000] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
[   24.116000] eth1: link DOWN
[   24.136000] device eth1 entered promiscuous mode
[   24.156000] br-lan: port 1(eth1) entered forwarding state
[   24.164000] br-lan: port 1(eth1) entered forwarding state
[   24.352000] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   24.972000] br-lan: port 1(eth1) entered disabled state
[   24.996000] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
[   25.020000] jffs2_build_filesystem(): unlocking the mtd device... done.
[   25.024000] jffs2_build_filesystem(): erasing all blocks after the end marker...
[   25.120000] eth1: link UP - 100/full - flow control off
[   25.128000] br-lan: port 1(eth1) entered forwarding state
[   25.132000] br-lan: port 1(eth1) entered forwarding state
[   27.136000] br-lan: port 1(eth1) entered forwarding state
[   32.844000] random: nonblocking pool is initialized

BusyBox v1.23.2 (2015-07-24 15:49:35 CEST) built-in shell (ash)
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (15.05, r46767)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------

Fatto! Il vecchio modem adesso è un router su cui gira con il nuovo fiammante firmware OpenWRT.

Non vi resta altro che installare i drivers wifi e configurare il router per adattarlo alle vostre esigenze.

Come fare? Questa è un'altra storia. Intanto cominciate a leggere la wiki.

Update 2016.03.15:

Qui trovate l'immagine del firmware con i drivers b43 per il wireless già caricati. Ho aggiunto anche il pacchetto luci-ssl, per accedere all'interfaccia tramite protocollo https, e il pacchetto wpad-mini. Inoltre ho rimosso i pacchetti ppp e ppp-mod-pppoe.

Qui il video del flashing del firmware.

Update 2016.07.30:

NB: Il pacchetto contenente l'interfaccia di gestione grafica luci, relativo alla release 15.05.1, non è presente nei repositories.

Per aggiornare il router ad una nuova versione di OpenWRT la procedura è la seguente:

Copiate sul router l'immagine del firmware aggiornato, ad esempio openwrt-15.05.1-brcm63xx-generic-96358VW-generic-squashfs-cfe.bin,

scp openwrt-15.05.1-brcm63xx-generic-96358VW-generic-squashfs-cfe.bin root@<ip-router>:/tmp

Collegatevi tramite SSH, ed eseguite questo comando:

sysupgrade -c /tmp/openwrt-15.05.1-brcm63xx-generic-96358VW-generic-squashfs-cfe.bin

aspettate che la procedura termini e che il router si riavvi.

Qui trovate l'immagine del firmware con i drivers b43 per il wireless già caricati. Ho aggiunto e il pacchetto wpad-mini. Inoltre ho rimosso i pacchetti ppp e ppp-mod-pppoe.