[Geloest] WOL via FHEM mit Docker

Begonnen von Hackstall, 12 November 2020, 21:02:56

Vorheriges Thema - Nächstes Thema

kadettilac89

was willst du verstehen, woran scheitert es? Der Blog von Otto ist sehr ausführlich. Kann dir irgendwie nicht folgen ...

Hackstall

Ich wierde gerne wissen was meine host ip ist aus Sicht des Containers ist oder wo diese steht.

kadettilac89

Zitat von: Hackstall am 14 November 2020, 11:16:41
Ich wierde gerne wissen was meine host ip ist aus Sicht des Containers ist oder wo diese steht.

OK, wenn du das default Image nutzt dann solltest du die Einträge in der hosts Datei haben. IP des Hosts ist bei mir 172.18.0.1, bei dir dürte es 172.17.0.1 sein dem 3. Post nach. Ich empfehle dir den Alias host.docker.internal oder gateway.docker.internal zu nutzen. Wenn du Netzwerk was änderst kann die IP auch anders gesetzt werden, der Alias müsste aber immer gleich bleiben.

Beispiel meiner Hosts-Datei

root@12d93a948873:/opt/fhem# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2      12d93a948873
172.18.0.1      gateway.docker.internal
172.18.0.1      host.docker.internal


Anzeigen kannst du diese mit


cat /etc/hosts


Wenn wider Erwarten hier bei dir nichts drin steht dann teste mal 172.17.0.1

Hackstall

Danke hat geholfen.

So ich habe so glaube ich nun die Vorraussetzungen geschaffen.
Ich kann mittels ssh auf meinen host zugreifen und das ohne PASSWORT einzugeben.

Wie geht es denn jetzt weiter:

Meine Device sieht nun wie folgt aus:


define KG.WzK.PC_AK WOL 74:D4:35:08:2C:75 192.168.0.45 CMD
setuuid KG.WzK.PC_AK 5fafda34-f33f-7267-a80a-03afa4d030421ca0
attr KG.WzK.PC_AK room Keller
attr KG.WzK.PC_AK sshHost pi@172.27.0.1


also mein PC der per WOL eingeschaltet wird liegt auf 192.168.0.45 mit MAC 74:D4:35:08:2C:75

Danke Andreas

kadettilac89

wenn du alles richtig eingerichtet hast muss das hier funktionieren. Die Platzhalter in <> mit deinen Werten ersetzen

su fhem <----- ich ggf. durch den User mit dem fhem läuft ersetzen

ssh <servername> -p <port> -l <username> -t "<remote-command>
Beispiel ssh host.docker.internal -p 22 -l pi -t "sudo etherwake 74:D4:35:08:2C:75"

Das müsste dann deinen PC wecken.

Fehler: etherwake not found --> sudo apt-get install etherwake
Fehler: Passwort wird abgefragt: ssh Konfig passt noch nicht ganz
Fehler: Passwort wird abgefragt: etherwake muss noch in die SUDO Konfiguration

Wenn das soweit ohne Fehler durchläuft und WOL funktioniert kannst das in FHEM einrichten


defmod WOL_PC <MAC deines PC> <IP deines PC> CMD
attr WOL_PC devStateIcon off:message_presence_disabled on:message_presence     ---- optional, Symbole statt Text
attr WOL_PC icon it_pc
attr WOL_PC interval 60
attr WOL_PC sshHost <user auf dem host>@<Hostname / IP des Host> -p 22
attr WOL_PC wolCmd sudo etherwake $MAC     ---- $MAC muss so bleiben, das nimmt das Modul aus der Definition


Hackstall

Hallo,

alles gut. Es funktioniert.
Vielen Dank,

Gruss Andreas

kadettilac89

noch ein abschließender Tipp, mach nur den etherwake Befehl in SUDO-Config rein. Sei da vorsichtig.

Es gibt mehrere Personen die hier ganz großzügig All:all mit * konfiguriert haben. Alles was du ohne Passwort erlaubst könnte im Falle eines Hackangriffs ausgenutzt werden.

Wernieman

Oder um es kurz zu machen: Dann sind alle Sicherheitsmechanismen ausgehebelt und man könnte gleich alles unter root laufen lassen ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

Moin,

da ich hier etwas mit Stirnrunzeln mitgelesen habe - ich mag das "dünne Brett: sudo für alle" nicht besonders, weil es dann meist die "Lösung" für alle Probleme sein soll.
Da ich unter Windows einen fast "Einzeiler" habe, um aus Powershell heraus WOL - ohne erhöhte Rechte - zu machen, habe ich nach etwas vergleichbaren unter Linux gesucht. Ich habe zwar einen Einzeiler mit netcat gefunden, aber offenbar kursieren von nc unterschiedliche Versionen oder ich bin zu doof dafür.
Aber in FHEM lieben wie ja Perl :) da gibt es ein - im Internet viel zitiertes - Script von José Pedro Oliveira.
Das geht dann ganz ohne erhöhte Rechte (die braucht man für die UDP Methode von WOL nicht)

In diesem Thread: auf dem Host (als user)
wget -qO wakeonlan https://raw.githubusercontent.com/jpoliv/wakeonlan/master/wakeonlan
chmod +x wakeonlan

Dann testen im Container
ssh user@host ./wakeonlan 11:22:33:AA:BB:CC
Dann weiter wie beschrieben :)
Für die stille Ausführung gibt es den Parameter -q.

Im Übrigen geht Wake On Lan sehr wohl über Router hinweg, zumindest wenn der Router "nicht speziell" konfiguriert ist. Es gibt den "directed broadcast" - der wird vom Router an das entsprechende Subnetz weitergeleitet. Die typischen Heimnetz Router konnten das in meiner Umgebung bisher immer.
Nur der Broadcast an alle (255.255.255.255) wird vom Router geblockt und bleibt damit nur im eigenen Subnetz wirksam.
Beispiel -> ins Netzwerksegment 192.168.11.0 senden:
./wakeonlan -q -i 192.168.11.255 11:22:33:AA:BB:CC
Diese Methode ist ja auch im WOL Modul implementiert (attr useUdpBroadcast)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Jep .. bei ANgabe von der Broadcast-Adresse hast Du Recht. Nur welche "Normaluser" macht das schon ... ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

ich habe mal noch eine Perl /Shell Sub für die 99_myUtils gemacht womit man über einen Remotehost (oder den Dockerhost) per ssh WOL machen kann - ohne erhöhte Rechte, ohne jegliche Installation. Nur ssh mit public key einrichten :)
sub wol
{
my ($ziel,$mac,$bc,$port) = @_;
my $usage = 'use: wol \'user@host\',\'aa:bb:cc:11:22:33\'';
if (!defined $ziel or $ziel eq ''){return $usage}
if (!defined $mac or $mac eq '')  {return $usage}
if (!defined $bc)   {$bc  ='255.255.255.255'}
if (!defined $port) {$port='9'}

my $script = <<"EOF";
MAC=$mac
Broadcast=$bc
PortNumber=$port
EOF

$script .= <<'EOF';
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber
EOF

system('ssh',$ziel,$script);
}


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

SonOfAbaddon

#26
Hallo,

ich wollte das alte The noch einmal aufgreifen.

Bei mir läuft FHEM auch im container. das WOL-Modul ist aber nicht einsichtig, was meine ssh-Konfiguration anbelangt.

Ein "ssh USERUSER@host.docker.internal wakeonlan FF:F4:AB:E7:FF:FF" in der container CLI läuft sauber, das NAS wacht auf.

attr WOL_NAS sshHost USERUSER@host.docker.internal
attr WOL_NAS wolCmd wakeonlan FF:F4:AB:E7:FF:FF
wird allerdings außer acht gelassen und es wir immer der interne ether-wake Befehl abgesetzt, der natürlich nicht durch das Docketnetz geroutet werden kann.

Hat wer ne Idee? Besten Dank!
FHEM in Docker auf HP T620, MQTT über Mosquitto, HomeMatic, Alexa, KODI, FritzBox, diverse gelötete HM-UNI- & ESP-Sensoren/Aktoren

Otto123

ZitatEin "ssh USERUSER@host.docker.internal wakeonlan FF:F4:AB:E7:FF:FF" in der container CLI läuft sauber, das NAS wacht auf.
Mit welchem user hast Du das getestet? Mit welchem user läuft FHEM?
In der FHEM Kommandozeile
{qx(id)}
in der container cli
id

Falls Du da Hilfe brauchst wie Du ssh für den FHEM User einrichten sollst: https://heinz-otto.blogspot.com/2020/09/ssh-mit-public-key.html
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

SonOfAbaddon

#28
Hi,

der SSH Key mit dem User läuft einwandfrei. Ich hab FHEM über den user fhem laufen, dessen public key im host unter .ssh schlummert.. Testweise aber gerade auf root hochgeschraubt, auf beiden systemen (Host und Container). Das WOL Modul mag einfach nicht den String ausführen, der im wolCmd hinterlegt ist.

Ein {my_wol("root\@host.docker.internal","5C:F4:AB:E7:CF:3D")} als attr wolCmd (deine Funktion Testweise in myutils geparkt) wird auch nicht angenommen, im Log bleibt es weiter beim
2022.02.06 15:33:57 3: [WOL_NAS] waking  WOL_NAS with MAC 5C:F4:AB:E7:CF:3D IP 192.168.50.250 via BOTH
2022.02.06 15:33:57 1: [WOL_NAS] Guessing broadcast address: 192.168.50.255
was dank des Docker routings nicht laufen wird.
Rufe ich die Funktion über die Eingabezeile auf funktioniert auch das. Irgendwie mag das WOL-Modul seit dem Umzug in den Container nimmer.


EDIT:
Ich kann machen, was ich will. Das WOL Modul nutzt für das Magic packet immer die interne Funktion statt sich auf das attr wolCmd zu beziehen.
ssh fhem@host.docker.internal wakeonlan -i 192.168.50.255 5C:F4:AB:E7:CF:3D functioniert als .sh oder auch direkt als fhem-Benutzer in der Container-CLI.

attr WOL_NAS shutdownCmd "./NAS_shutdown.sh"  <--- läuft zuverlässig, früher auf einem Pi, nun im Docker
attr WOL_NAS wolCmd "./NAS_WOL.sh"   <---- wird nicht herangezogen, Egal ob ein .sh, in Kombination mit sshHost oder mit einer FHEM internen my_utils Funktion.
FHEM in Docker auf HP T620, MQTT über Mosquitto, HomeMatic, Alexa, KODI, FritzBox, diverse gelötete HM-UNI- & ESP-Sensoren/Aktoren

kadettilac89

#29
Zitat von: SonOfAbaddon am 06 Februar 2022, 15:40:33
EDIT:
Ich kann machen, was ich will. Das WOL Modul nutzt für das Magic packet immer die interne Funktion statt sich auf das attr wolCmd zu beziehen.
Poste mal ein List deines WOL-Devices. Hast du bei der Definition hinten "CMD" angegeben?

Ohne Details ist es nur Rätselraten.

Um mehr Input zu bekommen. Setze auch mal Verbose 5 und poste das Log des WOL-Versuchs.