Server mittels WOL starten
Um einen PC mittels W(ake)O(n)L(an) zu starten, muss die Netzwerkkarte diesen Modus beherrschen und entsprechend konfiguriert sein. Manche BIOSse bieten hierfür eine Konfigurationsmöglichkeit, ebenso kann dies auch auf der Kommandozeile mit ethtool geschehen.
Zunächst benötigt man den Namen des Netzwerkdevices, welches man u. a. wie folgt ermitteln kann:
# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 44:37:e6:87:87:98 brd ff:ff:ff:ff:ff:ff altname eno1 altname enp0s25
In diesem Beispiel wäre eth0 das Netzwerkdevice, welches im weiteren beispielhaft genutzt wird. Auf eisfair werden auch von udev vergebene Devicenamen nach dem Schema enx<mac> also z. B. enx1257a68bc79a benutzt.
Die aktuellen Einstellungen der Netzwerkkarte werden mittel ethtool ermittelt:
# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Auto-negotiation: on Port: Twisted Pair PHYAD: 1 Transceiver: internal MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: yes
Die Zeile Wake-on: g zeigt an, dass die Karte auf WakeOnLan über MagickPacket konfiguriert ist, was die übliche Vorgehensweise darstellt. Wäre WOL deaktiviert, würde dies durch Wake-on: d angezeigt.
Folgende Modi für die Wake-on-Option sind möglich:
wol p|u|m|b|a|g|s|f|d... Sets Wake-on-LAN options. Not all devices support this. The argument to this option is a string of characters specifying which options to enable. p Wake on PHY activity u Wake on unicast messages m Wake on multicast messages b Wake on broadcast messages a Wake on ARP g Wake on MagicPacket™ s Enable SecureOn™ password for MagicPacket™ f Wake on filter(s) d Disable (wake on nothing). This option clears all previous options.
Die gewünschte Wake-on-Option wird mit ethtool gesetzt, z. B.:
ethtool -s eth0 wol g
Wie ich selbst feststellen musste, gibt es Netzwerkkarten/Mainboards, die die Wake-on-Option nach jedem Boot wieder auf deaktviert zurücksetzen. Hier hilft dann eine Systemd-Unit, die einmalig nach dem Boot aktiv wird und den gewünschten Modus wieder herstellt. Hierzu legt man in /etc/systemd/system eine Datei z. B. mit dem Namen wol.service und folgendem Inhalt ab:
[Unit] Description=Configure Wake-up on LAN After=ip-eth.service [Service] Type=oneshot ExecStart=/usr/sbin/ethtool -s eth0 wol g [Install] WantedBy=basic.target
Nun gilt es noch diese Unit dauerhaft zu aktivieren:
# service daemon-reload # service enable wol # service start wol
Hat man mehrere Netzwerkkarten im Server, kann mit einer „Wildcard“-Unit gearbeitet werden. Diese erhalten am Ende des Unit-Namens ein „@“, also würde in unserem Beispiel wol@.service heißen. Im Unitfile wird anstelle der direkten Angabe des Netzwerkdevices der Platzhalter %i angegeben:
[Unit] Description=Configure Wake-up on LAN on %i After=ip-eth.service [Service] Type=oneshot ExecStart=/usr/sbin/ethtool -s %i wol g [Install] WantedBy=basic.target
Wenn nun eine solche Systemd-Unit genutzt werden soll, ist hinter dem @ das Netzwerkdevice anzugeben:
# service daemon-reload # service enable wol@eth0 # service start wol@eth0
Soll der Server über verschiedene Netzwerkkarten aufgeweckt werden können, wiederholt man die Unitaktivierung für eine weitere Netzwerkkarte, z. B.:
# service daemon-reload # service enable wol@eth1 # service start wol@eth1
Hinweis: Der Befehl service daemon-reload ist nicht notwendig, wenn vor jedem anderen service-Befehl service enable … ausgeführt wird.