Aus Linux-Magazin 04/2005

Workshop: OpenWRT auf Linksys-kompatiblen Routern installieren

Wenn die mitgelieferte Firmware Ihres Linksys-Routers nicht alle Anforderungen erfüllen kann, ist die Versuchung groß, einfach eine auf die persönlichen Bedürfnisse zugeschnittene Linux-Distribution hochzuladen. Ein kleiner Programmierfehler in der Original-Firmware hilft Ihnen dabei.

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.

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.

Erste Schritte in OpenWRT

Die Snapshot-Pakete von OpenWRT enthalten nur ein rudimentäres Linux-System, das Ethernet und WLAN initialisiert und dabei die IP-Adressen und Einstellungen aus dem NVRAM des Routers liest. Nach dem Umstieg auf OpenWRT verwendet Ihr Router also die gleichen Adressen, die Sie zuvor unter der Original-Firmware zugewiesen haben. Zusätzlich aktiviert OpenWRT einen Telnet-Server und richtet für den WAN-Anschluss eine minimale Firewall ein, die den Telnet-Zugang von außen unterbindet. Die OpenWRT-Snapshots von November verwendeten statt Firewall und Telnet-Zugang einen SSH-Daemon, sollten Sie sich nach dem Einspielen von OpenWRT also nicht per Telnet einloggen können, versuchen Sie SSH.

Der Telnet-Server in OpenWRT verlangt grundsätzlich kein Passwort für die Anmeldung als Root (Abbildung 1), damit wollen die Entwickler ein Ausspähen des Passworts verhindern. Das Root-Dateisystem ist ein JFFS2, wie es zum Beispiel auf Linux-PDAs eingesetzt wird. Die Bedienung von OpenWRT unterscheidet sich kaum von einem herkömmlichen Linux-System, nur fehlen die meisten Dienste und Programme.

Abbildung 2: Zurück zum Original: Nachdem Sie die Firmware als Datei auf den Router kopiert haben, verwenden Sie den Befehl »mtd«, um die Original-Firmware im Flash abzuspeichern.

Abbildung 2: Zurück zum Original: Nachdem Sie die Firmware als Datei auf den Router kopiert haben, verwenden Sie den Befehl »mtd«, um die Original-Firmware im Flash abzuspeichern.

Einmal OpenWRT und
zurück

Wenn Ihnen OpenWRT nicht zusagt, können Sie jederzeit zur Original-Firmware zurückschalten. Dazu laden Sie zunächst die Firmware aus dem Download-Bereich des jeweiligen Herstellers, etwa von[5] oder[6], auf Ihre Festplatte und packen das Zip-Archiv aus.

Beim Asus WL-500G finden Sie eine fertige Firmware-Datei im Zip-Archiv. Schalten Sie den Router aus, dann wieder an und rufen noch während die Power-LED blinkt (also der Bootloader aktiv ist) das Skript »wl500g-recovery .sh« von[7] auf. Als Parameter übergeben Sie den Namen der Firmware-Datei. Ist alles gut gegangen, bootet der Asus-Router wenig später die Original-Firmware.

Bei Linksys-Geräten speichern Sie die Firmware-Datei unter dem Namen »linux.bin« auf Ihrer Festplatte und fügen am Datei-Anfang 32 Nullbytes ein:

dd bs=16 skip=2 if=linux.bin of=linux.trx

Anschließend kopieren Sie die Firmware-Datei »linux.trx« mit den führenden Nullbytes auf den Linksys-Router in das Verzeichnis »/tmp«. Dazu können Sie entweder »wget« und einen eigenen Webserver verwenden oder benutzen SCP, sofern Sie SSH unter OpenWRT installiert haben. Dann müssen Sie noch die neue Firmware im Router-Flash verankern und das Gerät schließlich neu starten, die Befehle dazu finden Sie in Abbildung 2.

Planen Sie für das Übertragen der Firmware-Datei ins Flash einige Minuten ein und drücken keinesfalls zwischendurch Reset. Der Router startet nach einer Weile neu und arbeitet dann wieder mit der Original-Firmware.

Paketsystem »ipkg«

Für die individuelle Erweiterung von OpenWRT ist das Paketsystem »ipkg« gedacht, dass auch beim Sharp Zaurus zum Einsatz kommt. Der Befehl »ipkg list« zeigt alle installierten und installierbaren Pakete an. Wo das Programm die Pakete bezieht, legen Sie in der Datei »/etc/ipkg.conf« fest:

src openwrt http://openwrt.org/ipkg
src marc http://wrt54g.free.fr/
  openwrt/b4/ipkg
dest root /
dest ram /tmp

Konfigurationsdateien können Sie allerdings nicht direkt bearbeiten: Zur Platzersparnis auf der JFFS2-Partition im Flash des Routers (siehe Kasten “Konfigurationsspeicher NVRAM”) blendet OpenWRT die Originaldateien mittels symbolischer Links in das Root-Dateisystem ein. Bevor Sie also die Datei »/etc/ ipkg.conf« oder eine andere bearbeiten können, müssen Sie sie zunächst auf das Root-Dateisystem umkopieren:

OpenWrt:/etc# cp ipkg.conf ipkg.conf.new
OpenWrt:/etc# rm ipkg.conf
OpenWrt:/etc# mv ipkg.conf.new ipkg.conf
OpenWrt:/etc# vi ipkg.confE

Konfigurationsspeicher
NVRAM

Die Router der WRT54G-Familie speichern ihre Konfigurationsdaten in der letzten Speicherseite des Flash, dem NVRAM. Bei Firmware-Updates wird diese Page nicht angetastet, sodass alle Einstellungen auch nach dem Austausch erhalten bleiben – etwa Root-Passwort, IP-Adressen und gerätespezifische Konfigurationsdaten.

Es handelt sich dabei stets um Variablen, denen ein Wert zugewiesen wird, zum Beispiel »boot_wait=on«. Unter OpenWRT können Sie den Inhalt des NVRAM einfach mit dem Befehl »nvram show« auslesen. Mit »nvram set Name= Wert« definieren Sie eine neue Variable oder ändern den Wert einer bestehenden, »nvram unset Name« löscht sie wieder.

Alle Änderungen finden zunächst nur im RAM statt und werden nicht ins Flash übertragen. Das geschieht erst, wenn Sie den Befehl »nvram commit« eingeben.

Der zweite Befehl entfernt den symbolischen Link auf den ROM-Bereich des OpenWRT-Snapshot, mit dem dritten benennen Sie die Kopie der ursprünglichen Datei wieder um.

Ipkg ist APT-Get von Debian sehr ähnlich, die wichtigsten Befehle sind »ipkg update« nach Änderungen an den Paketquellen, »ipkg list« zeigt die vorhandenen sowie installierbare Pakete. Mit »ipkg install Name« und »ipkg remove Name« installieren und löschen Sie die angegebenen Pakete.

VLANs verwalten

Die Linksys-Router der WRT54G-Familie sind, wie im vorangegangenen Artikel beschrieben, mit einem programmierbaren Switch ausgestattet. Der Netzwerkchip des Routers ist fest mit einem der insgesamt sechs Switch-Ports verlötet, OpenWRT kann aber die übrigen Ports per »admcfg« als VLAN verwalten.

Beim Aufruf ohne Parameter zeigt »admcfg« die aktuellen Einstellungen aller sechs Ports an. Port 0 bezeichnet den WAN-Anschluss des Routers, die Ports 1 bis 4 stehen für die Netzwerkanschlüsse 1 bis 4. Den fünften und letzten Port benutzt der Router für die interne Verbindung der Netzwerkschnittstelle »eth0« zum Switch-Chip.

Der erste der folgenden Befehle schaltet den Port 1 des Switch auf das VLAN und kennzeichnet alle Datenpakete, die über diesen Anschluss hereinkommen, mit dem VLAN-Tag 4. Mit dem zweiten Befehl leitet der Kernel alle Pakete mit dem VLAN-Tag 4, die über »eth0« eintreffen, an das virtuelle Netzwerkinterface »vlan4« weiter:

admcfg port1 PVID:4 vlan4
vconfig add eth0 4

Das virtuelle Interface »vlan4« reagiert wie ein herkömmliches Netzwerkdevice. Unmittelbar nach Einrichten des VLAN trägt »vlan4« als erster Netzwerkanschluss am Switch die MAC-Adresse des Master-Interface »eth0«. Das können Sie per »ifconfig vlan4 hw ether MAC-Adresse« anpassen.

Virtuelle Ethernet-Devices erlauben prinzipiell eine Priorisierung des Datenverkehrs unterhalb der IP-Ebene, den Autoren gelang es jedoch nicht, dies per »admcfg« einzustellen. Hier hilft das Paket »iproute2« weiter, dass Sie bei Bedarf einfach per »ipkg« nachinstallieren können – genauso wie alle anderen Programme und Dienste, die zu Ihrer ganz persönlichen Router-Firmware dann noch fehlen. (mdö)

Crash-Recovery für
Linksys-Router

Eine falsche Firewall-Regel, eine falsch gesetzte NVRAM-Variable oder ein missglücktes Firmware-Update – und Sie können sich unter Umständen nicht mehr auf Ihrem Router einloggen oder das Gerät bootet nicht. Sie sollten bei Änderungen an den Interna des Routers, dazu zählen auch die Startskripte von OpenWRT, stets sehr vorsichtig sein, um sich nicht versehentlich auszusperren.

Doch selbst wenn alle Ports dicht sind und Sie »boot_wait« abgeschaltet haben, gibt es noch Hoffnung. Sind alle herkömmlichen Wiederbelebungsversuche – etwa den Reset-Knopf 10 Sekunden lang drücken oder TFTP-Put – ausgeschöpft, geht es dem Flash-Baustein des Routers an den Kragen.

Zunächst müssen Sie den Flash-Chip lokalisieren, er befindet sich auf der Seite mit dem Netzstecker etwa in der Mitte der Platine und ist an der Beschriftung »Intel Flash« leicht zu erkennen. Bei den Linksys-Modellen WRT54G müssen Sie die Pins 15 und 16 des Flashspeichers kurzschließen, beim WRT54GS sind es die Pins 5 und 6. Ein Punkt auf dem Chipgehäuse markiert Pin 1 des Flash.

Ein Kurzschluss zur Wiederbelebung

Am besten geht das Kurzschließen mit einem dünnen Metalldraht (keine Litze), den Sie zwischen die benachbarten Anschlussbeine stecken und mit etwas Klebeband nach außen hin isolieren. Dann lässt sich der Metalldraht später auch besser greifen, wenn Sie ihn im Betrieb herausziehen müssen.

Die Idee hinter der Aktion: Durch das Kurzschließen zweier Adressleitungen kann das Flash nicht mehr komplett ausgelesen werden. Der Bootloader prüft jedoch die Firmware vor dem Start. Wegen des Kurzschlusses kann die Prüfsumme keinesfalls stimmen, daher verharrt der Bootloader im TFTP-Modus.

Wichtig ist, zwei Adressleitungen zu erwischen, die nur zum Laden der Firmware, nicht aber zum Starten des Bootloaders gedacht sind. Sonst funktioniert schon der Bootloader nicht – und auch der Router so lange nicht, bis Sie den Kurzschluss entfernen.

Wartet der Bootloader auf die Firmware – zu erkennen an der blinkenden Power-LED oder Antworten auf Pings – entfernen Sie die Drahtbrücke während des Betriebs und starten den TFTP-Upload. Nach Abschluss des Datentransfers bootet und arbeitet der Router dann (hoffentlich) wie gewohnt.

Infos

[1] Alternativ-Firmware von Sveasoft: [http://www.sveasoft.com]

[2] Erweiterte Firmware von Portless Networks: [http://www.portless.net]

[3] OpenWRT-Projektseite: [http://openwrt.org]

[4] Firmware-Snapshots von OpenWRT: [http://openwrt.org/downloads/snapshots/]

[5] Firmware-Upgrades für die WRT54G-Familie von Linksys: [http://www.linksys.com/download/firmware.asp]

[6] Firmware-Upgrades für Asus WL-500G: [http://www.asus.com.tw/support/ download/item.aspx?ModelName=WL-500g]

[7] Asus-Recovery-Skript: [ftp://ftp.linux-magazin.de/pub/listings/magazin/2005/04/Openwrt/wl500g-recovery.sh]

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben