Spring naar hoofdtekst

Van router naar baksteen en terug

Geplaatst op door ,
Laatste aanpassing op .

Inleiding

Al geruime tijd rolt de internetprovider KPN IPv6 uit bij haar klanten. Exacte cijfers over wanneer en hoeveel gebruikers al 'over' zijn van IPv4 naar de nieuwe variant, zijn niet bekend. Maar afgelopen week was het dan toch eindelijk de beurt aan onze internetaansluiting. Het modem kreeg nieuwe firmware en daarbij ook een nieuw IPv4-adres. Laten we nou net die week op vakantie zijn en buitenshuis verblijven…

Tijdens die vakantie ontving ik ook een nieuwsbrief van OpenWrt, het open-source besturingssysteem voor onder andere routers. Vol trots werd daarin de nieuwste release, versie 21.02, aangekondigd. Ik besloot die zo snel mogelijk te installeren als ik weer thuis was!

Samenloop van omstandigheden

Ik koos er voor om de twee ontwikkelingen te combineren en de router, vanwege de nieuwe IPv6 adressen, volledig opnieuw te installeren. Zo wist ik zeker dat eventuele oude (IPv6-)instellingen niet dwars zouden liggen bij het out-of-the-box werken van een standaard OpenWrt-router.

Van eerdere updates was ik gewend dat ik het bij OpenWrt gedownloade bestand zonder kleerscheuren kon uploaden in de grafische LuCI webinterface. Dit keer kreeg ik, vlak voor het flashen, een waarschuwing te zien: dit bestand was niet geschikt voor deze router. "Dat kan niet, de naam klopt precies!" dacht ik – en flashte vrolijk verder. Even later was de router niet meer te bereiken; ook niet na een volledige reset. De router was dood; zoveel waard als een baksteen, oftewel een brick.

Onderzoek (1)

Uit eerdere experimenten met oude routers wist ik, dat de meeste exemplaren minimaal één mogelijkheid van reanimatie bieden. Meestal in de vorm van een seriële console die van buiten te bereiken is als je het apparaat openschroeft. Gelukkig stond in de documentatie van mijn Zyxel router een foto van zo'n provisorische verbinding: TX, RX en GND. Bij het aansluiten van zo'n seriële console moet je wel opletten dat de zender van de ene kant (TX) aangesloten wordt op de ontvanger (RX) van de andere kant; en vice versa. GND is de gemeenschappelijke massa.

Nadat ik de USB-naar-serieel converter met CP2102 chipset had aangesloten, wilde ik met het commando screen /dev/ttyUSB0 115200 de nieuwe seriële poort openen, maar dat lukte niet. Wat blijkt? Onder Fedora moet de gebruiker deel uitmaken van de groep dialout om modems (en dus ook andere seriële verbindingen) te kunnen gebruiken:

# Add fwiep to the dialout group, to use serial over USB
sudo usermod -aG dialout fwiep

Bij de zoveelste poging volgde ik opnieuw de instructies en zag helemaal niets op mijn scherm. De router leek nog steeds zo dood als een pier.

Eureka (1)

Uit zowel frustratie als nieuwsgierigheid besloot ik om de TX en RX eens om te draaien. Elektrisch kon er niets kapot gaan en misschien zou er zo wel iets op het scherm verschijnen tijdens het opstarten van de router. Eureka! Ik zag de volgende informatie, maar bij het lezen van de laatste regels zakte de moed opnieuw in mijn schoenen…

U-Boot 2009.11 (Sep 26 2014 - 18:07:51)

NBG6716 - Scorpion 1.0
DRAM:  32bit ddr2 256 MB
Flash: 16 MB
*** Warning *** : PCIe WLAN Module not found !!!
Net:   eth0, eth1
NAND:  Hynix NAND 128MiB 3,3V 8-bit [128MB]

ZyXEL zloader v1.31 (Sep 26 2014 - 18:33:33)
Multiboot clinent version: 1.2
could not establish link on eth0
eth_init failed!
### JFFS2 loading '/boot/vmlinux.lzma.uImage' to 0x80400000
Scanning JFFS2 FS: '/boot/vmlinux.lzma.uImage' found, Scanning whole partition done
Loading file: done
### JFFS2 load complete: 3520087 bytes loaded to 0x80400000
## Booting kernel from Legacy Image at 80400000 ...
   Image Name:   MIPS OpenWrt Linux-5.4.143
   Created:      2021-08-31  22:20:08 UTC
   Image Type:   MIPS Linux Kernel Image (uncompressed)
   Data Size:    6736290 Bytes =  6.4 MB
   Load Address: 80060000
   Entry Point:  80060000
   Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!

!!! Fail to booting kernel !!!
Reset your board! system halt...

Onderzoek (2)

Er moest toch een mogelijkheid zijn om de router opnieuw tot leven te wekken? Jawel, de documentatie vermeldt het gebruik van een zogenaamde TFTP-server die firmware aanbiedt, en dat de router die tijdens het opstarten kan inladen en zelfstandig flashen. Maar hoe moest dat dan in zijn werk gaan?

TFTP

De afkorting TFTP staat voor trivial file transfer protocol: een heel eenvoudig protocol om bestanden over te dragen. Een server biedt bestanden aan, een client downloadt die bestanden, klaar. Mijn Zyxel router was zo ingesteld dat hij, als je bij het opstarten de WPS-knop ingedrukt houdt, zelfstandig met zijn TFTP-client op zoek gaat naar het bestand ras.bin op de server 192.168.1.33.

Op dit moment (najaar 2021) is de originele firmware bij Zyxel niet (meer) beschikbaar. Gelukkig kon ik haar wel nog uit mijn eigen archieven vissen en stel ze nu als download ter beschikking op mijn zelfgebouwde downloadportaal.

# Install the TFTP-server
$ sudo dnf install -y tftp-server
$ sudo systemctl start tftp.service

Met bovenstaand commando wordt de TFTP-server geïnstalleerd en gestart. Alle bestanden in /var/lib/tftpboot worden geserveerd aan TFTP-clients die via het netwerk aankloppen.

Aldus probeerde ik opnieuw de router zijn firmware te laten downloaden en hield de TFTP-server in het oog met journalctl -b --follow; als er een overdracht plaatsvond, zou ik het hier zeker zien! Nee dus…

Eureka (2)

Na een nachtje slapen besloot ik dan toch maar hulp te vragen op het forum van OpenWrt. Wat blijkt? Er was al iemand die dezelfde vraag stelde en antwoord kreeg. Hij gaf aan dat het gebruik van de TFTP-server de oplossing was om de router terug leven in te blazen. Maar dat wilde toch bij mij niet lukken?

Toen scrolde ik door de discussie onder zijn vraag en zag de hint naar mijn uiteindelijke oplossing: de firewall van de server blokkeerde de TFTP-verbinding! De volgende drie commando's maakten daar vakkundig een einde aan:

sudo firewall-cmd --add-service=tftp
sudo firewall-cmd --reload
sudo systemctl start tftp.service

Na opnieuw starten van de TFTP-server en de router (met ingedrukte WPS-knop) kon ik in de nog steeds aangesloten seriële console het flashen volgen. Na nog één keer opnieuw opstarten begroette me het Zyxel loginscherm van de originele firmware op http://192.168.1.1. Eindelijk!

Finale

Tot slot flashte ik de nieuwe firmware van OpenWrt door het bestand te hernoemen naar ras.bin en in de map van de TFTP-server te plaatsen. Ook dit werd zonder morren gedownload via het netwerk en in het geheugen van de router weggeschreven. De router is dood, leve de router!

Terug naar boven

Inhoudsopgave

Delen

Met onderstaande koppelingen kunt u deze pagina delen via sociale media of e-mail.

Atom-feed van FWiePs weblog

Artikelen


Categorieën

Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.


Terug naar boven