Ratowanie routera

Kilkanaście dni temu stałem się właścicielem dość wiekowego modelu routera firmy Linksys WRTU-54G-TM. Urządzenie umożliwia pracę, jako most sieciowy i w tym właśnie celu miał być wykorzystywany. Ja jednak chciałem sprawdzić, do czego to urządzenie można było jeszcze zmusić. Zacząłem od zmiany softu…

I można powiedzieć, że na tym skończyła się oczekiwana kolej rzeczy. Podczas wgrywania OpenWRT do urządzenia „coś poszło nie tak”. W sumie, można było się tego spodziewać – wgrywanie nowego softu rozpocząłem w nocy z piątku na niedzielę (studenci wiedzą o co chodzi ;) ). Aktualizacja oczywiście nie powiodła się, a mój router mówił do mnie jedynie zieloną mrugającą diodą. Nie przejmując się tym jednak postanowiłem doprowadzić urządzenie do stanu używalności.

Po rozebraniu routera moją uwagę przykuły wyprowadzenia do programatora JTAG. Początkowo to z nich chciałem skorzystać. Później jednak zauważyłem piny umożliwiające wymianę danych przez łącze szeregowe. Do tego celu nie można jednak wykorzystywać zwykłego portu RS-232. Logiczna jedynka w tym standardzie definiowana jest przez napięcie -3V do -15V. „Zero” to natomiast napięcie z zakresu 3V do 15V.

Układ w WRTU-54G-TM pracuje w standardzie TTL (jak większość urządzeń tego typu). Do podłączenia do RS-232c niezbędne jest wykorzystanie układu scalonego MAX232 służącego do konwersji napięć na TTL. Dobrym pomysłem jest (ponoć) wykorzystanie kabli do telefonów Nokia (DKU-5 lub CA-42). Ja wykorzystałem układ kolegi zbudowany na podstawie schematu (sam, z lenistwa pewnie wykorzystałbym do tego kabel od Nokii):

Układ kolegi zbudowany jest miedzy innymi z… pudełka od zapałek. Zbudowany układ jest zaprezentowany na poniższych zdjęciach.

Układ jak widać banalnie prosty. Jeden scalak, 4 kondensatory i wtyk RS232, do tego kilka kabelków no i pudełko po zapałkach, jako obudowa wtyczki.

Nadszedł czas na podłączenie wszystkiego razem i skomunikowaniu się komputera z routerem. Wtyki co prawda nie były opisane, ale bez trudu udało mi się zlokalizować piny GND, TxD, RxD oraz zasilania (niewykorzystywany). Zasilanie układu MAX232 zaczerpnięte zostało z wtyczki 24 pinowej zasilacza ATX (kolor pomarańczowy to 3.3V – takiego właśnie potrzeba).

Do komunikacji potrzebujemy jeszcze programu umożliwiającego komunikacje przez port szeregowy. Użytkownicy Windows XP mogą wykorzystać HyperTerminal. Ja wykorzystywałem program putty.

Przed rozpoczęciem ratowania urządzenia warto zaopatrzyć się jeszcze w serwer tftp, wykorzystałem do tego celu program pumpkin. Do przeprowadzenia operacji jest niezbędne również posiadanie właściwego oprogramowania dla routera.

Zaczynamy część właściwą. Po podłączeniu wszystkiego uruchomiamy putty i wpisujemy niezbędne do skomunikowania dane przedstawione na kolejnym rysunku.

Po poprawnym podłączeniu i prawidłowo wpisanych danych uruchamiamy router. Dalej już z górki dla tych, którzy nie lubią grzebać w elektronice, a uwielbiają za to wszelkie terminale. Jeśli wszystko dobrze pójdzie w oknie terminala zaczną pojawiać się literki. Można poczekać i zobaczyć jaki błąd wyskakuje podczas ładowania systemu routera (u mnie był to Kernel Panic Error) lub wcisnąć dowolny przycisk gdy na ekranie pojawi się:

 Hit any key to stop autoboot:  1

W zamian za to urządzenie przywita nas nazwą mikroprocesora, w który wyposażony jest router wraz ze znakiem zachęty

 ADM8668 # 

W terminal należy wpisać następujące polecenia:

 set if_tftp 'ping $(serverip)'
set do_tftp 'run tftp_boot'
set bootcmd 'run if_tftp do_tftp; run flash_flash'
save 

Następnie wklepujemy kolejne komendy:

 ADM8668 # set netretry no
ADM8668 # run bootcmd 

i wykonujemy restart urządzenia (poleceniem reset) i odczytujemy IP z jakim chciał połączyć się nasz router (fragment wyróżniony pogrubieniem):

 TX error status2 = 0x04000008
Using adm8668_net device
ping failed; host 192.168.0.250 is not alive   <-----
## Booting image at b0040000 ...
Check vendor string...    Image Name:   ADM8668 Linux Kernel(2.4.31)
   Created:      2011-01-20   5:11:38 UTC
   Image Type:   MIPS Linux Kernel Image (uncompressed)
   Data Size:    917440 Bytes = 895.9 kB
   Load Address: 80400000
   Entry Point:  80400000
   Verifying Checksum ... OK
OK 

Odczytany adres ustawiamy jako stały adres IP naszej karty sieciowej (przewodowej oczywiście ;) ) i łączymy komputer z routerem kablem ethernetowym (koniecznie port WAN , w portach LAN niestety nie działało). Wydajemy jeszcze polecenia:

reset

I sprawdzamy czy router odnalazł nasz komputer. Jeśli się tak stanie w poprzednio zaznaczonym miejscu zauważymy:

 TFTP from server 192.168.0.250; our IP address is 192.168.0.1 

Już prawie dobrnęliśmy do końca – pozostało jedynie pobranie na router oprogramowania. W tym celu odpalamy pumpkina, a w jego folderze umieszczamy soft, który chcemy umieścić na routerze z nazwą zmienioną na vmlinuz-8668 (bez żadnego rozszerzenia!). Na koniec w terminalu wydajemy komendę:

run update_kernel

Podczas tego procesu pamięć flash zostanie wyczyszczona, chwilę później nowe oprogramowanie routera zostanie zainstalowane (pumpkin zapyta się czy zezwolić na udostępnienie obrazu systemu). Po kolejnym restarcie zobaczyć możemy nasze dzieło i sprawdzić jak uruchamia się nasz router. Nie zapomnijmy zmienić adresu karty sieciowej na poprzedni i przepięciu wtyczki sieciowej do gniazda LAN routera! Następnie zalogujmy się przez telnet lub www do routera. Skończone!

W większości (jeśli nie wszystkich routerach z serii WRT) przywracanie oprogramowania wygląda tak samo (najczęściej jednak w modelach WRT54xx dostępne jest 5 pinów łącza szeregowego – jeden nie jest podłączony do układu). Pewnie wielu z Was zastanawia się po czemu wróciłem do oprogramowania producenta, a nie skorzystałem z oprogramowania alternatywnego. Z bardzo prostego powodu – autorski soft wystarcza mi w 100%.

Jest to tylko jedna z możliwości uratowania tego routera. Zależnie od uszkodzenia nieraz niezbędne jest skorzystanie z programatora JTAG. W każdym bądź razie źle wgrany soft (czy to przez własne przeoczenie czy z przyczyn losowych) nie oznacza śmierci naszego urządzenia.

Już niedługo zamierzam dokonać „drobnej” modyfikacji urządzenia wykorzystując do tego celu układ przedstawiony na zdjęciu. Oczywiście po jego wykonaniu, instrukcję jego wykonania postaram się umieścić na blogu.

PS. Po wgraniu oprogramowania kolor diody Power może zmienić się z zielonego na czerwony. Sam się początkowo zdziwiłem co jest nie tak, jednak w jednym z nowych softów zostało to zmienione ;)
PS2. Oczywiście musiałem wgrać OpenWRT raz jeszcze... dzięki czemu otrzymałem przepis na drinka ;)



  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (bleeding edge, r24978) ------------------
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!