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!