TP-Link WR1043ND v2 unbricken und OpenWRT flashen

Vor einigen Tagen habe ich DD-WRT 24 SP3 auf meinem TP-Link WR1043ND v2.1 Router installiert. Leider lief die Firmware nicht so stabil wie zuerst gedacht und ein Betrieb als WLAN Accesspoint war nicht möglich. Relativ schnell war klar, dass OpenWRT das Gerät befeuern sollte. Ich habe ein “Werksreset” nach dieser Anleitung versucht, jedoch den Fehler begangen, das Upgrade über eine WLAN-Verbindung zum Router durchzuführen. Während des Upgrades brach die WLAN Verbindung ab und die Softwareinstallation war nicht vollständig. In Folge dessen war der Router gebricked - d.h. es war keine Verbindung mehr über die üblichen Schnittstellen (LAN, WAN, WLAN) möglich und ein Reset über den Hardwaretaster blieb wirkungslos.

Es gibt zum Glück noch eine andere Möglichkeit, um mit dem Router zu kommunizieren: Die auf der Platine befindliche UART Schnittstelle kann genutzt werden, um über eine Konsole mit dem Gerät Kontakt aufzunehmen und Befehle zu geben. Auf diese Weise - und mit einem TFTP Server - ist es möglich, den gebrickten Router wieder zu beleben.

Benötigt werden ein 3,3V-UART USB Wandler, ein Kreuzschlitz-Schraubendreher, etwas Geschick, Nerven und Geduld ;)

UART Schnittstelle vorbereiten

Auf der Gehäuseunterseite befinden sich vier Schrauben, die mit einem handelsüblichen Kreuzschlitzschraubendreher herausgedreht werden können. Des weiteren befinden sich im den Gehäuserand herum einige Widerhaken, mit denen die beiden Gehäusehälften zusammengehalten werden. Um das Gehäuse vollständig zu öffnen, ist etwas Gewalt nötig.

Auf der linken Seite der Platine (die schwarze Moosgummileiste mit den eingebetteten LEDs liegt unten) befindet sich ein Streifen von vier Lötstellen. Dabei handelt es sich um die UART Schnittstelle, zu der vom PC aus eine Verbindung hergestellt wird. Für die Kommunikation über UART sind nur drei Pins nötig: GND, RX und TX. GND stellt üblicherweise die Masse dar, RX ist der Empfängerport und TX der Senderport. Die oberste Lötstelle kann mit VCC, also Versorgungsspannung beschriftet werden - sie wird nicht benötigt.

UART Pins auf dem Mainboard

Die Pins befinden sich in folgender Reihenfolge auf der Platine (vom Kondensator aus abwärts): VCC, GND, RX, TX.

Für einen einfachen (und wiederverwendbaren) Kontakt zum UART Adapter habe ich vier Pins auf die Platine aufgelötet. Sollte ich die Schnittstelle noch einmal benötigen, benötige ich keinen Lötkolben mehr, sondern bin ich der Lage, eine Steckverbindung herzustellen.

Zum Auflöten der Pins kann die Platine als ganzes aus dem Gehäuse gehoben werden. Die Drähte zu den Antennenanschlüssen müssen dazu aus ihren Halterungen entfernt werden.

TFTP Server einrichten

Die OpenWRT Firmware wird vom Router aus über eine TFTP Verbindung von einem PC via LAN heruntergeladen. Der Router hat dabei die Rolle des TFTP Clients - wenn dem Router eine Datei angeboten werden soll, muss auf dem PC deshalb ein TFTP Server eingerichtet werden.

Wie ihr einen TFTP Server einrichtet, könnt ihr an verschiedenen Stellen im Netz nachlesen. Arch Linux user sollten sich die Seiten im Wiki anschauen: https://wiki.archlinux.org/index.php/tftpd_server

Wichtig bei der Einrichtung: Legt ein extra Verzeichnis z.B. in eurem Home-Verzeichnis an (bei mir: “code.bin”) und macht es für den TFTP-Server zum Standard-Serververzeichnis. In dieses Verzeichnis wird später die Firmware-Datei (.bin) abgelegt. In der Beispielkonfiguration im Arch Wiki wird als Serververzeichnis /srv/tftp/ festgelegt - ändert das gegebenenfalls.

Noch ein Tipp für Arch User: Bevor der tftpd.service gestartet werden kann, muss der Dienst tftpd.socket laufen.

OpenWRT downloaden

Downloadet die aktuelle OpenWRT Firmware (Codename “Barrier Breaker”) für euren WR1043nd v2 (Download hier).

Die Firmware-Datei (bei mir: “openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-factory.bin”) wird in das TFTP Serververzeichnis auf eurem PC verschoben. Von dort lädt der TFTP-Client (Router) die Firmware herunter.

LAN vorbereiten

Damit der Router weiß, zu welchem PC mit welcher IP-Adresse er eine TFTP Verbindung aufbauen soll, gibt es eine Festlegung: Der Rechner mit dem TFTP-Server muss die IP-Adresse 192.168.1.100 haben. Verbindet die Netzwerkschnittstelle eures PCs über ein LAN Kabel mit dem LAN-Switch des Routers und legt für euren Rechner die statische IP 192.168.1.100 fest (Netzmaske: 255.255.255.0 | Gateway: 0.0.0.0).

PC mit UART Schnittstelle verbinden

Für die Verbindung zum Mainboard des Routers habe ich diesen UART Wandler genutzt. Stellt sicher, dass ggf. erforderliche Treiber auf eurem PC installiert sind.

Die Kommunikation findet über eine Kommandozeile statt. Ich empfehle Putty (für Linux, MacOS und Windows) als Client für die serielle Schnittstelle. Der UART Wandler wird via USB mit dem PC verbunden und Putty gestartet. Dort wird die korrekte serielle Schnittstelle (bei mir /dev/ttyUSB=) und als “Connection type” “Serial” gewählt sowie eine Baud-Rate von 115200 (“Speed”). In den Einstellungen Links wird unter “Connection => Serial” “Flow Control” auf “None” gesetzt.

Nun wird der UART Wandler mit dem Router-Mainboard verbinden. Dabei ist unbedingt zu beachten, dass die Stecker für RX und TX vertauscht angeschlossen werden. Der TX-Anschluss des Wandlers wird mit dem RX-Port des Routers verbunden und umgekehrt. GND wird mit GND verbunden und VCC wird nicht benötigt.

Nun wird der Router eingeschaltet und die serielle Verbindung mit dem “Open” Button in Putty gestartet. In der Konsole sollten jetzt Informationen zum Bootvorgang erscheinen.

Sobald die Zeile

Autobooting in 1 seconds

erschienen ist, bleibt weniger als eine Sekunde Zeit, um

tpl

in die Kommandozeile zu tippen und den Befehl mit ENTER abzuschicken. Wenn ihr eine Kommandozeile mit dem Präfix

ap135>

(oder ähnlich) vor euch habt, kann es weitergehen.

OpenWRT Firmware flashen

Gleich ist es geschafft - jetzt muss die Firmware nur noch über LAN vom PC heruntergeladen und geflashed werden. Gebt die folgenden Befehle in eure Router-Kommandozeile ein:

tftp 0x80060000 openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-factory.bin
erase 0x9f020000 +0x7c0000
cp.b 0x80060000 0x9f020000 0x7c0000
boot.m 0x9f020000

Nach dem letzten Kommando startet der Router neu und lädt die OpenWRT Firmware. Im Terminal könnt ihr den Bootvorgang nachverfolgen. Sobald sich dort nichts mehr bewegt, drückt ENTER, um die root-Kommandozeile von OpenWRT zu erreichen.

OpenWRT ist jetzt fertig installiert.

Setzt die Netzwerkeinstellungen eures PCs wieder so, dass er die IP-Adresse vom Router via DHCP zugeteilt bekommt. Startet den Router über die Konsole neu:

reboot

Über die IP-Adresse 192.168.1.1 erreicht ihr nun die LuCI Weboberfläche zur Konfiguration, wo ihr umgehend ein Passwort für die Routerkonfiguration festlegen solltet. Der erste Login funktioniert übrigens noch ohne Passwort. ;)


Quellen: