Wake on LAN z OpenWrt / DD-WRT

20 listopada 2012

Problematykę Wake on LAN omówiłem jakiś czas temu dokładnie w artykule Wake on LAN przez Internet. Opisałem w nim jak należy skonfigurować BIOS i system operacyjny (różne wersje Windows i Linux), aby komputer mógł być budzony w LAN-ie. Opisałem konfigurację domowego routera, tak aby wygenerowany gdzieś w internecie Magic Packet dotarł do naszego komputera i go obudził. Z kolei w innym artykule Wake On Lan via PHP zdalnie włączy komputer przedstawiłem alternatywny sposób realizacji zdalnego Wake on LAN, przy pomocy pakietu Wake On Lan via PHP zainstalowanego na serwerze WWW w LAN-ie. Teraz nadszedł czas na omówienie działania Wake on LAN w popularnych, alternatywnych wersjach oprogramowania sterujących routerami – OpenWrt (Gargoyle) i DD-WRT. Jeśli chodzi o budzenie w LAN-ie nie ma się tu czym ekscytować – wszystko zostało już dokładnie omówione w artykule Wake on LAN przez Internet. W tym wpisie przedstawię alternatywne metody realizacji Wake on LAN over Internet wykorzystujące specyficzne cechy oprogramowania OpenWrt (Gargoyle) i DD-WRT. Oczywiście do budzenia komputerów w obrębie sieci LAN też mogą zostać wykorzystane.

Jeśli jeszcze nie masz OpenWrt (Gargoyle) zapoznaj się z wpisem Gargoyle – instalacja, aktualizacja, usuwanie.

Wake on LAN z SSH – lokalne generowanie Magic Packet

Wake on LAN jak sama nazwa wskazuje służy do budzenia komputerów w LAN-ie. Abyśmy zatem mogli obudzić jakiś komputer, choć jeden komputer w LAN-ie musi być włączony, gdyż to on posłuży nam do wygenerowania tzw. Magic Packet. Na potrzeby generowania Magic Packet śmiało możemy przyjąć, że takim “małym” komputerem jest nasz domowy router, działający pod kontrolą “małego” Linuksa jakim jest OpenWrt / DD-WRT.

Nasz “mały” komputer nie ma klawiatury, myszki, monitora. Jak zatem się do niego dostać? Przez SSH. W tym celu musimy odblokować zdalny dostęp SSH do routera. Dalsze kroki przedstawię na podstawie interfejsu graficznego Gargoyle dla OpenWrt, ale wspomnę także jak znaleźć analogiczne opcje w DD-WRT. Po zalogowaniu się do Gargoyle Router Management Utility przechodzimy na System -> Dostęp do routera. Włączamy Zdalny dostęp SSH i choć nie jest to specjalnie wyrafinowana metoda zabezpieczająca, zmieniamy Zdalny port SSH z domyślnego 22 na jakiś inny i ograniczamy Maksymalną liczbę prób logowania do 3 prób na 5 minut. Będzie to stanowiło ochronę przed automatami wykorzystującymi proste hasła, próbującymi się dostać “na pałę” do SSH routera.

Dostęp do SSH

Dostęp do SSH


W DD-WRT analogiczne opcje znajdują się w Administration -> Management.

Teraz już możemy zalogować się do OpenWrt (Gargoyle) / DD-WRT do czego wykorzystamy popularny klient SSH – PuTTY. Samo budzenie to wykonanie omówionej już w artykule Wake on LAN przez Internet komendy wol:

Komenda ta wymaga tylko 2 argumentów – adresu rozgłoszeniowego naszej sieci (ang. broadcast), zazwyczaj 192.168.1.255 oraz adresu MAC budzonego komputera. W przypadku DD-WRT, podajemy pełną ścieżkę dostępu do komendy, czyli:

Metoda prosta i skuteczna, ale niezbyt wygodna.

Wake on LAN z WWW – lokalne generowanie Magic Packet

Interfejs graficzny Gargoyle dla OpenWrt oraz DD-WRT posiadają bardzo fajnie zrealizowaną funkcjonalność Wake on LAN. Abyśmy jednak mogli z niej skorzystać zdalnie podobnie jak to było w przypadku dostępu przez SSH musimy odblokować zdalny dostęp do webowego GUI. Po zalogowaniu się do Gargoyle Router Management Utility przechodzimy na System -> Dostęp do routera. Włączamy Zdalny dostęp przez HTTPS (tylko HTTPS, HTTP jest protokołem nieszyfrowanym!), dla bezpieczeństwa zmieniamy Zdalny port HTTPS z domyślnego 443 na jakiś inny i ograniczamy Czas trwania sesji do 15 minut.

Dostęp do panelu

Dostęp do panelu


W DD-WRT analogiczne opcje znajdują się w Administration -> Management.

Teraz zalogujmy się zdalnie do naszego routera, przejdźmy na Konfiguracja -> Wake on LAN. Zobaczymy tam wykaz komputerów z którymi miał kontakt nasz router wraz z adresami IP i MAC, a po prawej stronie sprytny przycisk Wybudź.

Wake on LAN

Wake on LAN


W DD-WRT analogiczne opcje znajdują się w Administration -> WOL.
Metoda prosta i skuteczna a co najważniejsze wygodna.

Wake on LAN przez Internet – przekierowanie Magic Packet

Jednakże najwygodniej i najbezpieczniej jest jednak przekierować Magic Packet na routerze. Dzięki temu nie musimy włączać zdalnego dostępu do routera, a do budzenia komputerów możemy wykorzystać np. smarfon ze specjalną aplikacją, w której zdefiniujemy nasze komputery – omówiłem to już we wspomnianym artykule Wake on LAN przez Internet. Wygodniejszego sposobu chyba nie ma. We wspomnianym artykule omówiłem konfigurację routera z firmowym oprogramowaniem TP-Linka. Skoro jednak zdecydowaliśmy się wgrać do routera alternatywne oprogramowanie OpenWrt (Gargoyle) / DD-WRT skorzystajmy z niego.

W firmowym oprogramowaniu TP-Linka dla każdego budzonego komputera musieliśmy wykonać 3 rzeczy:

  1. Przyporządkować stały adres IP (static DHCP),
  2. Przekierować jakiś port na ten adres (port forwarding),
  3. Powiązać na stałe IP z MAC w tablicy ARP routera (ARP binding).

W OpenWrt (Gargoyle) / DD-WRT będziemy musieli zrobić tylko 2 rzeczy i to niezależnie od ilości budzonych komputerów. Z poziomu webowego GUI przekierowujemy port 7 lub 9, protokół UDP na nieistniejący (ważne!) w naszej sieci adres IP np. 192.168.1.254. W Gargoyle opcja ta znajduje się w Firewall -> Przekierowanie portów, a w DD-WRT w NAT / QoS -> Port Forwarding.

Przekierowanie portu

Przekierowanie portu

Na logikę wydawałyby się słuszne zrobić przekierowanie na adres rozgłoszeniowy (ang. broadcast) naszej sieci LAN, domyślnie 192.168.1.255, ale to nie działa, dlatego przekierowujemy ruch na adres nieistniejący w naszej sieci LAN.

Następnie logujemy się przez SSH (może być lokalnie) i wykonujemy komendę:

natomiast w przypadku DD-WRT możemy również skorzystać z SSH lub webowym GUI przejść na Administration -> Commands i tam wklepać

Adres MAC wynoszący ff:ff:ff:ff:ff:ff to broadcast w sieci Ethernet, dzięki czemu Magic Packet przekierowany na nieistniejący adres IP 192.168.1.254 zostanie rozgłoszony w całej naszej sieci LAN. Dzięki temu nie musimy definiować każdego budzonego komputera osobno. Co więcej w tej metodzie nie musisz nawet mieć przypisanych stałych adresów IP do poszczególnych komputerów. Choć z innych względów np. zdalnego dostępu do nich i tak trzeba to zrobić.

Pozostaje nam jeszcze jedna rzecz do zrobienia – trzeba zapewnić powiązanie adresu IP 192.168.1.254 z adresem MAC ff:ff:ff:ff:ff:ff po restarcie routera. W tym celu powyższą komendę dopisujemy do pliku /etc/rc.local oczywiście przed ostatnią komendą exit 0. Domyślnie plik ten wygląda tak:

Edycję pliku przeprowadzamy wydając komendę:

natomiast aktualną zawartość tablicy ARP routera sprawdzimy w OpenWrt (Gargoyle) komendą:

a w OpenWrt (Gargoyle) i DD-WRT:

Teraz nie pozostaje nam nic innego jak tylko przetestować budzenie komputera ze strony WWW czy jakiejś smartfonowej aplikacji, po szczegóły odsyłam do wielokrotnie wspominanego wpisu Wake on LAN przez Internet.

Wake On Lan z Androida

Wake On Lan z Androida

Unikalny wpis

7 Comments

  • piotr pisze:

    Witam
    Ustawiłem wszystko tak jak jest w opisie i niestety nie działa wzbudzanie z LANu i z WANu. Jedyny sposób żeby obudzić komputer to przez www routera. Od czasu do czasu widze też ze w MACu komputera który ma się wzbudzać są same zera a po chwili znowu jest normalny MAC.Zawartość tablicy ARP wydaje się być ok. Firmware jaki mam u siebie na routerze TP-LINK WR 1043ND v2 to Gargoyle 1.6.1.2 – ktoś może zna rozwiązanie tego problemu ?
    Wcześniej miałem D-linka DIR 655 i wszystko na tych samych ustawieniach (komputer, WoL w telefonie) śmigało bez problemu

  • piotr pisze:

    Ok – doszedlem do tego ze jak jest ustawione rozsyłanie po broadcascie w aplikacji na telefonie to po lanie śmiga 100 n 100 natomiast nadal nie wiem jak to ogarnąć z WANu

  • Jurek pisze:

    Dziękuję za poradnik, ale prosze łopatologicznie wytłumaczyć co oznacza ten wpis: “W tym celu powyższą komendę dopisujemy do pliku /etc/rc.local oczywiście przed ostatnią komendą exit 0″
    Po kolei w Putty wklepuję to (Gargoyle):
    1. ip neigh add 192.168.1.254 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br-lan
    Enter
    2. vi /etc/rc.local
    Enter
    I co dalej? Zatwierdzam coś? Poległem na tym.

    • Jazz pisze:

      No cóż, vi to zmora dla początkujących. Masz 2 wyjścia albo poczytaj o obsłudze vi, albo zainstaluj prosty edytor tekstu – nano.

  • Jurek pisze:

    Czyli ma to wyglądac tak?

    # Put your custom commands here that should be executed once
    # the system init finished. By default this file does nothing.
    ip neigh add 192.168.1.254 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br-lan
    exit 0

    Czym się zatwierdza?

  • Jurek pisze:

    Ogromne dzięki! Mam nadzieję, że zadziała.
    Obsługa vi:
    http://lewandowicz.eu/instrukcje/vi.php
    Użyłem tylko tego:
    j – kursor o jedną pozycję na dół
    Potem Twoje “Esc :wq”
    BTW: pora chyba nauczyć się podstaw Linuxa bo coraz więcej się tego używa: NAS-y, routery…

Add Comment Register



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Loading Facebook Comments ...