Aus diversen Gründen habe ich meinen Homeserver-Pi wieder gegen einen PC getauscht: Den damit einhergehenden Mehrverbrauch an Strom minimiere ich durch recht rigide Strommaßnahmen, die ich mittels des Autosuspend-Daemons umsetze.
Das kleine Python-Programm schickt den PC nach einer definierbaren Zeit in den Ruhestand, überprüft aber vorab, ob eine Reihe von Ausschlussbedingungen erfüllt sind. Dazu können bestehende SSH- oder Samba-Verbindungen ebenso gehören wie eigene, selbstgeschrieben Tests. Außerdem setzt das Skript Wiederaufwach-Timer, die den PC entweder in Intervallen oder zu den Laufzeiten von Systemd-Timern aufwecken.
In meinem Setup schickt Autosuspend den PC nach 15 Minuten Untätigkeit in den S3-Sclaf und weckt ihn etwa zum Backup externe Dienste bzw. alle 5 Stunden wieder auf. Damit ich nicht immer ein Magic-Paket an den Rechner schicken muss, horcht die Ethernet-Schnittstelle des PCs auf eingehende Unicast-Pakete. Das funktioniert allerdings nur dann, wenn der anfragende Rechner die MAC-Adresse des PCs über einen dauerhaften Eintrag in seiner ARP-Tabelle bzw. NDP-Tabelle kennt.
Unter Linux lässt sich das temporär auf der Kommandozeile mittels des Befehls ip für IPv4 eintragen:
ip -i $Schnittstelle -s $Hostname $MAC-Adresse
Der Platzhalter $Schnittstelle steht dabei für die Netzwerkschnittstelle, über die der anzusprechende Rechner ($Hostname) mit seiner $MAC-Adresse zu erreichen ist. Mittels des Befehls
ip neighbour show
bekommt man übrigens sowohl die Einträge für IPv4 als auch IPv6 angezeigt:
Da diese Einträge beim nächsten Boot wieder verschwinden, sollte man diese Einträge beim Start des Netzwerks setzen - etwa mittels eines Dispatcher-Skripts des NetworkManagers. Diese Skripte liegen meist im Verzeichis /etc/NetworkManager/dispatcher.d. Ein Beispiel dafür sieht etwa so aus:
1 2 3 4 5 6 7 8 |
|
Das Skript verwendet hier die Option -f, über die sich eine Datei angeben lässt, die pro Zeile eine MAC-Adresse und den dazu gehörenden Hostnamen enthält. Das ist pflegeleichter und flexibler, wenn es gilt neue Einträge hinzuzufügen. Die Shell-Variable $1 enthält hier die gerade startende ($2) Netzwerkschnittstelle.