Remote Wake on LAN hinter 2 Routern

Remote Wake on LAN hinter 2 Routern

Ich habe in den letzten drei Tagen nach einer Lösung für meine Probleme gesucht, aber bisher hat nichts funktioniert.

Ziel

Ich muss meinen Heimcomputer per Fernzugriff wecken können. Jetzt funktioniert WOL lokal: Ich kann den Computer von meinem Android-Telefon aus einschalten. Es muss funktionieren, auch wenn ich nicht zu Hause bin.

Mein Netzwerk-Setup

Ich habe zwei Router. Der primäre Router ist mit dem ISP verbunden und verwendet proprietäre Software, die Portweiterleitung unterstützt, aber keine WOL-Funktionalität bietet. Der sekundäre Router ist über ein Ethernet-Kabel mit dem ersten verbunden und verwendet dd-wrt. Mein Heimcomputer ist über ein Ethernet-Kabel mit dem sekundären Router verbunden und hat eine statische IP-Adresse. Ich habe auch dynamisches DNS konfiguriert, das dank no-ip mit dem primären Router verknüpft ist.

Lösungen, die ich ausprobiert habe

Die erste Lösung, die ich ausprobiert habe, bestand darin, den UDP-Verkehr, der über Port 7 des primären Routers einging, an Port 7 des sekundären Routers weiterzuleiten. Dann leitete ich den UDP-Verkehr, der über Port 7 des sekundären Routers einging, an meinen Heimcomputer weiter. Das hat nicht funktioniert. Sogar das Festlegen eines statischen Eingangs in der ARP-Tabelle für meinen Heimcomputer hat nicht funktioniert.

Die zweite Lösung, die mir am sichersten erscheint, besteht darin, dass dd-wrt die Logdateien auf Anfragen an meinen Heimcomputer überprüft und, wenn es welche findet, seinen Befehl wol ausgibt, um den Computer aufzuwecken. Ich habe dieses Skript gefunden:

#!/bin/sh
#Enable JFFS2 and place script in /jffs/ then run on startup in web interface.
#You can check the log from http://192.168.2.1/user/wol.html

INTERVAL=1
PINGTIME=1
OLD=""
PORT=32400
WOLPORT=9
TARGET=192.168.2.4
BROADCAST=192.168.2.255
MAC=00:1f:5b:32:c6:0c
WOL=/usr/sbin/wol
LOGFILE="/tmp/www/wol.html"

echo "<meta http-equiv=\"refresh\" content=\"10\">" > $LOGFILE
echo "AUTO WOL Script started at" `date` "<br>" >> $LOGFILE

while sleep $INTERVAL;do
NEW=`dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print }' | tail -1`
SRC=`dmesg | awk -F'[=| ]' '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print $7}' | tail -1`
LINE=`dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/'`

if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then                                               
   if ping -qw $PINGTIME $TARGET >/dev/null; then                                                 
      echo "NOWAKE $TARGET was accessed by $SRC and is already alive at" `date` "<br>">> $LOGFILE    
   else                                                                                        
      echo "WAKE $SRC causes wake on lan at" `date` "<br>">> $LOGFILE                         
      $WOL -i $BROADCAST -p $WOLPORT $MAC >> $LOGFILE                                             
      echo "<br>" >> $LOGFILE                                                                  
      sleep 1                                                                                 
   fi                                                                                          
   OLD=$NEW                                                                                  
fi                                                                                                                                                                               
done

Ich habe das Skript so konfiguriert, dass das gespeicherte Protokoll /tmp/www/wol.htmlnur die Ausgabe der beiden Echo-Befehle vor der While-Schleife im Skript enthält.

Ich denke, es liegt an den DD-WRT-Protokollen. Ich habe sie überprüft und sie scheinen keine Informationen zu IP-Adressen oder Ports zu enthalten:

Sep  1 16:58:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:00:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:02:01 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:04:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:06:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:06:39 DD-WRT daemon.info hostapd: ath0: STA ac:cf:85:a1:f0:1b IEEE 802.11: disassociated due to inactivity
Sep  1 17:06:40 DD-WRT daemon.info hostapd: ath0: STA ac:cf:85:a1:f0:1b IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sep  1 17:06:45 DD-WRT daemon.info hostapd: ath0: STA fc:3f:7c:8b:0c:71 IEEE 802.11: disassociated due to inactivity
Sep  1 17:06:46 DD-WRT daemon.info hostapd: ath0: STA fc:3f:7c:8b:0c:71 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sep  1 17:07:08 DD-WRT auth.info login[1874]: root login on 'pts/0'

Weiß jemand, warum das Skript nicht funktioniert? Kennen Sie eine alternative Lösung?

Antwort1

OK, ich habe endlich eine Lösung gefunden.

Auf dem primären Router leite ich UDP-Verkehr, der über Port 9 eingeht, an den sekundären Router weiter.

Ich habe Syslogd und Firewall-Protokollierung in dd-wrt für den zweiten Router aktiviert, diese Protokolle werden in der Datei gespeichert: /proc/net/ip_conntrack

Ich habe dieses Startskript in dd-wrt hinzugefügt:

#! /bin/sh 

WOL=/usr/sbin/wol 
MAC_VMC=cd:6e:a2:32:87:6v 
BCAST=192.168.2.255 
LOGFILE="/tmp/www/wol.html"

echo "AUTO WOL Script started at" `date` "<br>" >> $LOGFILE

while sleep 5 ; do 
 if [ `egrep -c udp.+dport=9 /proc/net/ip_conntrack` -gt 0 ] ; then 
  echo "Sending Magic Packet at" `date` >> $LOGFILE
  $WOL -i $BCAST -p 7 $MAC_VMC 
  sleep 120
 fi 
done

Es überwacht die Verkehrsprotokolldatei und wenn es UDP-Verkehr auf Port 9 erkennt, weckt es meinen Heimcomputer mit dem Befehl dd-wrt wol auf.

Es funktioniert auch aus der Ferne einwandfrei. Meine einzige Sorge ist die Sicherheit.

verwandte Informationen