Wake On LAN

Wake On LAN (WOL) abilita altri sistemi nella LAN (local area network) ad accendere il sistema via rete. Il supporto per WOL è necessario nella scheda di rete, scheda madre, firmware di avvio UEFI/BIOS e configurazione di rete del sistema operativo.

Hardware

Il primo passo per l'avvio del computer tramite rete è quello di assicurarsi che la scheda di rete e la scheda madre gestiscano un qualche tipo di funzionalità Wake On LAN (WOL).

Le schede madre con NIC sulla scheda solitamente gestiscono WOL senza la necessità di alcun pin/cavo.

Per le schede madri senza NIC sulla scheda solitamente ci sono due sistemi principali:

Esempi

Firmware

Nelle impostazioni del firmware di avvio UEFI/BIOS, sotto gestione dell'energia o rete, può essere presente una opzione chiara e intuitiva chiamata "Wake On LAN". Se tale opzione non è presente, ci potrebbe essere un'altra opzione della gestione dell'energia o di rete che abilita il WOL.

Esempi

Software

Dopo aver attivato il WOL nell'hardware e nel firmware, deve anche essere attivato nel software.

Prima controllare che la funzionalità WOL sia già attivata.

Se è attivata, allora si può spegnere il sistema, e poi usare un altro sistema per accenderlo.

Se non è attivata, allora è necessario abilitare l'attivazione automatica. Si può usare la funzionalità EOL integrata di systemd networkd, NetworkManager o ifupdown. In alternativa la si può attivare manualmente.

Controllare il WOL

Si può controllare se WOL è abilitato usando il comando ethtool dal pacchetto ethtool:

$ sudo ethtool eth0

Settings for eth0:
 Supported ports: [ MII ]
 Supported link modes:   10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
                         1000baseT/Full 
 Supported pause frame use: No
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
                         1000baseT/Full 
 Advertised pause frame use: No
 Advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: MII
 PHYAD: 1
 Transceiver: external
 Auto-negotiation: on
 Supports Wake-on: g
 Wake-on: g
 Link detected: yes

Wake-on: g significa che è abilitato.

Abilitare il WOL

ifupdown

Si può verificare se la rete viene gestita da ifupdown con ifquery. Questo è il comportamento predefinito in installazioni Debian.

A partire da squeeze i parametri di ethtool possono essere impostati direttamente da un file di configurazione delle interfacce. Vedere la documentazione in /usr/share/doc/ethtool/README.Debian per maggiori informazioni.

Aggiungere un file di configurazione dell'interfaccia /etc/network/interfaces.d/eth0 (o modificare il file di configurazione globale delle interfacce /etc/network/interfaces):

auto eth0
iface eth0 inet dhcp
        ethernet-wol g

Attivarlo:

sudo reboot

systemd-networkd

Si può controllare se la propria rete è gestita da systemd-networkd con il comando networkctl list.

Impostare il campo WakeOnLan ad una delle opzioni disponibili nella sezione [Link] del file .link per le interfacce di rete su cui si desidera usare WOL:

[Link]
WakeOnLan=magic

Fare attenzione che solo il primo file .link viene applicato e che esiste un 99-default.link. Il nome deve essere lessicograficamente più piccolo.

Attivarlo:

sudo networkctl reload
sudo networkctl reconfigure

NetworkManager

Si può controllare se i propri dispositivi di rete sono gestiti con il comando nmcli d.

NetworkManager gestisce WOL a partire dalla versione 1.0.6 e lo si può abilitare dalla GUI di configurazione della rete del desktop o dalla GUI nm-connection-editor da nm-connection-editor, oppure dallo strumento a riga di comando nmcli usando il comando seguente:

$ sudo nmcli c modify "wired1" 802-3-ethernet.wake-on-lan magic

Manuale

Il comando ethtool dal pacchetto ethtool può dire alle interfacce di rete di rispondere al pacchetto magico. Sostituire eth0 con il nome di device della propria interfaccia di rete:

$ sudo ethtool -s eth0 wol g

Usare il WOL

Le utilità WOL tipicamente richiedono l'indirizzo NIC MAC dell'host target; questo può essere trovato eseguendo le utilità standard per la configurazione della rete (es. ip a, ifconfig) o facendo ping al sistema target e poi controllando la tabella arp locale (arp).

Installare il pacchetto etherwake nel sistema di controllo per avere il comando etherwake che invia i "Magic Packet" all'altro computer in modo da risvegliarlo; va eseguito da root o tramite sudo:

$ sudo apt install etherwake
$ sudo etherwake <mac address>

È inoltre disponibile il pacchetto wakeonlan, wakeonlan è un programma leggermente più configurabile che utilizza pacchetti UDP anziché TCP e quindi non necessita di essere eseguito da root:

$ sudo apt install wakeonlan
$ wakeonlan <indirizzo mac>

Risoluzione dei problemi relativi a WOL

L'autore non vuole nessuna delle opzioni Wake On LAN tranne Wake on "Magic Packet" (g), in modo da accendere la macchina solo quando espressamente richiesto e non come conseguenza di messaggi unicast (u), broadcast (b) o multicast (m).

Tuttavia, se si vuole realmente il Wake On LAN su qualsiasi di questi eventi (tranne "Magic Packet"), si possono incontrare conflitti con pm-utils. Al momento della stesura di questa nota, gli script in questo pacchetto impostano l'opzione di risveglio per tutte le schede di interfaccia relativo solo per "Magic Packet" (g). Ciò sarà un problema se si desidera, ad esempio, che la propria macchina si risvegli "on-demand", quando riceve traffico (u). Il problema e una soluzione sono discussi più avanti.

Persistenza di WOL

L'hardware sembra conforme alle specifiche, si pensa di aver impostato correttamente il BIOS ma ancora non funziona se non si fa qualche azione software. Secondo le FAQ del client di Wake On Lan la maggior parte dei driver per Linux disabilita la funzionalità WOL all'avvio1, quindi bisogna farla partire.

Kernel 2.6

Con un kernel 2.6 si usa la directory /etc/modprobe.d. In caso si stia usando il file /etc/modprobe.conf che non include /etc/modprobe.d, si viene probabilmente avvertiti di ciò ad ogni avvio e alcune cose possono non venire configurate correttamente. Usando /etc/modprobe.d, aggiungere un file local.conf nella directory contenente:

install 8139too /sbin/modprobe -i 8139too; /sbin/ethtool -s eth0 wol g

ethtool proviene dal pacchetto ethtool e va installato, a meno che che la scheda non supporti un'opzione per impostare WOL; in tal caso nel file local.conf si aggiungerà una riga options appropriata, come:

options 3c59x enable_wol=1

Provando su un'altra macchina con una C3905B-TXNM e una 3C905C-TXM e che usa il modulo 3c59x per controllarle entrambe si è scoperto che ethtool non era in grado di interrogarle o impostare WOL, ma che era richiesta l'opzione enable_wol=1 e che ha funzionato.

Nel mentre si è notato che venivano caricati entrambi i moduli 8139too e 8139cp, ma caricare solo 8139cp non funzionava dal momento che il chipset sulla scheda non era sufficientemente recente, perciò è stato inserito in blacklist.

Debug di ethtool

Dopo un'ora passata cercando di capire perché il sistema non funzionasse ancora, l'autore ha iniziato a lanciare richieste ovunque tramite il comando ethtool per vedere dove fosse il problema:

$ sudo ethtool eth0

ifup

Ha così scoperto che, almeno con il driver 8139too su Debian 3.1/Sarge, la riga d'installazione funzionava se si caricava il modulo con modprobe 8139too ma ifup azzerava le impostazioni WOL, perciò è stato necessario aggiungere una riga nel file /etc/network/interfaces nel blocco eth0:

iface eth0 inet dhcp
        up /sbin/ethtool -s $IFACE wol g

È stato inoltre lasciato il comando ethtool nel file /etc/modprobe.d/local.conf, nel caso si avvii la macchina e ifup non venga eseguito prima dello spegnimento.

Conflitti con PM-Utils

Il pacchetto pm-utils contiene script che sono eseguiti in caso di sospensione, ibernamento o ripresa del sistema. C'è uno script, /usr/lib/pmutils/power.d/disable_wol, che imposta la configurazione per le interfacce a solamente risvegliarsi in caso di "Magic Packet" (g), indipendentemente dalle impostazioni che possono essere state configurate in /etc/network/interfaces (o uno dei file in /etc/network/interfaces.d, o manualmente usando ethtool o in qualche altro modo). Cercare nel file righe simili alle seguenti:

            disable) ethtool -s "${d##*/}" wol d>/dev/null 2>&1;;
            enable) ethtool -s "${d##*/}" wol g>/dev/null 2>&1;;

Ovviamente, se è stata configurata un'interfaccia per il Wake on LAN nel caso di un pacchetto unicast o "Magic Packet" (ug), e poi è stata fatta la sospensione usando pm-suspend, per esempio, questo script imposta l'interfaccia a solo "Magic Packet" (g) come parte del processo di sospensione.

Si può rilevare il problema, una volta che si sa cosa cercare, notando con ethtool dopo una riattivazione che le impostazioni per il "Wake-on" per le interfacce sono state impostate a "g".

Una semplice soluzione (che non interferisce con gli aggiornamenti dei pacchetti) è di aggiungere un file con lo stesso nome, disable_wol nella directory di configurazione locale, /etc/pm/power.d/. Questo scavalca lo script in /usr/lib/pm-utils/power.d/disable_wol.

Questa è il /etc/pm/power.d/disable_wol (un po' prolisso e banale nel funzioamento) dell'autore di questa sezione:

# Override the file /usr/lib/pm-utils/power.d/disable_wol which
# manually configures Wake On Lan (WOL) settings for interfaces.
# That default file uses ethtool to configure WOL for all interfaces
# to "g" (magic packet) alone.  
#
# Note that the presence of this file, with the same name but under
# /etc/pm/power.d/, is sufficient to completely override the file
# under /usr/lib/pm-utils/power.d/.  This latter file is included in
# the the "pm-utils" Debian package, and may be updated from time to
# time through the package-management system.  The directories under
# /etc/pm/ are the appropriate places for local configurations.
#
# On this system, the WOL configurations are made in the interface
# configuration under /etc/network/.  Each interface can have a 
# different configuration, and it is typical to configure WOL to 
# "ug" to wake the system on a unicast packet for traffic sent
# specifically to that interface.  This allows the system to be
# woken on demand, when traffic to one of its interfaces is received.


exit 0

Conclusioni

Wake On LAN funziona su Debian e fornisce nuove possibilità per la gestione di una macchina.

L'autore ad esempio può accedere al proprio gateway e avviare il suo sistema desktop, prelevare quello di cui ha bisogno e quindi spegnerlo a distanza. L'autore utilizza il DHCP con la mappatura MAC-to-IP in modo da poter guardare in quel file sul sistema gateway per sapere l'indirizzo MAC del sistema che vuole risvegliare; senza questo sistema sarebbe stato possibile tenere un file di testo con una lista.

Il suo passo successivo sarà quello far sì che i sistemi non essenziali vengano completamente spenti (non solo messi in halt) in seguito a un'interruzione di corrente per estendere la durata della batteria per sistemi essenziali e quindi utilizzare WOL per riaccendere gli altri sistemi dopo che è stata ripristinata l'alimentazione e la batteria ha raggiunto uno specifico livello di carica. L'autore ritiene che alcune configurazioni che usano halt o APM o ACPI non siano adatte su quel tipo di sistemi. Vedere Accendere e spegnere un sistema Debian.

Collegamenti esterni


CategoryNetwork | CategorySystemAdministration