Wake-on-LAN (WOL) unter Linux


Andreas Brück, Brück-Computer-Löhlbach
andreas [at] brueck-computer [punkt] de

Version 0.1: 19.04.2006
Version 0.2: 18.05.2006 Korrektur durch Elfi Brück


Inhaltsverzeichnis

1. Eine kurze Einführung
2. Vorausetzungen
3. Aktivieren von WOL
4. PC von der Ferne aus starten
5. Weiterführende Themen und Links

1. Eine kurze Einführung

Aus der Praxis: Man hat eine Firewall und läßt SSH an einen immer angeschalteten PC durch. Jetzt sitzt man irgendwo in der Welt, loggt sich zuhause ein und sucht verzweifelt eine wichtige, dringend benötigte Datei und stellt schnell fest -> die befindet sich noch auf meinem Arbeitsplatzrechner, der aber ausgeschaltet ist. OK. Schnell im Büro anrufen und jemanden bitten, die Kiste anzuschalten. Leider geht aber niemand ans Telefon... um 03:45 Uhr nachts ist das auch sehr unwahrscheinlich... Ach könnte ich nur den PC über das Netzwerk anschalten....

Bei Wake-On-LAN, kurz WoL, handelt es sich um ein 1995 von AMD in Zusammenarbeit mit HP veröffentlichter Standard um PCs über das Netzwerk anzuschalten. Damit man WoL nutzen kann, müssen das Mainboard und die Netzwerkkarte ACPI unterstützen, was alle neueren Computer (> 3 Jahre) mittlerweile ohne Probleme tun dürften.

2. Vorausetzungen

Folgende Softwarevorausetzungen müssen erfüllt sein:
Folgende Hardwarevorausetzungen müssen erfüllt sein:

3. Aktivieren von WOL

Nachdem man WOL im BIOS aktiviert hat, müssen wir am Linux noch was schrauben. Leider deaktivieren viele Netzwerkkarten-Treiber die WOL-Funktion nach dem Starten des Interfaces. Um diese nun wieder zu aktivieren, benutzen wir das Tool "ethtool", welches wir mit folgendem Befehl installieren können (unter Debian):

apt-get install ethtool

Anschließend können wir uns mit diesem Befehl anschauen, welche möglichen WOL-Funktionen unsere Netzwerkkarte (in diesem Beispiel eth0) unterstützt:

debian:/# ethtool eth0
Settings for eth0:
Supported ports: [ MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Current message level: 0x000000ff (255)
Link detected: yes
debian:/#

Die entscheidenden Einträge habe ich in der Beispielausgabe fett markiert. Der Eintrag "Supports Wake-on" gibt mir an, dass meine Karte den WOL-Modus "g" unterstützt, welcher für "MagicPacket(tm)" steht. Bei den meisten Karten wird dieser Modus anzutreffen sein. Desweiteren sagt mir der Eintrag "Wake-on" das WOL deaktiviert ist ("d").

Hier mal eine Aufstellung aller möglichen Werte:

p Wake on physikalischer Aktivität
u Wake on Unicast-Nachricht
m Wake on Multicast-Nachricht
b Wake on Broadcast-Nachricht
a Wake on ARP
g Wake on MagicPacket(tm)
s Aktivere SecureOn(tm) Passwort frür MagicPacket(tm)
d Deaktiviert (wake on nichts). Diese Option löscht alle vorherigen Optionen

Um nun unsere Netzwerkkarte auf "Wake on MagicPacket(tm)" geben wir folgenden Befehl ein:

ethtool -s eth0 wol g

Leider müssen wir das nach jedem Neustart wieder machen. Um diesen nun nach jedem Neustart automatisch auszuführen, gibt es mehrere Möglichkeiten. Ich habe mich für ein Startscript in /etc/init.d/ entschieden, welches ich im entsprechenden Runlevel (in meinem Fall 2; Infos siehe hier) automatisch mitstarte. Hier das Script "/etc/init.d/aktiviere_wol":

#! /bin/sh
test -f /usr/sbin/ethtool || exit 0

. /lib/lsb/init-functions

log_begin_msg "Aktiviere Wake-On-LAN auf eth0..."
ethtool -s eth0 wol g
log_end_msg $?

Dieses Script ist für Debian, evtl. muß es für andere Distributionen angepasst werden.

Anschließend müssen wir das Script nur noch ausführbar machen und im entsprechenden Runlevel-Verzeichnis (in meinem Fall "/etc/rc2.d" ) einen entsprechenden Link erzeugen:

chmod +x /etc/init.d/aktiviere_wol
cd /etc/rc2.d
ln -s ../init.d/aktiviere_wol S98aktiviere_wol

Wenn wir jetzt unseren PC neu starten wird dieses Script automatisch ausgeführt. 

4. PC von Ferne aus starten

Um einen PC von der Ferne aus zu starten, benötigt man unter Linux das Tool "wakeonlan", welches wir mit folgendem PC unter Debian schnell nachinstallieren können:

apt-get install wakeonlan

Dieses Tool (geschrieben in Perl) sendet MagicPackets(tm) an eine IP (nur bei statischen ARP-Tabellen) oder einer Hardware-Adresse (MAC). Um nun unseren PC zu starten, brauchen wir nur folgenden Befehl einzugeben:

wakeonlan 00:13:77:03:E4:84

Natürlich müßt Ihr für Euren anzuschaltenden PC die richtige MAC eingeben. Wenn Ihr diese nicht wißt, hilft Euch "ifconfig" weiter.

"wakeonlan" hat noch eine Menge weiterer Parameter, die ausführlich in der Man-Page geschrieben wird.

5. Weiterführende Themen und Links