Alternatywne oprogramowanie dla routera WiFi – Linksys WRT54GL 12


Od Redakcji: artykuł pochodzi z majowego wydania Linux Magazine. Kompletną listę artykułów możecie znaleźć na stronach miesięcznika.

WRT54GL to jeden z najbardziej popularnych routerów WiFi firmy Linksys by Cisco wśród linuksowych geeków. Przyglądamy się krótko dwóm dystrybucjom Linuksa dla WRT54GL i poszerzamy możliwości routera.

Linksys WRT54GL wywodzi się z modelu WRT54G zaprezentowanego w grudniu 2002 roku. Producent zdecydował się oprzeć oprogramowanie wewnętrzne (ang. Firmware) routera na Linuksie i opublikował jego kod źródłowy, co otworzyło drogę do powstania alternatywnego oprogramowania. Najpopularniejsze dystrybucje Linuksa dla WRT54GL (i nie tylko) to Tomato, DD-WRT i OpenWrt.

Przed instalacją nowego firmware’u dobrze jest zresetować router do ustawień fabrycznych. Możemy to wykonać, przyciskając przez trzydzieści sekund przycisk [Reset] znajdujący się z tyłu urządzenia. Pamiętajmy również o tym, by instalować nowe oprogramowanie, łącząc się z routerem wyłącznie poprzez kabel, nie za pomocą WLAN. Podczas wgrywania firmware’u nie wolno nam również odłączyć routera od zasilania ani naciskać przycisku [Reset]. Po zerwaniu łączności lub zasilania router może stać się niezdatny do użytku.

Opisane poniżej oprogramowanie testowane było na Linksysie WRT54GL v1.1 wypożyczonym z polskiego oddziału Linksys by Cisco. Dokonując wszelkich modyfikacji opisanych w tym tekście, pamiętajmy, że robimy to na własną odpowiedzialność!

Metody flashowania

Firmware routera najłatwiej wgrywać za pomocą interfejsu administracyjnego. W fabrycznym oprogramowaniu, wybieramy opcję Firmware upgrade w zakładce Administration. Wskazujemy plik z rozszerzeniem .bin zawierający wybraną dystrybucję i klikamy Upgrade. W Tomato oraz interfejsie LuCI OpenWrt procedura jest niemal identyczna – w pierwszym wybieramy Administration -> Upgrade, a w drugim System -> Flash firmware. Po zakończeniu flashowania powinien pojawić się komunikat o sukcesie operacji, a router powinien się zrestartować.

Innym sposobem na wdrożenie nowego oprogramowania w routerze jest użycie protokołu TFTP. TFTP jest bardzo prostym protokołem umożliwiającym przesyłanie plików w sieci, nieposiadającym właściwie żadnych innych funkcji. Wgrywanie oprogramowania przy użyciu TFTP jest jedną z możliwości „uratowania” routera po nieudanej próbie aktualizacji firmware’u. Wynika to ze sposobu uruchamiania routera. Po włączeniu zasilania uruchamia się bootloader, który sprawdza sumę kontrolną oprogramowania. Jeśli suma jest nieprawidłowa lub włączona jest opcja boot_wait, bootloader uruchamia podstawową obsługę sieci i przez czas wait_time sekund oczekuje na pakiety TFTP. Opcja boot_wait domyślnie jest włączona. Jeśli na routerze jest już zainstalowany alternatywny firmware, możemy to sprawdzić, logując się do routera przez telnet lub SSH i wykonując:

nvram get boot_wait
nvram get wait_time

Jeśli okaże się, że opcje są wyłączone, wykonujemy:

nvram set boot_wait=on
nvram set wait_time=30
nvram commit
reboot

Procedura flashowania przez TFTP jest następująca:
0. Upewniamy się, że opcje boot_wait i czas wait_time są ustawione.
1. Odłączamy zasilanie routera.
2. Ustawiamy statyczny adres IP komputera na 192.168.1.2 i maskę podsieci na 255.255.255.0.
3. Przechodzimy do katalogu, w którym znajduje się plik .bin z oprogramowaniem, wywołujemy tftp 192.168.1.1, a następnie w kliencie tftp wydajemy kolejno polecenia: binary, rexmt 1, timeout 60, trace.
4. Nadal będąc w kliencie tftp, wpisujemy put nazwa_pliku.bin i wciskamy [Enter], podłączając jednocześnie zasilanie routera
5. Po kilku próbach, klientowi tftp powinno udać się połączyć z routerem. Po zakończeniu przesyłania, opuszczamy klienta tftp poleceniem quit.

Jeśli wszystko przebiegło prawidłowo, w routerze powinna zacząć błyskać dioda Power, a po kilku chwilach powinno być możliwe połączenie z routerem.

Tomato

Tomato to firmware przeznaczone dla routerów opartych na chipsetach firmy Broadcom, takich jak WRT54G* i inne modele Linksys oraz niektóre modele Asus i Netgear. Największą zaletą Tomato są duże możliwości kształtowania i monitorowania ruchu w sieci oraz przejrzysty (choć dający spore możliwości) graficzny interfejs, wykorzystujący AJAX i SVG. To pozwala Tomato rysować na żywo wykresy przedstawiające ruch sieciowy, który przechodzi przez router. Samo Tomato doczekało się się kilku różnych odmian, różniących się zestawami funkcji i możliwościami.

Archiwum Tomato zawiera kilka plików binarnych dla różnych urządzeń, plik readme.htm z instrukcjami, wskazówkami oraz dziennikiem zmian. Oprócz tego w archiwum znajduje się plik sha1 zawierający sumy kontrolne poszczególnych binariów. Przed wdrożeniem Tomato sprawdzamy, czy plik jest prawidłowy:

$ sha1sum -c sha1 | grep WRT54GL
WRT54G_WRT54GL.bin: DOBRZE

Po instalacji Tomato możemy zalogować się do jego interfejsu, wpisując w przeglądarce adres 192.168.1.1, podając login admin i hasło admin. Tomato pozwala również na zdalne logowanie się do routera za pomocą telnetu i SSH. Usługi te możemy włączać i wyłączać w interfejsie webowym: Administration -> Admin Access. Logując się do routera, mamy do dyspozycji minimalistycznego Linuksa (opartego na BusyBox) z możliwością między innymi montowania zdalnych systemów plików (Samba/CIFS), vi i dostępem do pamięci NVRAM (polecenie nvram).

QoS

QoS (ang. Quality of Service) to ogólna nazwa dla zestawu parametrów połączeń telekomunikacyjnych. Charakterystyki te obejmują między innymi ograniczenia przepustowości, priorytetyzację poszczególnych usług lub zapewnianie sprawiedliwego dostępu do sieci dla wszystkich podłączonych do routera urządzeń. Standardowe oprogramowanie routera pozwala na proste zarządzenie QoS (priorytetyzacja urządzeń i aplikacji, kilka klas ograniczeń). W Tomato implementacja QoS jest bardziej zaawansowana, pozwala na zdefiniowanie większej liczby klas i szczegółowych ograniczeń dla portów, protokołów i aplikacji.

Przykładowo: chcemy ograniczyć przepustowość łącza dostępnego dla protokołu HTTP użytkownikowi o IP 192.168.1.119 do 2 kB/s. Po zalogowaniu się do interfejsu administracyjnego Tomato, klikamy pozycję QoS w lewym menu. Zaznaczamy opcję Enable QoS i w sekcji Inbound Limit podajemy maksymalną przepustowość łącza w polu Max Bandwidth. Następnie definiujemy limity dla poszczególnych klas (Rysunek 1). Zapisujemy ustawienia przyciskiem Save u dołu okna i przechodzimy do pozycji QoS -> Classification w lewym menu. Poniżej tabeli zawierającej domyślne reguły znajduje się grupa pól, służących do definiowania nowych reguł. Z pierwszego rozwijanego menu wybieramy Src IP i w polu obok wpisujemy adres IP komputera źródłowego (w naszym wypadku – 192.168.1.119). Następnie wybieramy klasę (u nas – Lowest) i podajemy opis reguły. W następnych polach wskazujemy port docelowy (Dst port) – 80.


Rysunek 1: Tomato: limity dla poszczególnych klas.


Rysunek 2: Tomato: QoS działa, na Debiana trzeba będzie poczekać… 😉

Tomato daje możliwość tworzenia skryptów, które mogą być wykonywane podczas uruchamiania i wyłączania routera, po podłączeniu połączenia WAN czy jako reakcja na naciśnięcie przycisku z logo Cisco Systems po lewej stronie frontu urządzenia. Mamy również możliwość kontroli podświetlenia tego przycisku (dostępne opcje to: wygaszony, biały, bursztynowy lub biało-bursztynowy). Skonstruujemy skrypt, który kolorem podświetlenia będzie informował o tym, czy za pośrednictwem WLAN podłączone są do routera jakiekolwiek urządzenia, a za pomocą przycisku będziemy mogli go włączać i wyłączać.

W menu interfejsu administracyjnego wybieramy Administration -> Scripts i w karcie Init wpisujemy kod podany na Listingu 1. Plik /tmp/klienci będziemy wykorzystywać do włączania i wyłączania mechanizmu. Skrypt działa w pętli (co sekundę) i wykorzystuje program wl do sprawdzenia listy urządzeń (assoclist) podłączonych do interfejsu bezprzewodowego, którego nazwę pobiera z pamięci NVRAM (nvram get wl0_ifname). Jeśli lista klientów nie jest pusta, pojawia się białe podświetlenie, w przeciwnym wypadku – bursztynowe. Po wpisaniu kodu zapisujemy go przyciskiem Save u dołu okna i przechodzimy do sekcji Buttons / LED. Za pomocą list rozwijanych określamy, jaki czas naciśnięcia będzie potrzebny do uruchomienia skryptu. Wpisujemy kod z Listingu 2, wygaszamy obydwa kolory podświetlenia, odznaczając obydwa pola w części Startup LED, zapisujemy ustawienia i restartujemy urządzenie (odnośnik Reboot w głównym menu).

touch /tmp/klienci

ifname=`nvram get wl0_ifname`;

while sleep 1; do
	if [ -e /tmp/klienci ]; then
		if [ "$(wl -i $ifname assoclist)" != "" ]; then
			led white on;
			led amber off;
		else
			led white off;
			led amber on;
		fi
	fi
done

Listing 1: Skrypt wykonywany podczas uruchamiania routera

if [ -e /tmp/klienci ]; then
	rm /tmp/klienci;
	led white off;
	led amber off;
else
	touch /tmp/klienci;
fi

Listing 2: Skrypt wywoływany po naciśnięciu przycisku

OpenWrt

OpenWrt to propozycja dla bardziej zaawansowanych użytkowników. Nie jest to jedynie gotowa dystrybucja, lecz właściwie cała platforma umożliwiająca instalację, konfigurację i rozwijanie aplikacji, co umożliwia dopasowanie routera do bardzo skomplikowanych lub nietypowych wymagań. Jak ostrzega strona projektu, OpenWrt nie jest przeznaczony dla początkujących użytkowników – mimo że do dyspozycji są dwa rodzaje graficznego interfejsu (LuCI i X-Wrt), niektóre zaawansowane czynności wymagają dostępu do wiersza poleceń i znajomości implementacji sieci w Linuksie. OpenWrt działa na szerokiej gamie routerów wielu producentów, między innymi Linksys, Motorola, Netgear czy Siemens. W momencie pisania tego tekstu, aktualna stabilna wersja OpenWrt ma kryptonim Kamikaze i nosi oznaczenie 8.09, choć prace na kolejną wersją, 10.03 (kryptonim Backfire), są już na finiszu.

By pobrać plik binarny, przechodzimy do listy plików do pobrania [7], wybieramy najnowszą wersję, a następnie architekturę (w przypadku WRT54GL jest to brcm-2.4). Pobieramy plik openwrt-wrt54g-squashfs.bin oraz plik md5sums i sprawdzamy sumę kontrolną:

$ md5sum -c md5sums | grep wrt54g-
openwrt-wrt54g-squashfs.bin: DOBRZE

Jeśli plik jest w porządku, możemy wgrać OpenWrt dowolnym sposobem. Po restarcie router przyjmuje adres IP 192.168.1.1 i umożliwia zalogowanie się do graficznego interfejsu LuCI w przeglądarce internetowej – domyślny login to root, bez hasła.

OpenWrt zawiera system zarządzania pakietami opkg podobny do apt-get znanego z Debiana i pochodnych. W Internecie znajduje się kilka repozytoriów [8] zawierających różne pakiety. My zainstalujemy X-Wrt, alternatywny wobec LuCI graficzny interfejs OpenWrt, który daje więcej możliwości oraz, podobnie jak Tomato, aktualizowane na bieżąco wykresy pokazujące ruch w sieci i obciążenie routera.

Logujemy się na konto root przez SSH i dopisujemy repozytorium do systemu pakietów:

echo "src X-Wrt http://downloads.x-wrt.org/xwrt/kamikaze/8.09/brcm-2.4/packages" >> /etc/opkg.conf

Odświeżamy pamięć podręczną opkg:

opkg update

Usuwamy LuCI i zależności:

opkg remove -recursive luci-*

I w końcu instalujemy X-Wrt:

opkg install webif

Po zakończeniu instalacji możemy zalogować się do X-Wrt przez przeglądarkę internetową.

Zarówno strona, jak i Wiki projektu OpenWrt zawierają dużo informacji, wskazówek i przewodników omawiających zaawansowane ustawienia i modyfikacje, na przykład budowanie własnego pliku binarnego OpenWrt, dodawanie nowych usług, a nawet dokładne opisy sprzętu. [9]

Na koniec

Jeśli alternatywny nie sprawdzą się, zawsze możemy wrócić do oryginalnego oprogramowania dostarczanego przez producenta. Ze strony producenta [10] możemy pobrać aktualną wersję firmware’u dla posiadanej wersji routera i zainstalować ją w dowolny omówiony na początku tekstu sposób. Z tej samej strony możemy też przejść do Centrum Kodu GPL zawierającego źródła firmware’u WRT54GL i nie tylko.

Oczywiście w tym tekście przedstawamy jedynie skromny wycinek możliwości alternatywnych firmware’ów. Obydwie zaprezentowane dystrybucje dają dostęp do wszystkich zmiennych przechowywanych w pamięci NVRAM oraz całej konfiguracji, co pozwala dopasować je do konkretnych potrzeb. Zachęcamy do eksperymentów we własnym zakresie oraz dzielenia się wynikami i spostrzeżeniami w Sieci.

Info

Autor: Artur Nowosielski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

12 komentarzy do “Alternatywne oprogramowanie dla routera WiFi – Linksys WRT54GL

  • Ruri Autor wpisu

    [quote comment=”42597″]WRT54GL to jeden z najbardziej popularnych wśród linuksowych geeków routerów WiFi firmy Linksys by Cisco.

    geek ≠ router

    fajna ta gazeta :D[/quote]
    Popularny z kilku powodów: można uruchomić alternatywne oprogramowanie (oparte na Linuksie) jak też pisać własne skrypty (to co zostało przedstawione to ułamek procenta możliwości routera). Dostępny kod źródłowy umożliwia pisanie własnych modyfikacji firmware itd. itd. Możliwości jest wiele by coś własnego dodać. Stąd zdanie o popularności wśród linuksowych userów tego routera. Nigdzie nie zostało napisane iż „geek = router” Sam posiadam i bardzo sobie chwalę możliwość dowolnej zmiany w konfiguracji.

  • Franek

    [quote post=”12253″] WRT54GL to jeden z najbardziej popularnych wśród linuksowych geeków routerów WiFi firmy Linksys by Cisco.

    geek ≠ router

    fajna ta gazeta 😀

    Popularny z kilku powodów: można uruchomić alternatywne oprogramowanie (oparte na Linuksie) jak też pisać własne skrypty (to co zostało przedstawione to ułamek procenta możliwości routera). Dostępny kod źródłowy umożliwia pisanie własnych modyfikacji firmware itd. itd. Możliwości jest wiele by coś własnego dodać. Stąd zdanie o popularności wśród linuksowych userów tego routera. Nigdzie nie zostało napisane iż “geek = router” Sam posiadam i bardzo sobie chwalę możliwość dowolnej zmiany w konfiguracji.[/quote]

    Ruri, a czy ja napisałem że ten router czy ten soft jest zły? Chodziło mi o to, że to zdanie jest dziwne napisane, i ja wnioskuję z niego że linuxowi geecy są routerami O_o

  • Ruri Autor wpisu

    [quote comment=”42617″
    Ruri, a czy ja napisałem że ten router czy ten soft jest zły? Chodziło mi o to, że to zdanie jest dziwne napisane, i ja wnioskuję z niego że linuxowi geecy są routerami O_o[/quote]

    Ruri, a czy ja napisałem że ten router czy ten soft jest zły? Chodziło mi o to, że to zdanie jest dziwne napisane, i ja wnioskuję z niego że linuxowi geecy są routerami O_o[/quote]

    Dobra, przerobiłem lekko by nie było niedomówień.

  • d2

    [quote comment=”42618″]A słyszał ktoś o APPro?? Ja osobiście testowałem kilka alternatywnych softów, ale ten wrocławski …”wymiata”.[/quote]
    A to nie jest przypadkiem komercyjny soft?

  • ernov

    Proszę nie marnować czyjegoś czasu. Usuwanie Luci i instalacja Webif kończy się niepowodzeniem z powodu braku miejsca na jffs2. Czynność taka nie jest polecana i wspierana przez deweloperów ponieważ instalacja webif przez opkg na flash romie jest niemożliwa.

  • Zelo

    Dla zainteresowanych tematem alternatywnego softu na routerach i podobnym sprzęcie zapraszam na portal openlinksys.info. (mam nadzieje, ze nie zostanie to potraktowane jako reklama, ale nie znam lepszego źródła informacji na ten temat :D)

    Co do wrt54gl to byłem szczęśliwym posiadaczem tego routera w wersji 1.0 przez 4 lata (kupiłem go jako używany więc pewnie przepracował koło 5 lat i nigdy nie miałem z nim żadnych problemów, po za tym, że uwaliłem parokrotnie soft, po czym z pomocą kawałka druta go reanimowałem) i mógłbym go śmiało polecić każdemu gdyby nie fakt, że jest to dość stara konstrukcja i w nie wiele większej cenie można nabyć lepszy sprzęt także wspierający alternatywny firmware.