Router unbricken

Bei manchen Routern gibt es auch die Möglichkeit eine neue Firmware aufzuspielen wenn der Router nicht mehr bootet (falsches Image aufgespielt, etc.). 
== Was wird benötigt? ==
* Laptop/PC mit Ethernetport und Kabel
* tftp Server
* Wireshark
* Passende Firmware (am besten die Original TP-Link Firmware)
* Grundkenntnisse in Sachen Netzwerk
== Bei welchen Routern klappt es ==
* wr841n(d) v8 und v9 
* wr842n(d) v2
* weitere müssen getestet werden
== Bei welchen Routern klappt es nicht ==
* wr841n(d) v7
== vorgehen ==
* Router ist stromlos
* Auf den Laptop/PC Wireshark starten und auf der Netzwerkschnittstelle mitsniffen
* Laptop/PC mit Ethernetkabel mit einer gelben Buchse des Routers verbinden
* Resettaste am Router drücken und gedrückt halten, Router anschalten und nach ca. 10 Sekunden Resettaste los lassen.
* Wireshark beobachten, nach einiger Zeit kommen Pakete in der Art "Who has 192.168.1.66? Tell 192.168.1.86" (die IPs können abweichen ich hatte auch schon 192.168.0.XX). Falls man dies sieht, dürfte das flashen auf jeden Fall klappen.
* Am Laptop/PC nun die gewünschte IP einstellen (im oberen Beispiel 192.168.1.66) Subnetmask 255.255.255.0, Gateway und DNS kann leer gelassen werden
* tftp Server starten und weiterhin Wireshark beobachten es wird versucht zu verbinden und der Router sucht nun nach der neuen Firmware am tftp, auch hier zeigt Wireshark an wie die Datei genau heißen muss z.b. "wr842ndv1_tp_recovery.bin".
* Die Firmwaredatei genau so benennen und ins Homeroot des tftp Servers legen.
* Anschließend holt sich der Router die Datei schreibt sie in den Flash und startet dann hoffentlich erfolgreich durch.
Falls irgendwelche Schritte nicht mehr klappen, hat es sich auch bewährt den Router nochmals mit gedrückter Resettaste (so wie oben beschrieben) neu zu starten, gerade nach ändern der IP am Laptop/PC kommt es immer wieder zu Probleme.
Falls es nicht klappt, kann auch der WAN Port oder die anderen Ethernetports probiert werden.
== Besonderheiten ==
Manche Router brauchen expliziet ne bestimme Filesize damit sie die Firmware bei einem tftp akzeptieren. 
=== Betroffene Router ===
* wdr3600 v1.5
=== Lösung ===
das Original Image des Herstellers verwenden und die ersten bytes wegstrippen (findet man meist im OpenWRT Wiki wieviel), bsp. für den wdr3600:
dd if=orig.bin of=tplink.bin skip=257 bs=512
= andere Devices =
Wenn der Router sich nach dem Update nicht mehr meldet bzw. etwas schief gegangen ist (weil z.B. die Stromzufuhr unterbrochen wurde), kann eventuell diese Anleitung helfen, das Gerät wieder funktionsfähig zu bekommen. Es wird dabei dir Firmware über die serielle Schnittstelle neu geflasht. Dieses Vorgehen nennt man auch unbrick, da aus dem "Backstein" wieder ein funktionierender Router wird.
=== TP-Link WR841 ===
Hier findet man eine exemplarische Anleitung für die Hardwareversion 10: https://www.youtube.com/watch?v=GuzA0x5TMlo
Verwendet anstatt der Original TPL-Link Firmware die Freifunk factory Firmware.
Für andere Hardwareversionen muss die Firmwaredatei entsprechend umbenannt werden.
=== TP-Link 1043 ===
Ihr benötigt hierfür:
* einen Rechner mit einem seriellen Anschluss (RS232) oder 
* ein USB-to-Serial-Adapterkabel, wie es diese zum Beispiel für Handys gibt
Weiterhin braucht ihr einen Lötkolben und etwas Erfahrung im Umgang mit diesem. Um die Verbindung herzustellen ist außerdem ein Programm wie PuTTY, Hyperterminal oder cutecom (Linux) notwendig. Zusätzlich muss auf dem Rechner ein TFTP-Server installiert werden und die zu flashende Firmware muss sich im Rootverzeichnis des Servers befinden. Anschließend geht ihr am besten nach folgender Anleitung vor.
Eine schrittweise Anleitungen zum Wiederbeleben eines defekten Routers, der nicht mehr durchstartet, gibt es auch hier:
https://wiki.freifunk-franken.de/w/Unbricken_eines_TP-Link_1043ND
=== TP-Link CPE210 ===
Beim CPE210 habe ich erfolgreich wiederholt einen gebrickten Router mittels TFTP wiederbelebt. Hierfür ladet ihr euch bei TP-Link die original Firmware eures CPE herunter. Dabei auf die Version achten. Die entpackte *.bin Datei benennt ihr in recovery.bin um und verschiebt sie in das Arbeitsverzeichnis eures TFTP-Servers. Euren PC verbindet ihr mit einem Switch mit dem CPE und gebt dem PC die IP Adresse 192.168.0.100/24. Den CPE ausschalten, die Resettaste drücken und mit Spannung versorgen. Die Resettaste loslassen sobal Power-LED und LAN-LED leuchten. Kurze Zeit später sollte sich der CPE das Image ziehen und kurz danach ist er wieder im Auslieferungszustand und unter 192.168.0.254 erreichbar. 
=== Ubiquiti ===
Bei einem gebrickten Ubiquiti-Router war tftp von der Kommandozeile per ethernet erfolgreich. Man benötigt dazu natürlich das factory binary.
Unter Windows:
Ethernet-Schnittstelle auf 192.168.1.1 setzen, mit dem Ubiquiti verbinden, im stromlosen Zustand den Resetknopf drücken und halten, Gerät bestromen, ca. 20-30 Sekunden die Taste gedrückt halten, bis die LEDs alle wild und bunt blinken, die obersten beiden im Wechsel.
Jetzt unter Windows von der Kommandozeile aus dem Ordner, in dem auch das factory binary liegt:
tftp -i 192.168.1.20 put openwrt-ar71xx-generic-ubnt-nano-m-squashfs-factory.bin
Während der Übertragung flackert die zweite LED von unten, dann beginnt bissl wilde Lichtorgel in wechselnden Mustern, irgendwann macht der Router 'n reboot und ist wieder im normalen Freifunk-Betrieb aktiv. 
Die Linuxianer wissen sicher eh, wie das geht bzw. unter Linux umzusetzen ist.
Jedenfalls benötigt man so keinerlei tftp-Server, keinerlei RS232-Kabel, muß auch nicht erst mit wireshark irgendwelche Adressen rauskriegen, daher ist das wohl einen Versuch wert, vor man tiefer einsteigt :)
Für UART hier paar hilfreiche Tipps:
https://community.ubnt.com/t5/airOS-SDK-Custom-Development/AirMAX-Device-Firmware-Recovery-Procedure/m-p/1499583#M2499
Man benötigt keinen Lötkolben, die UART Pins sind bereits aufgelötet. Jumperkabel passen nicht richtig wenn man sie aber fest andrückt funktionieren sie auch wenn sie nicht richtig von selbst halten/fest sitzen
Eventuell kann auch das Tool ap51-flash verwendet werden: https://github.com/ap51-flash/ap51-flash
= Beispiel =
Hier das Unbricken eines TL-WR1043ND V1 Schritt für Schritt.
== Vorbereitung des Routers ==
=== Gehäuse öffnen ===
Das Öffnen ist nicht schwer, wenn man weiß, wie es geht ;-)
Es gibt nur zwei Schrauben. Diese befinden sich unter den hinteren beiden Gummifüßchen. Sie haben einen Phillips-0-Kopf, ein entsprechender Schraubenzieher wird benötigt:
Als nächstes löst man die Muttern, mit denen die Antennenanschlüsse befestigt sind und drückt sie vorsichtig ins Innere des Routers. Hierzu benötigt man einen 8-mm-Gabel- oder Ringschlüssel:
Dann wird der untere Gehäuseteil vorsichtig aufgehebelt. Das geht am besten mit einem Schlitzschraubenzieher, den man an den Aussparungen zur Wandmontage ansetzt:
Die untere Schale wird dann vorsichtig angehoben …
… und das schwarze Hinterteil herausgezogen:
Dann löst man – wiederum vorsichtig – die beiden Clips an der Innseite der Vorderseite, vorzugsweise, ohne sie abzubrechen ;-) …
… und entfernt schließlich die obere Schale:
Nachdem dann der Vorderteil abgezogen ist …
… kann man die Platine entnehmen.
===Pins für die serielle Konsole auflöten===
Die Anschlüsse (UART) für die serielle Konsole befinden sich, von hinten betrachtet, unten rechts:
Netterweise sind die Löcher mit Lötzinn gefüllt, so dass man sie erstmal freimachen muss. Dafür braucht man mindestens eine Entlötsaugpumpe, besser eine Entlötstation.
Dann lötet man die Pins auf die Platine. Sinnvollerweise benutzt man eine 3er-Stiftleiste. Hier meine hervorragende Lötarbeit von unten …
… und von oben. Das linke Loch bleibt frei, dann folgen Gnd, Rx und Tx:
==Verbindung zum Router vorbereiten==
Man benötigt für die Verbindung zum Router einen UART-Adapter. Ich habe einen „PL2303HX USB to TTL to UART Converter“ benutzt. Für die, die eine haben: Eine „normale“ RS232-Schnittstelle (mit einem 9-poligen D-Sub-Stecker) kann nicht benutzt werden, da die Spannungen nicht passen – auch, wenn es hier ebenfalls Gnd, Rx, Tx und Baud-Raten gibt!
Kommt der genannte Adapter zum Einsatz, muss er folgendermaßen angeschlossen werden: Schwarz (= Gnd) an Gnd, Grün(lich) (= Tx out) an Rx und Weiß (= Rx in) an Tx. Das rote Kabel, an dem die 5 V des USB-Anschlusses anliegen, wird nicht angeschlossen:
Zusätzlich zu der seriellen Verbindung benötigt man noch eine Verbindung per Netzwerkkabel. Das Ganze sieht dann in etwa so aus:
thumb|none
==Firmware flashen==
===TFTP-Server vorbereiten===
Zunächst benötigt man die Firmware, die man flashen will. Diese muss von einem TFTP-Server bereitgestellt werden.
Sinnvollerweise gibt man der Datei einen griffigen Namen wie etwa „firmware.bin“.
Auf dem Rechner (der als Server fungiert) setzt man eine IP-Adresse aus dem 192.168.0.0/24-Raum, in meinem Fall 192.168.0.5.
====Linux====
Unter Linux wurde tftp-hpa benutzt.
====Windows====
Unter Windows empfiehlt sich Tftpd32. Das ganze kann man sich hier von der Anbieterseite kostenlos herunterladen und installieren. 
Wenn man das Programm gestartet hat muss man unter den Buttom "Browse" auf den Ordner verweisen in dem die *.bin-Datei liegt (es empfiehlt sich einen separaten Ordner dafür zu erstellen). Über den Buttom "Show Dir" kann man dann prüfen ob die Datei richtig erkannt wird.
Im Anschluss muss man im Dropdown Menü "Server Interfaces" die Netzwerkkarte/IP auswählen, über den man den Server zur Verfügung stellt.
===Serielle Konsole starten===
Zum Anzeigen der seriellen Konsole gibt es verschiedene Möglichkeiten. Die einfachste ist, screen zu verwenden (weil screen ist vermutlich eh da – und ja, screen kann tatsächlich auch serielle Konsolen anzeigen :-) – in diesem Fall (und für den Fall, dass der USB-UART-Adapter unter /dev/ttyUSB0 zu finden ist) führt man einfach
:screen /dev/ttyUSB0 115200
aus. Unter Windows wird man PuTTY verwenden wollen.
Dann steckt man das Netzteil des Routers an, und kann die Bootmeldungen bewundern. Im Falle meines reparierten Boot-Loops sieht das dann in etwa so aus:
===Firmware per serieller Konsole einspielen===
Beim Booten kommt irgendwann die Meldung „Autobooting in 1 seconds“. In diesem Moment hat man die besagte Sekunde Zeit, „tpl“ und Enter einzugeben, um den Bootvorgang zu unterbrechen. Man bekommt dann folgendes Prompt:
:ar7100>
Zuerst stellt man die lokale IP-Adresse und die des Servers ein (natürlich ohne das „ar7100>“, das steht hier nur zur Verdeutlichung, dass die Befehle auf der seriellen Konsole eingegeben werden):
:ar7100> setenv ipaddr 192.168.0.3ar7100> setenv serverip 192.168.0.5
Dann löscht man den Speicher …
:ar7100> erase 0xbf020000 +7c0000
… holt das Firmware-Image …
:ar7100> tftpboot 0x81000000 firmware.bin
… schreibt es in den Speicher …
:ar7100> cp.b 0x81000000 0xbf020000 0x7c0000
… und bootet den Router neu:
:ar7100> bootm 0xbf020000
Den Erfolg des Flashens kann man dann gleich per serieller Konsole verfolgen.
Viel Spaß beim Reparieren!
Kategorie:Technik
== Einzelnachweis ==
* https://forum.openwrt.org/viewtopic.php?id=38953
* https://wiki.openwrt.org/de/toh/tp-link/tl-wdr3600#tftp_auto_recovery_in_revision_15
* https://www.mail-archive.com/openwrt-devel@lists.openwrt.org/msg32888.html
Kategorie:Unbricken