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.
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
:
1 |
wol -i 192.168.1.255 08:00:27:c6:cf:ce |
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:
1 |
/usr/sbin/wol -i 192.168.1.255 08:00:27:c6:cf:ce |
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.
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ź.
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:
- Przyporządkować stały adres IP (static DHCP),
- Przekierować jakiś port na ten adres (port forwarding),
- 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.
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ę:
1 |
ip neigh add 192.168.1.254 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br-lan |
natomiast w przypadku DD-WRT możemy również skorzystać z SSH lub webowym GUI przejść na Administration -> Commands i tam wklepać
1 |
arp -i br0 -s 192.168.1.254 ff:ff:ff:ff:ff:ff |
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:
1 2 3 4 |
# Put your custom commands here that should be executed once # the system init finished. By default this file does nothing. exit 0 |
Edycję pliku przeprowadzamy wydając komendę:
1 |
vi /etc/rc.local |
natomiast aktualną zawartość tablicy ARP routera sprawdzimy w OpenWrt (Gargoyle) komendą:
1 |
ip neigh show |
a w OpenWrt (Gargoyle) i DD-WRT:
1 |
arp -a |
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.