Dienstag, 7. April 2015

Computer mit FHEM an- und ausschalten

Wake On LAN mit FHEM

Kann ein Rechner im Netzwerk Wake on Lan so können wir ihn ganz einfach auch mit FHEM aufwecken. Wir brauchen die MAC Adresse und die IP Adresse des Rechners. Die IP Adresse wird von dem WOL Gerät in FHEM verwendet, um mit Ping zu prüfen, ob der Rechner im Netzwerk erreichbar ist. Entsprechend wird der Status auf on oder off gesetzt. Ich verwende in meinem Beispiel die UDP Methode. Für diese Methode muss nichts weiter installiert werden. In der Commandref  sind noch die Methoden mit den Tools ether-wake oder wakeonlan beschrieben, dafür müssen die entsprechenden Tools installiert werden.
define <Rechnername> WOL xx:xx:xx:xx:xx:xx 192.168.x.x UDP
Generell ist es sinnvoll zu konfigurieren, in welches Netzwerk das UDP Broadcast Packet versendet wird. Dazu muss die Broadcast Adresse konfiguriert werden. Dies geschieht mit dem entsprechendem  Attribut:
attr <Rechnername> useUdpBroadcast 192.168.x.255
Mit einem Druck auf on (oder set <Rechnername> on) sollte den Rechner aufwecken. Geschieht das nicht, ist der Rechner nicht richtig auf WOL konfiguriert. Man hat leider kein Feedback von der Weboberfläche, man "spürt" nicht ob man gedrückt hat oder nicht.
Sollte nach ca. 1 min der Status des eingeschalteten Rechners nicht auf on aktualisiert werden, ist zu prüfen ob der Rechner auf Ping reagiert, falls nicht muss eventuell noch die Windows Firewall konfiguriert werden (siehe weiter unten).


Um den Rechner auch ausschalten zu können, müssen wir ihn natürlich ordentlich herunterfahren. Für einen Windows Computer müssen wir folgende Vorarbeit leisten.

Benutzerverwaltung unter Windows

Um shutdown von der übrigen Verwaltung von Windows sauber zu trennen und mit maximaler Sicherheit für das System zu arbeiten, legen wir einen separaten Benutzer an.

Hinweis: Wer das alles kurz mit ein paar Zeilen Powershell Script machen will, sollte hier schauen.

Die Einrichtung neuer Benutzer ist auf jedem Windows System etwas anders zu finden, dass hängt leider nicht nur von der konkreten Version sondern auch persönlicher Konfiguration ab. Zumindest seit Windows 7 geht es einfach auf jedem deutschen System mit der Eingabe des Wortes "Benutzerkonten" im Suchfeld.
Generell führt uns die "Windows Taste" auf der Tastatur ins Suchfeld wenn wir uns auf dem Desktop befinden. Mit der Maus geht es so:
Windows 7 und Server 2008 - Startknopf ( -> Startmenü) und dann einfach tippen
Windows 8 und Server 2012 - Windows Knopf ( -> Kacheloberfläche) und dann einfach tippen


Wer sich manuell durch hangeln will, der muss das in etwa so tun:
Systemsteuerung --> Benutzerkonten --> Benutzerkonten verwalten
Leider ist das von Windows zu Windows Version immer wieder etwas verschieden.


Hier erstellen wir  ein neues Konto z.B. den "UserShutdown" als Standardbenutzer. Da wir später den Account im Klartext in der FHEM Konfiguration eintragen, bekommt dieser Benutzer nur minimale Rechte. Ich begnüge mich mit Standardbenutzer und einem zusätzlichem Recht. Man könnte ihm eventuell weitere Rechte entziehen.

Wir müssen ein sicheres Kennwort vergeben. Sichere Passwörter bestehen aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen. Sonderzeichen sollte man sorgsam verwenden, es gibt nicht alle in jeder Sprache.

Beispiel: P@ssw0rd


Dieser Benutzer braucht jetzt noch entsprechende Rechte. Dazu öffnen wir die lokale Sicherheitsrichtlinie. Das geht mit dem Begriff "secpol.msc" im Suchfeld (siehe oben). Bei Windows 8 ist das allerdings etwas umständlich, da wird die App nicht sofort sondern erst ganz links im Bing Fenster angezeigt. Alternativ kann man gpedit.msc eingeben und verwenden, die Sicherheitseinstellungen sind eine Untermenge von Gpedit.

Der Benutzer bekommt das Recht das System herunterzufahren. Weitere Rechte sind nicht notwendig.


Soll der am Windows Computer angemeldete Benutzer eine Nachricht bekommen, muss ein Dienst aktiviert werden. Dazu tippen wir einfach services.msc im Suchfeld ein (siehe oben). Der Dienst Remoteregistrierung wird auf automatisch gestellt und gestartet. Für die Remote Shutdown Funktion alleine ist es nicht notwendig.








Der Dienst Remoteregistrierung ist wohl auch für den Eintrag des Shutdowngrundes im Eventlog zuständig.
Will man den Remote Shutdown von einem Windows System einleiten, müssen eventuell noch folgende Dienste aktiviert sein:
- Windows-Remoteverwaltung
- Windows-Verwaltungsinstrumentation





Firewalleinstellung unter Windows

Wenn wir Firewallregeln ändern müssen, empfehle ich die direkte Methode über Windows Firewall: Wir tippen im Suchfeld (langsam sollte jeder wissen wie es geht) firewall ein und öffnen das Tool "Windows-Firewall mit erweiterter Sicherheit".

Hier klicken wir auf Eingehende Regeln, es kann etwas dauern bis die Regeln angezeigt werden.
Für die Überwachung muss Ping zulässig sein, dafür müssen wir die beiden Regeln "Datei- und Druckfreigabe (Echoanforderung -ICMPvx eingehend) aktivieren. Sicher reicht uns v4, aber ich habe beide aktiviert.

Beispiel: Windows Server 2012

Für den Shutdownbefehl von Linux muss offenbar die Standardeinstellung der Firewall nicht angepasst werden, falls wenigstens Datei und Druckfreigabe aktiviert ist. Ansonsten je nach Windows Version überprüfen, dass SMB eingehend (Port 445) aktiviert ist. Für den Shutdown Befehl von einem Windows System muss unter Umständen mehr aktiviert werden:
Technet Artikel
Mit Powershell cmdlet Stop-Computer funktioniert es bei mir auch ohne.



Windows Shutdown mit FHEM

Das hier gezeigte Beispiel geht von FHEM auf einem Linux System aus.

Voraussetzung für den "net" Befehl unter Linux ist das Packet samba-common-bin. Ist bisher kein Samba installiert, muss jetzt zumindest dieses Packet installiert werden:

sudo apt-get install samba-common-bin
Wenn Windows ein remote shutdown zulässt, können wir mit dem Attribute shutdownCmd den Befehl eintragen. Ein Druck auf off lässt dann den PC innerhalb einer Minute herunterfahren.
attr <Rechnername> shutdownCmd "net rpc shutdown -I <Rechnername> -U UserShutdown%P@ssw0rd"


Man kann mit dem attr interval noch das Interval für die Ping Überprüfung konfigurieren. Als Standard ist die Ping Überprüfung aus und man kann mit set <Rechnername> refresh den Zustand aktualisieren.


Ein Linux System remote herunterfahren


Der shutdown Befehl für ein Linux System lässt sich am einfachsten per ssh realisieren. Das habe ich in dem Artikel beschrieben:
Per ssh Remote Befehle direkt ausführen

Die Sache mit der Broadcast Adresse

Bei Geräten mit mehreren Netzwerkanschlüssen ist es möglich, dass das Magic Packet ins falsche Netzwerk gesendet wird und damit beim Empfänger gar nicht ankommt. Mit dem Route Befehl kann man sich anschauen, was passieren würde:
IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
          0.0.0.0          0.0.0.0    192.168.178.1   192.168.178.54     25
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    331
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    331
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
   172.28.130.240  255.255.255.240   Auf Verbindung    172.28.130.241    271
   172.28.130.241  255.255.255.255   Auf Verbindung    172.28.130.241    271
   172.28.130.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
    192.168.178.0    255.255.255.0   Auf Verbindung    192.168.178.54    281
   192.168.178.54  255.255.255.255   Auf Verbindung    192.168.178.54    281
  192.168.178.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    331
        224.0.0.0        240.0.0.0   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung    172.28.130.241    271
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
  255.255.255.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
  255.255.255.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
===========================================================================
Ein Packet für das Netzwerk 192.168.178.x an die Broadcast Adresse 255.255.255.255 versendet würde hier im falschen Subnetz landen. Das Packet muss also an die richtige Broadcast Adresse 192.168.178.255 versendet werden. Die Tools arbeiten da unterschiedlich, blöd ist wenn man die Broadcast Adresse nicht angeben kann.

16 Kommentare:

  1. Danke für die Beschreibung, klappt einwandfrei.

    AntwortenLöschen
  2. Hi Otto, Danke für die Anleitung, funktioniert super!
    bekomme aber folgendes im Log beim Shutdown:
    2017.09.21 17:19:54 3: [DEVICE] shutdownCmd: "net rpc shutdown -I SERVERNAME -U Benutzer%Password" executed
    mkdir failed on directory /var/run/samba/msg.lock: Permission denied

    Shutdown of remote machine succeeded

    ne Idee wie ich das loswerde?

    AntwortenLöschen
  3. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  4. Hi Otto,

    hast du ne Idee wo FHEM oder dessen Hardware (Raspberry) die IP bezogen auf den shutdown Befehl speichert? Ich hab den Befehl schon ne Weile erfolgreich im Einsatz, nun aber fürs ganze Netzwerk einen neuen IP Bereich vergeben. im WOL ist die neue IP definiert, trotzdem will er über die alte IP runterfahren, was natürlich nicht mehr klappt.

    AntwortenLöschen
    Antworten
    1. Hallo Achim, wie hast Du den shutdown Befehl denn definiert? Mit Name oder IP? Wenn IP musst Du die natürlich tauschen, wenn Name dann ist noch irgendeine Namensauflösung aktiv. DNS Server zentral oder Hosts Datei auf dem Pi.
      Gruß Otto

      Löschen
  5. Hi Otto,

    bisher mit dem Namen hab nun auf die IP gewechselt. Zentral hat alles gepasst, die Hosts Datei muss ich mir Mal anschauen ;-) danke dir

    AntwortenLöschen
    Antworten
    1. Hi, Du musst bedenken die Namensauflösung vom Pi aus zu testen, also im Terminal. Der löst den Namen offenbar falsch auf. Kann ich aber nur mutmaßen.
      Gruß Otto

      Löschen
  6. Hi Otto,

    seit ein paar Tagen (FHEM Update vom Dienstag?? Windows Patchday) geht des remote herunterfahren nicht mehr. Führe ich den Befehl direkt in der Konsole mit --debuglevel=10 erhalte ich unter anderem:
    Connecting to 192.168.222.26 at port 445
    Connecting to 192.168.222.26 at port 139
    Connecting to 192.168.222.26 at port 139
    Could not connect to server 192.168.222.26
    Connection failed: NT_STATUS_IO_TIMEOUT

    ping auf 192.168.222.26 geht in der Konsole ohne Probleme.
    Hast du ne Idee wo ich mit der Fehlersuche beginnen könnte?

    Grüße aus DD

    Achim

    AntwortenLöschen
    Antworten
    1. Das sind alles Ports für SMB / Datei und Druck. Meine Vermutung: die Firewallregeln pass nicht mehr. Hatte ich ab und zu nach Updates oder anderen "Bewegungen am System" - meist war dann das Netzwerk neu erkannt worden. Damit war das neue Netzwerk Kategorie öffentlich und nicht privat. Suche nach Netzwerkstatus in den Einstellungen.

      Gruß Otto

      Löschen
    2. Hmm, leider ist es das wohl nicht, oder nicht nur. Mit Firewall: Could not connect to server 192.168.222.26
      Connection failed: NT_STATUS_IO_TIMEOUT
      und mit abgeschalteter Firewall:
      Could not connect to server 192.168.222.26
      Connection failed: NT_STATUS_CONNECTION_REFUSED

      Löschen
    3. Naja das erste klingt nach Firewall, das zweite nach fehlenden Rechten am Windows Rechner. Da Windows 10 mittlerweile ssh kann: Umstellen auf ssh? Damit einheitliches Interface mit anderen Linux Systemen?
      Gruß Otto

      Löschen
  7. An SSH hab ich mich gestern auch kurz versucht, dann aber erstmal verworfen, da ich es auf Anhieb nicht geschafft hab mit Windows-SSH-Bordmitteln ein RSA-Key Zugang einzurichten :-)
    Gerade teste ich mit Telnet, Port 139 ist offen aber 445 nicht. Immerhin schonmal etwas Besserung.
    SSH wäre aber eine Lösung für die Zukunft

    AntwortenLöschen
    Antworten
    1. Auch nicht mit meinem schönen Artikel? ;)
      https://heinz-otto.blogspot.com/2019/05/windows-von-fhem-aus-steuern.html

      Löschen
    2. Na den hatte ich vorhin entdeckt, nur musste ich dann los. Das geh ich jetzt gleich nochmal mit nem neuen Windows Nutzer usw frisch an mal sehen wann und wo es dann hängt :-)

      Löschen
  8. Kurze Info: Die Anleitung klappt auch heute noch mit Win 11 und Debian bullseye - Super gemacht und vielen Dank!

    AntwortenLöschen