Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Dienstag
07
November 2017

Wake on Lan

Habe neulich mal nach einer Möglichkeit gesucht meinen PC auf der Arbeit von zu Hause aus über VPN einschalten zu können. Aus jungen Jahren war mir noch bekannt dass man PCs auch übers Netzwerk mittels WoL (Wake on LAN) einschalten kann.

Eines vorweg, über einen VPN Tunnel kann man einen PC nicht direkt einschalten, da man ein Paket an eine MAC Adresse anstatt an eine IP-Adresse schicken muss. Das VPN liegt also schon ein paar Schichten zu weit oben.

Um einen PC per VPN aufwecken zu können benötigt man also einen Rechner der im selben Netz hängt wie der zu startende Rechner. Hat man keinen Server im Netz kann man sich auch mit einem Raspberry Pi behelfen. Dieser benötigt nicht so viel Strom.

WoL am Raspberry

Nur so am Rande bemerkt: Einen Raspberry Pi kann man nicht per WoL aufwecken, da dessen Netzwerkkarte am USB Bus hängt und im ausgeschaltetem Zustand nicht mit Strom versorgt wird.

Etwas Hintergrundwissen

Von früher konnte ich mich noch erinnern dass Netzwerkkarten die WoL konnten immer ein 3-adriges Kabel beiliegen hatten, welches man mit dem Mainboard verbinden musste. Bei meiner Recherche habe ich herausgefunden dass dieses Kabel nur bis zum PCI-Standard 2.1 Verwendung findet. Modernere Mainboards mit einem PCI-Standard ab 2.2 benötigen diese Verbindung nicht mehr. Stattdessen wird ein PME (Power Management Event) verwendet.

Damit eine Netzwerkkarte auf die PME Events reagiert müssen zum einen die Events im Bios erlaubt sein und das gewünschte Verhalten in der Netzwerkkarte aktiviert werden. In meinem Bios musste ich nichts einstellen da die PME Events standardmäßig bereits aktiviert waren. Früher musste man das WoL mit dem 3-adrigen Kabel noch explizit einschalten.

WoL aktivieren

Um den Devicenamen der Netzwerkkarte herauszubekommen benutzt man den Befehl ifconfig. Meisstens ist das eth0, auf neueren Ubuntu Systemen kann das Device aber auch ganz anders heißen.

Bash
ifconfig

Hat man seine Netzwerkkarte gefunden kann man jetzt dessen Status abfragen.

Bash
$ sudo ethtool eth0
Settings for eth0:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Full
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: MII
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: d
	Current message level: 0x00000033 (51)
			       drv probe ifdown ifup
	Link detected: yes

Unter Supports Wake-on steht eine Liste unterstützter Modi. Diese bedeuten im Einzelnen:

Kürzel Erklärung
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(tm)
s Enable SecureOn(tm) password for MagicPacket(tm)
d Disable (wake on nothing). This option clears all previous options.

Unter Wake-on steht der aktuell eingstellte Modus.

Soll der PC nun z.B. mit einem MagicPacket aufgeweckt werden so muss man den entsprechenden Modus für die Netzwerkkarte aktivieren:

sudo ethtool -s enp3s0 wol g

Möchte man WoL wieder deaktivieren macht man das mit:

sudo ethtool -s eth0 wol d

PC aufwecken

Um den PC aufzuwecken, kann man jetzt z.B. das Tool wakeonlan verwenden. Dieses installiert man unter einem debian-basierten Linux mit:

Bash
sudo apt-get install wakeonlan

Den PC weckt man dann auf mit:

Bash
wakeonlan XX:XX:XX:XX:XX:XX

Wobei XX:XX:XX:XX:XX:XX für die Mac-Adresse der Netzwerkkarte steht. Diese bekommt man auch mittels ifconfig heraus.

Problembehebung - WOL wird ständig deaktiviert

Seltsamerweise deaktiviert sich bei meinem Rechner ständig das Wake On Lan Feature. Deshalb aktiviere ich ihn jetzt jedesmal automatisch wenn der Rechner gestartet wird. Dies erfolgt durch ein systemd script.

Man legt die Datei /etc/systemd/system/wol@.service an. Das @ gehört zum Dateinamen, also nicht löschen, und fügt dann folgenden Inhalt ein:

systemd
[Unit]
Description=Enable wake on lan for interface %i
Requires=network.target
After=network.target

[Service]
ExecStart=/sbin/ethtool -s %i wol g
Type=oneshot

[Install]
WantedBy=multi-user.target

Als nächstes sucht man sich mit ifconfig sein Netzwerk-Device raus und fügt den systemd-Job so hinzu:

Bash
sudo systemctl enable wol@eth0

Um zu prüfen ob der Service erfolgreich ausgeführt wurde kann man folgenden Befehl ausführen:

Bash
systemctl is-enabled wol@eth0

Nach einem Reboot kann man mit dem ethtool wieder prüfen ob Wake on Lan jetzt aktiv ist. Zur Erinnerung es muss so etwas herauskommen:

Wake-on: g