Wecken Sie einen Computer über das Internet mit einem anderen Computer im selben lokalen Netzwerk auf

608
ivanp7

Ich habe zwei mit Arch Linux betriebene Computer, 'A' und 'B', die über denselben Router mit dem Internet verbunden sind. Ich habe Wake-on-WAN für beide konfiguriert und getestet. Beide Computer sind meistens heruntergefahren.

Ich möchte eine Verbindung zu ihnen herstellen, ohne Magiepakete von außen zu senden. Die NIC des Computers 'A' unterstützt das Aufwachen durch die Unicast-Aktivität, daher habe ich sie aktiviert. Das Problem ist, dass dies für den Computer 'B' nicht der Fall ist - er kann nur vom magischen Paket geweckt werden.

Kann ich den Computer "A" aktivieren, um den Computer "B" automatisch zu aktivieren, wenn eine TCP / UDP-Verbindung zu letzterem hergestellt wird? Ich denke an eine Lösung wie diese:

  1. Konfigurieren Sie den Router und den Computer "B" so, dass der gesamte "B" -Verkehr (an bestimmten Ports) durch den Computer "A" geleitet wird.
  2. Richten Sie auf 'A' ein Skript ein, das bei einer Verbindung zu 'B' irgendwie auslöst, den 'B'-Zustand überprüft und ein magisches Paket sendet.

Vielleicht gibt es einen einfacheren Weg?

BEARBEITEN:

Es wäre gut, wenn es möglich wäre, alles neu zu routen, so dass nach dem Aufwecken des ersteren kein "B" -Verkehr durch "A" geht, wodurch letzterer automatisch heruntergefahren werden kann.

2

2 Antworten auf die Frage

0
VL-80

Sie können auf dem Computer ein Bash-Skript erstellen A, das ein magisches Paket Büber das lokale Netzwerk an den Computer sendet und sendet .

Wenn Sie den Computer Aper Unicast-Datenverkehr aufwecken, kann das Skript automatisch ausgelöst werden oder Sie können SSH in den Computer einschalten Aund ausführen.

Diese Antwort zu StackOverflow beschreibt, wie ein solches Skript erstellt wird.

Ich möchte nicht, dass 'B' aufwacht, wenn ich auf 'A' zugreife. Das Skript muss ermitteln, ob eine Verbindung zu den für 'B' reservierten Ports besteht. Wie auch immer, diese Antwort ist eine Verbesserung meiner Lösung, danke. ivanp7 vor 5 Jahren 0
"Ich möchte nicht, dass" B "aufwacht, wenn ich auf" A "zugreife. OK. Lassen Sie das Skript dann nicht automatisch ausführen. Wann immer Sie 'B' aufwecken müssen, müssen Sie zuerst 'A', SSH hineinstellen und das Skript ausführen, das 'B' aufweckt. Auf diese Weise würde das Aufwachen von "A" nicht automatisch "B" aufwecken. VL-80 vor 5 Jahren 0
Das mache ich jetzt, aber ich möchte den manuellen Weckvorgang loswerden. ivanp7 vor 5 Jahren 0
Ich versuche etwas wie `if [[" "(ss -anp | grep $ PORT | grep ESTAB | wc -l)" -gt "0"]]; dann wakeup.sh; fi` ivanp7 vor 5 Jahren 0
@ ivanp7 Warum lässt du den Router das magische Paket nicht senden? Sie haben einen schönen Shell-fähigen Router, der zumindest über die "busybox" verfügt? Xen2050 vor 5 Jahren 1
@ Xen2050 Das wäre die beste Lösung, wenn ich den Router selbst gekauft hätte. Es ist ein günstiges Huawei HG8245H-256M, das von meinem ISP installiert wird. Irgendwann werde ich einen echten Router kaufen, aber momentan möchte ich so viel wie möglich von der vorhandenen Hardware bekommen. ivanp7 vor 5 Jahren 0
@ ivanp7 Könnte versuchen, einen eigenen Router (oder ein anderes Gerät mit niedrigem Stromverbrauch mit einer Shell oder Himbeere?) zu verwenden, das mit dem Huawei des ISP als ein anderer Client verbunden ist, oder einen eigenen Router in Reihe schalten, nachdem das Huawei alle Ihre Geräte mit Ihrem Router verbunden hat Xen2050 vor 5 Jahren 0
0
dirkt

Kann ich den Computer "A" aktivieren, um den Computer "B" automatisch zu aktivieren, wenn eine TCP / UDP-Verbindung zu letzterem hergestellt wird?

Sie müssen die ARP-Anforderungen an B weiterleiten, während B schläft, dann die Verbindungsversuche für die IP von B abhören und das Aktivierungspaket senden.

Das ist machbar, aber schwer genug, würde ich ein kleines C - Programm schreibt Paket Buchsen für den ersten ARP - Proxy und der Verbindungsversuch Snooping. Es müsste auch den Status über B verwalten, der sagt, ob B schläft oder nicht, zum Beispiel, indem geprüft wird, ob B etwas aussendet und auf ARP-Anforderungen antwortet.

Um dies zu schreiben, benötigen Sie ein gutes Verständnis von Netzwerkprotokollen (oder Sie suchen lange genug, bis wirshark erfasst, bis Sie wissen, was los ist.

Ich habe statische ARP-Einträge für A & B, daher sendet der Router meiner Meinung nach keine ARP-Pakete? Warum nicht einfach ein NAT-Port (lassen Sie es X sein) auf A bis B und einen Dämon auf A, der Verbindungen zu X erkennt und ggf. ein magisches Paket sendet? Der Hauptnachteil dieses Ansatzes ist, dass A nicht heruntergefahren wird, während B noch verwendet wird. ivanp7 vor 5 Jahren 0
Sie haben statische ARP-Einträge für B auf allen Computern, die sich im lokalen Segment befinden, und können Anforderungen stellen oder Pakete an B weiterleiten. Wenn ja, dann sollten Sie sich nicht mit ARP befassen müssen, aber ich würde eine konkrete Anfrage machen, um sicherzugehen. Dieses kleine C-Programm wäre im Grunde ** ein Dämon auf A, der Verbindungen zu B erkennt (und ggf. ARP darüber abwickelt). Wenn Sie (NAT) alle Anforderungen an B auf A auf einem Router vor A und B nach A umleiten können, können Sie dies auch tun (und NAT zurück nach B auf A), aber Sie haben nicht angegeben, wo Die Anfragen können kommen. Bei statischem ARP müssen Sie auch NAT verwenden. dirkt vor 5 Jahren 0
Anfragen kommen von außen und es gibt nur zwei Computer, A und B, im LAN. Ich besitze die gesamte Hardware, keine Betriebsbeschränkungen. ivanp7 vor 5 Jahren 0
Ich würde versucht sein, das Aufwachen im Router zu erledigen, dann ist der Router ohnehin eingeschaltet, Sie müssen sich nicht mit ARP befassen (oder sogar eine fehlende ARP-Antwort als Indikator für das Senden eines WoL-Pakets verwenden). Wieder ein C-Programm mit Paketsockeln, ARP-Anforderungen und -Antworten überwachen, Timeout-Status. Ich wäre nicht überrascht, wenn jemand das schon irgendwo geschrieben hätte ... dirkt vor 5 Jahren 0
Ich fürchte, mein Huawei HG8245-Router mit Dopra Linux lässt mich das nicht. Es verfügt über eine solide statische native Firmware und zu wenig Speicher, um OpenWrt zu installieren. Ansonsten wäre es der bevorzugte Weg. ivanp7 vor 5 Jahren 0
Aber NATing B zu A auf dem HG8245 wird funktionieren? Was ist mit den generischen iptables-Regeln? dirkt vor 5 Jahren 0
Entschuldigung für die Verspätung. Es unterstützt die einfache Portweiterleitung, sonst nicht viel. ivanp7 vor 5 Jahren 0
Wenn Sie auf dem HG8245 keine NAT B zu A verwenden können, funktioniert statisches ARP nicht (Verbindungsversuche mit B enden nur bei B und nie bei A). Daher würde ich die ursprüngliche Idee in der Antwort verwenden ( arp Proxy bis B aufgeweckt wird). Wenn Sie trotzdem nach B portieren müssen, können Sie alles nach A portieren und dann etwas zusammenbasteln, um entweder zu hören und die WoL zu senden oder NAT über iptables zu aktivieren. Ich bin mir jedoch nicht sicher, ob dies einfacher sein wird. dirkt vor 5 Jahren 0