Die auf den eigenen Router angepasste Original-Firmware der Hersteller hat einen sehr begrenzten Funktionsumfang und ist stark auf die jeweilige Zielgruppe ausgerichtet. Mit dem vermehrten Einsatz von Linux als Router-Betriebssystem wächst jedoch die Chance, nachträglich Features einzubauen oder die Firmware durch eine freie Linux-Distribution zu ersetzen.
Für die im vorangegangenen Artikel vorgestellten Router auf Basis des Linksys WRT54G stehen mehrere Firmwares zur Auswahl: Neben den Originalen der Hersteller gibt es zum Beispiel von den Firmen Sveasoft[1] und Portless Networks[2] kostenlose Images, die auf den Originalen basieren, aber mehr Features besitzen. Sveasoft verlangt von Entwicklern, die die Quellen der Firmware bekommen wollen, eine kostenpflichtige Registrierung. Dagegen steht OpenWRT unter der GPL und ist nicht nur eine Firmware für Embedded-Linux-Router, sondern eine komplette Mini-Distribution, die Sie mit Hilfe der integrierten Paketverwaltung fast beliebig erweitern können.
Programmierfehler ausnutzen
Bei der originalen Firmware von Linksys war es den Autoren nicht möglich, OpenWRT als neue Firmware über die Update-Funktion des Webfrontends einzuspielen. Für die TFTP-Put-Methode muss der Bootloader des Routers nach dem Einschalten auf die neue Firmware warten. Das erreichen Sie, indem Sie die Variable »boot_wait« (siehe Kasten "Konfigurationsspeicher NVRAM") im NVRAM auf »on« stellen.
Das Webfrontend gestattet zwar keinen Zugriff auf die NVRAM-Variablen, Sie können jedoch einen Programmierfehler im Ping-Formular »Ping.asp« ausnutzen und darüber beliebige Linux-Befehle in den Router einschleusen. Dazu geben Sie die folgenden Zeilen nacheinander in das Feld der IP-Adresse ein und schicken das Formular für jede Zeile einzeln ab:
;cp${IFS}*/*/nvram${IFS}/tmp/n
;*/n${IFS}set${IFS}boot_wait=on
;*/n${IFS}commit
;*/n${IFS}show>tmp/ping.log
Wenn Sie die letzte Zeile abgeschickt haben, sehen Sie im Log-Bereich des Formulars die Liste aller NVRAM-Variablen, darunter auch »boot_wait=on«. Schalten Sie dann den Router aus.
Für die Erstinstallation sollten Sie auf ein fertiges Image von[4] zurückgreifen. Das 7 bis 8 MByte große Tar-Archiv enthält drei Firmware-Varianten: »openwrt-g-code.bin« ist für die Modelle WRT54G von Linksys vorgesehen, »openwrt-gs-code.bin« für die WRT54GS-Router, für die kompatiblen Geräte der anderen Hersteller benötigen Sie »openwrt-linux.trx«.
Firmware-Tausch per TFTP
Unmittelbar nachdem der Router eingeschaltet wird, startet der Bootloader, ihm gilt die Variable »boot_wait=on«. Er konfiguriert für etwaige Updates der Firmware die Netzwerkschnittstelle fest mit der IP-Adresse 192.168.1.1. Die Befehle für den Verbindungsaufbau und die Übertragung der Firmware sollten Sie im TFTP-Client bereits dann eingeben und absenden, wenn der Router noch stromlos ist:
linux:~# tftp 192.168.1.1
tftp> binary
tftp> rexmt 1
tftp> trace
Packet tracing on.
tftp> put openwrt-gs-code.bin
.........................
sent DATA <block=3003, 0 bytes>
received ACK <block=3003>
tftp>
Erst wenn Sie das Put-Kommando abgesetzt haben, schalten Sie den Router ein. Nach wenigen Sekunden beginnt die Übertragung und endet im Idealfall ohne Fehler. Meldet das Programm aber »Code pattern is incorrect«, passt die übertragene Firmware nicht zu Ihrem Router-Modell, bei »Invalid Password« war der Bootloader zu schnell und hatte schon die ursprüngliche Router-Firmware mit ihrem eigenen TFTP-Server gestartet, als die Übertragung begann.
Abbildung 1: Für das erste Login verwenden Sie Telnet, wobei OpenWRT aufgrund der ungeschützten Verbindung überhaupt kein Root-Passwort abfragt.
Während der Bootloader des Routers läuft, blinkt die Power-LED. Erst wenn die LEDs einen Reset mit anschließender Initialisierung zeigen, ist der Transfer abgeschlossen und das Gerät bootet. Das kann inklusive Firmware-Upload zwei oder drei Minuten dauern.