Tryb ratunkowy (failsafe) w OpenWRT

Spis treści

Obrazy OpenWRT mają wbudowany tryb failsafe obchodzący całą konfigurację, która została zapisana na partycji JFFS2. To jest ta części pamięci flash routera, w której możemy dokonywać własnych zmian w konfiguracji tego firmware. Jak to zwykle bywa, czasem coś uszkodzimy przez przypadek i masz router nie chce zbytnio działać tak jak byśmy od niego oczekiwali. Tryb failsafe nie jest tym samym co firstboot, który resetuje ustawienia do fabrycznych. W przypadku failsafe , wszelkie zmiany jakich dokonaliśmy w procesie konfiguracji zostają i nic nie tracimy. Jedynie co, to nie jest montowana partycja, na której ten zmiany figurują. Dodatkowo, ilość odpalonych usług jest ograniczona do minimum. Nie mamy, np. dostępu do internetu, nie działa WiFi, resolver DNS i nie mamy możliwości uzyskania adresu za pomocą protokołu DHCP. W tym wpisie przyjrzymy się nieco bliżej temu mechanizmowi.

Zanim wejdziemy w tryb failsafe

We wstępie wspomniałem o usługach, które w trybie failsafe nie będą uruchamiane. Mamy tam wyszczególniony serwer DHCP, który przydziela konfigurację hostom w sieci. Bez niego nie uzyskamy adresu IP, co uniemożliwi nam połączenie. Podobnie sprawa ma się w przypadku połączenia bezprzewodowego. Jeśli jesteśmy zmuszeni do korzystania z trybu failsafe , to róbmy to przewodowo i przydzielmy danej maszynie statyczny adres IP, tak by połączenie z routerem w trybie ratunkowym zostało nawiązane bez problemów. Router po wystartowaniu w tym trybie jest dostępny pod adresem 192.168.1.1/24 i możemy się do niego zalogować za pomocą protokołu telnet, tak jak to zwykle robimy po wgraniu nowszej wersji firmware.

Aktywacja trybu failsafe

Jeśli problem jest czysto programowy i dotyczy błędu w plikach konfiguracyjnych lub powstał on za sprawą niezbyt dopracowanych usług to wystarczy zamontować partycję, na której wprowadzane są zmiany. To jest cała istota OpenWRT, czyli nie wprowadzamy zmian bezpośrednio w firmware, a jedynie są one aplikowane na bazową konfigurację. W przypadku problemów, można tą nakładkę ściągnąć i wyeliminować błędy, które za jej sprawą się pojawiły.

Po ustawieniu statycznej konfiguracji na komputerze, resetujemy (lub wyłączamy/włączamy) router i przyciskamy dość energicznie jeden z jego działających przycisków, inny niż przycisk zasilania. Dokładny moment, w którym należałoby wcisnąć przycisk można ustalić podsłuchując pakiety w sieci. W odpowiednim momencie, router wysyła pakiet na adres 192.168.1.255 (broadcast sieci) na port 4919/UDP. Można ustawić odpowiednią regułkę na firewall'u i zalogować to zdarzenie. Na linux'ach w logu wtedy wygląda to mniej więcej tak:

tryb-failsafe-iptables-log-router

Po pojawieniu się powyższego komunikatu, trzeba wcisnąć przycisk na routerze i to automatycznie zainicjuje tryb failsafe . Jeśli nie mamy możliwości obserwowania logów, to pozostaje nam energiczne wciskanie przycisku. Tryb failsafe można poznać po częstotliwości migania diody system na routerze. Po przyciśnięciu przycisku w odpowiednim momencie, ta dioda zacznie migać bardzo szybko.

Pozostaje nam już tylko zalogować się na ruter za pomocą protokołu telnet. Po pomyślny dostaniu się do systemu, powinien nas przywitać komunikat podobny do tego poniżej:

tryb-failsafe-logowanie-telnet-openwrt

Proces naprawczy rozpoczynamy zawsze od zamontowania partycji, która przechowuje wprowadzane przez nas zmiany. Robimy to przez wpisanie w terminalu poniższego polecenia:

# mount_root

Na wypadek, gdyby to powyższe polecenie nie zadziałało, to możemy spróbować tę partycję zamontować ręcznie przy pomocy mount :

# mount -t jffs2 /dev/mtdblock3 /overlay

Zmiana zapomnianego hasła do konta root

Różne mogą być przyczyny, które zagnają nas w tryb failsafe . Jedną z nich może być zapomniane hasło do konta administratora root. Bez niego nie zalogujemy się na router. Niemniej jednak w trybie ratunkowym już jesteśmy zalogowani na to konto i po zamontowaniu partycji możemy wydać polecenie passwd i to hasło ustawić ponownie.

# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root

Edycja ustawień

Jako, że po zamontowaniu partycji, na której są przechowywane wszystkie zmiany jakie wprowadziliśmy w konfiguracji OpenWRT, to możemy zwyczajnie tę konfigurację teraz przejrzeć. W oparciu o to, co robiliśmy ostatnio na routerze, możemy postarać się o usunięcie pewnych pakietów z systemu za pomocą menadżera pakietów opkg . Jeśli winna jest literówka, która zaplątała się w jednym z plików konfiguracyjnych, to bez problemu możemy poprawić ten błąd za pomocą edytora vi .

Kończenie pracy w trybie failsafe

Jeśli ustaliliśmy przyczynę problemów routera i wyeliminowaliśmy ją z powodzeniem, to jedyna czynność jaka nam teraz pozostała, to zresetowanie routera przy pomocy tego poniższego polecenia:

# reboot -f

Jeśli nie mamy pojęcia co się popsuło, to możemy zresetować router do ustawień fabrycznych, tzw. firstboot, przez wpisanie w terminalu firstboot i zresetowanie routera.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.