Wyłączenie WoL w karcie sieciowej

Spis treści

WoL (Wake on LAN) to taki ficzer, który umożliwia włączenie komputera przez sieć. By tego typu sytuacja miała miejsce, zarówno karta sieciowa oraz płyta główna komputera musi wspierać WoL. Dodatkowo, BIOS maszyny musi mieć aktywowaną odpowiednią opcję. Obecnie WoL jest implementowany praktycznie w każdej płycie głównej i karcie sieciowej, także raczej możemy przyjąć, że nasz komputer może zostać wybudzony za pomocą kabla sieciowego. Stwarza to oczywiście zagrożenie bezpieczeństwa ale poza tym, w grę wchodzi także większy pobór energii. Jeśli nie korzystamy z WoL, to jest on dla nas zbędny i należałoby go wyłączyć.

Sprawdzenie stanu WoL

Jak wspomniałem na wstępie, wielu z nas nigdy nie korzystało z wybudzania maszyny za pomocą opcji WoL. Domyślnie WoL jest aktywowany, zatem pobiera energię. Nie jest jej, co prawda, dużo ale zawsze. Należy przy tym dodać, że karty Wi-Fi nie wspierają WoL. Dodatkowo, w większości laptopów, WoL nie działa gdy te pracują na baterii i wymagane jest podpięcie ich do źródła zasilania.

Jeżeli nie wiemy do końca czy WoL jest włączony (czy w ogóle dostępny) w sterowniku karty sieciowej, to możemy to sprawdzić wydając poniższe polecenie:

# ethtool eth0 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: g

W tym przypadku karta od interfejsu eth0 obsługuje kilka rodzajów WoL, które są stosownie oznaczane przy pomocy liter. Możemy się spotkać z poniższymi: p (PHY), u (ruch unicast), m (ruch multicast), b (ruch broadcast), a (pakiety ARP), g (magiczny pakiet) oraz d (wyłączony).

Zatem, wybudzenie tej maszyny może nastąpić po przesłaniu magicznego pakietu, co automatycznie implikuje włączenie WoL dla tego interfejsu i wyższe zużycie energii.

Wyłączenie WoL

WoL może zostać wyłączony przy pomocy narzędzia ethtool w poniższy sposób:

# ethtool -s eth1 wol d

I sprawdzamy, czy ta operacja przyniosła jakieś zmiany:

# ethtool eth1 | grep Wake-on
      Supports Wake-on: pumbg
      Wake-on: d

Litera d sugeruje, że WoL został z powodzeniem wyłączony. Jest tylko jeden problem, mianowicie, te powyższe ustawienia nie przetrwają restartu maszyny. Trzeba jakoś temu zaradzić. Jest wiele metod, które mogą trwale wyłączyć WoL i my skupimy się głównie na dwóch z nich, tj. przy pomocy reguły dla udev'a oraz przy pomocy systemd.

Reguła dla udev'a

Ten sposób zakłada iż orientujemy się nieco w zagadnieniach związanych z pisałem reguł dla udev'a. Niemniej jednak, będąc obytym z udev'em, problematyczne może okazać się określenie nazwy interfejsu sieciowego, dlatego też lepiej dopasowywać urządzenie po ścieżce PCI, lub też odpowiednio dobrać numerek dla pliku reguły, tak by została ona zaaplikowana dopiero po zmianie nazw interfejsów sieciowych, za które odpowiada plik 70-persistent-net.rules .

W tym przypadku będziemy dopasowywać po ścieżce PCI i musimy najsampierw ją ustalić. W tym celu odpalamy terminal i wpisujemy lspci :

# lspci | grep -i ethernet
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller (rev 02)

Zatem ścieżka PCI, to 02:00.0 i to w oparciu o ten numerek zrobimy dopasowanie w regule udev'a. Tworzymy zatem plik 50-wol.rules w katalogu /etc/udev/rules.d/ i dopisujemy tam poniższą linijkę:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:02:00.0", RUN+="/sbin/ethtool -s $name wol g"

WoL i systemd

Alternatywną metodą na wyłączenie WoL jest zaprzęgnięcie do pracy systemd, i stworzenie pliku .link , w którym to określane są parametry dla interfejsu sieciowego i niekoniecznie muszą się one ograniczać tylko do opcji WoL.

By wyłączyć WoL przy pomocy systemd, tworzymy plik /etc/systemd/network/05-eth0.link o poniższej treści:

[Match]
Path=pci-0000:02:00.0

[Link]
Description=Disable WoL on eth0 interface
WakeOnLan=off

Podobnie jak w przypadku reguły dla udev'a, tutaj też dopasowanie dla urządzenia zrobiliśmy po ścieżce PCI. Ścieżkę także możemy wyciągnąć przy pomocy networkctl :

# networkctl status eth0
...
      Path: pci-0000:02:00.0
...

Po restarcie maszyny, WoL powinien być już wyłączony na dobre, o czym możemy się przekonać wydając poniższe polecenie:

# ethtool eth0 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: d
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.