shepherd81
Goto Top

Wake on Lan über VPN?

Hallo,

gibt es generell etwas zu beachten wie man ein wake on lan einrichtet?
Also ich denke mal im BIOS muss das eingestellt sein und der PC muss es unterstüzen.
Die Sache ist die, wir wollen alle PCs per script am Abend ausschalten.
Gewisse Leute müssen sich aber per VPN vom Home Office auf ihre Rechner im Office in der früh verbinden können.
Diese können sie natürlich nicht manuel einschalten und wir wissen nicht wann wer wie wo drauf muss/will.
Also ein "alle wake" in der früh würds nicht bringen.
Das weckt nur alle auf die garnicht geweckt werden müssen.
Die Sache ist die, was wenn ein PC in den sleep modus geht.
Wie weckt man so einen PC auf wenn er im hybernate oder sleep ist über VPN!?

Welcher Wake-Up befehl ist der sauberste?

Content-Key: 3995454164

Url: https://administrator.de/contentid/3995454164

Printed on: May 6, 2024 at 05:05 o'clock

Mitglied: 3063370895
3063370895 Sep 20, 2022 updated at 08:08:16 (UTC)
Goto Top
Wir haben das so gelöst:
um 20:00 läuft ein Skript, welches prüft welche Rechner an sind, speichert dies in einer CSV-Datei und fährt dann alle Rechner runter.
Morgens um 6 läuft wieder ein Skript, welches alle Rechner, die in der CSV-Datei stehen per WoL wieder hochfährt.
Die Mac-Adressen bekommt dieses Skript aus einer CSV, die von Lansweeper täglich exportiert wird.

WakeOnLan Powershellmodul

Zusätzlich haben wir eine Webseite, die per Powershell erstellt wird, auf der alle PCs mit Onlinestatus gelistet werden und von der man die PCs auch per WoL starten kann (Dahinter steckt ein hässliches Konglomerat aus Powershell, JS und Python)
Mitglied: 3803037559
3803037559 Sep 20, 2022 updated at 08:10:26 (UTC)
Goto Top
Wir haben ein eigenes Web-Portal dafür in dem die User ihre zugewiesenen Maschinen nach SSO-Anmeldung per Button bei Bedarf wieder aufwecken können.
Damit die Maschinen aufgeweckt werden können müssen diese natürlich das Aufwecken in den entsprechenden States auch unterstützen S4/S5.

Cheers
certguy.
Member: Shepherd81
Shepherd81 Sep 20, 2022 updated at 08:46:06 (UTC)
Goto Top
Beide Lösungen klingen gut.

Leider können wir nicht alle Rechner einfach so runterfahren. Viele haben manchmal jobs laufen oder noch geöffnete Dateien.
Deshalb würden wir lieber die Geräte in den Sleep Modus schicken wo Windows die geöffneten Sachen noch abspeichert.
Zudem wollen wir vermeiden dass wir etwas über UDP broadcasten. Schon gar nicht wenn jemand üver VPN verbunden ist.

@cerguy: Welches Programm oder wie genau hast du das implementiert damit du die Maschinen per Button wieder aufwecken kannst?
Mitglied: 3803037559
3803037559 Sep 20, 2022, updated at Sep 23, 2022 at 12:17:09 (UTC)
Goto Top
Geht alles per plain PHP und fsockopen um das Magic packet zu schicken. Das Frontend schickt die MAC dann an das PHP-Backend und das löst das Magic Packet aus.

Einfaches reduziertes Beispiel (hier ohne Filter wer welchen Rechner wecken darf)
<?php
function wakeUp($macHex, $broadcastAddress, $port = 9){
	$sock = null;
	try{
		$macHex = preg_replace('/:/','',$macHex);  
		// check if mac is valid
		if (!ctype_xdigit($macHex)) {
			throw new Exception('Mac address invalid, only 0-9 and a-f are allowed');  
		}
		$macBinary = pack('H12', $macHex);  
		$magicPacket = str_repeat(chr(0xff), 6).str_repeat($macBinary, 16);
		$sock = socket_create(AF_INET,SOCK_DGRAM, SOL_UDP);
		socket_set_option($sock,1,6,True);
		if (socket_sendto($sock,$magicPacket, strlen($magicPacket),0,$broadcastAddress,$port) === false){
			$ecode = socket_last_error($sock);
			throw new Exception("Error sending magic packet, Error: [$ecode] - " . socket_strerror($ecode));  
		}
	} finally {
		if ($sock != null){
			socket_close($sock);
		}
	}
}
$MAC = isset($_POST['MAC']) ? $_POST['MAC'] : '';  
if ($MAC !== ''){  
	try{
		wakeUp($MAC,"192.168.1.255");  
		echo "Magic packet sent for MAC: $MAC.";  
	}catch (Exception $ex){
		echo "Error: " . $ex->getMessage();  
	}
}else{
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>WOL</title>
</head>
<body>
<form method="post">  
	<p>
	    <button name="MAC" type="submit" value="00:11:22:33:44:55">Wecke Rechner A</button>  
    </p>
    <p>
	    <button name="MAC" type="submit" value="99:88:77:66:55:44">Wecke Rechner B</button>  
    </p>
</form>
</body>
</html>
<?php } ?>
Member: aqui
aqui Sep 21, 2022, updated at Sep 23, 2022 at 10:54:50 (UTC)
Goto Top
Das Thema hatten wir doch neulich erst...
Wake On LAN Probleme im Firmenumfeld mit MAC Authentifizierung
Zum Thema routebares WoL ist hier alles beschrieben:
https://www.heise.de/ct/artikel/Wake-on-WAN-221718.html

@3803037559
Das PHP Script oben erzeugt übrigens einen "Permission denied" Socket Error. Siehe dazu auch hier.
Besser, weil konfigurierbar, ist das Teil hier und funktioniert auf Anhieb:
https://github.com/AndiSHFR/wake-on-lan.php
Member: DerMaddin
DerMaddin Sep 21, 2022 at 12:50:38 (UTC)
Goto Top
Diese Praxis mit VPN von Zuhause aus und dann RDP auf den Büro-PC ist leider auch bei uns sehr verbreitet. In 99% aller Fälle besteht aber keine Notwendigkeit für einen im Büro laufenden Computer, da nur Office-Apps und Fileserver-Zugriff erfolgt. Meist ist es weil "ich habe alle meine Dateien und Verknüpfungen auf dem Desktop habe".

Wenn der Anwender dann durch "Zufall" statt auf Abmelden auf Herunterfahren klickt, ist dann wieder das Geschreie groß, dass er seinen Büro-Computer nicht erreichen kann.

Wir werden diese "Zwei-Rechner-Kultur" sukzessive abschaffen und nur noch Laptops ausgeben. Für ganz spezielle Fälle haben wir VMs auf dem ESXi-Cluster laufen und ein RDP-Pool für ERP.
Member: aqui
aqui Sep 23, 2022 at 10:56:23 (UTC)
Goto Top
Wenn's das denn nun war bitte nicht vergessen deinen Thread dann auch als erledigt zu markieren!
Mitglied: 3803037559
3803037559 Sep 23, 2022 at 11:01:31 (UTC)
Goto Top
Zitat von @aqui:
@3803037559
Das PHP Script oben erzeugt übrigens einen "Permission denied" Socket Error.
Nö, hier nicht, indem Fall hat dein PHP Prozess zu wenig Rechte.
Member: aqui
aqui Sep 23, 2022 updated at 11:26:18 (UTC)
Goto Top
Mmmhhh... Muss ich mal auf einem anderen Rechner checken. Mit Nginx und PHP7.4 und Owner www-data:www-data schmeisst er den Error. Selinux worauf immer verwiesen wird ist aus. (Latest Raspberry OS)
Das o.a. alternative PHP Script rennt fehlerlos und tcpdump zeigt die UDP 9 Broadcasts auch an.
Member: Shepherd81
Shepherd81 Sep 27, 2022 updated at 08:05:21 (UTC)
Goto Top
Welchen groben Unterschied sollte man beachten bei den 3 verschiedenen Stufen: Sleep, Standybe, Hybernate.
Welche Form würde man am ehesten verwenden damit User noch immer ihre geöffneteten Programme NICHT schließen müssen (Arbeiten sollen gespeichert werden) und mit einem Skript den Rechner wieder aufwecken können.


Wer hier ürbigens paar Troubleshooting Tips braucht hier eine gute Übersicht:
https://thegeekpage.com/wake-on-lan-not-working/


Weitere Frage: Welche Art des Wake-Up ist die sauberste und welche habe ich vergessen aufzulisten?
-wakeup *mac-adresse* in command Zeile
- PHP Befehl
-Reaktivieren in der SCCM console (keine Ahnung welcher Befehl da abgesetzt wird)
Member: aqui
aqui Sep 27, 2022, updated at Sep 28, 2022 at 07:46:57 (UTC)
Goto Top
und welche habe ich vergessen aufzulisten?
Aus reiner Netzwerksicht gibt es doch nur 2 Arten!! Einmal die auf einem reinen Layer 2 Frame via Mac Adresse (nicht routebar). Und einmal die mit einem IP Header. (meist UDP 9 (Discard) und routebar mit UDP Forwarder)
Ob du diese Pakete mit PHP, SCCM oder wie auch immer erzeugst ist für die WoL Funktion an sich doch völlig irrelevant.
Vielleicht solltest du statt rumraten einmal einen Wireshark zur Hand nehmen der dir dann sofort die Augen öffnet!!
Mac:
wol.
UDP:
wol2.
Du kannst die beiden unterschiedlichen Versionen kinderleicht und schnell einmal generieren und auf dein Ziel loslassen.
  • Krame deinen Raspberry Pi aus der Bastelschublade und installiere die beiden Tools etherwake und wakeonlan (apt install ...)
  • etherwake -b -i eth0 01:02:03:04:05:06 sendet ein nacktes Layer 2 WoL Paket im AMD Magic Packet Format.
  • wakeonlan 01:02:03:04:05:06 sendet es mit einem UDP Port 9 Header und all Network Broadcast
  • wakeonlan -i 192.168.178.255 01:02:03:04:05:06 sendet es mit einem spezifischen IP Netzwerk Broadcast im 192.168.178.0/24 Segment.
So kannst du alle Varianten genau durchtesten was das Ziel haben will.
Mit letzterer Option, dem Netzwerk spezifischen Boradcast, sogar mit Test ob es über Routergrenzen mit einem UDP Helper geforwardet wird. 😉
Member: Shepherd81
Shepherd81 Oct 13, 2022 at 08:32:06 (UTC)
Goto Top
Blöde Frage,
habe dieses Github Script über PHP zum laufe bekommen.
Eine weitere Anforderung wäre es jetzt, dass es alle Rechner in allen Sub-Netzen aufwecken kann.
Zur Zeit tut es das nicht.
Die Alternative Lösung über SCCM kann das momentan.
Ich weiß noch nicht ob es einfach am Port-Forwarding liegt bzw ob es an der FW geblockt wird oder es eine Einstellungssache ist.
Habe einem Rechner zwei IP Adressen gegeben. Nur über eine die im selben Subnetz ist, kann er ihn aufwecken.
Member: aqui
aqui Oct 13, 2022 updated at 10:22:13 (UTC)
Goto Top
Ich weiß noch nicht ob es einfach am Port-Forwarding liegt bzw ob es an der FW geblockt wird
Das solltest du aber wissen, denn das ist zwingende Voraussetzung das es über Routergrenzen funktioniert!
  • Du benötigst dafür einen UDP Helper auf dem Router Port für Port UDP 9 (discard)
  • Im Regelwerk einer Firewall müssen diese Pakete dann passieren dürfen
Wireshark ist dein bester Freund. Mach einen Sniffertrace vom SCCM und dem PHP Tool dann weisst du doch sofort was Sache ist! face-wink