Remote Wake on LAN detrás de 2 enrutadores

0

He estado buscando una solución a mis problemas durante los últimos 3 días, pero nada funcionó todavía.

Gol

Necesito poder activar la computadora de mi casa desde el control remoto. Ahora, tengo WOL trabajando en local: puedo encender la máquina desde mi teléfono Android. Necesito que funcione, incluso si estoy lejos de casa.

Mi configuración de red

Tengo dos enrutadores, el enrutador principal está conectado al ISP, ejecuta software propietario, que admite el reenvío de puertos pero no tiene funcionalidad WOL. El enrutador secundario está conectado al primero a través de un cable ethernet y ejecuta dd-wrt. La computadora de mi casa está conectada al enrutador secundario a través de un cable Ethernet y tiene una dirección IP estática. También configuré DNS dinámico, vinculándome al enrutador primario, gracias a no-ip.

Soluciones que probé

La primera solución que probé fue reenviar el tráfico UDP que entraba en el puerto 7 del enrutador primario al puerto 7 del enrutador secundario. Luego, reenvío UDP que entra en el puerto 7 del enrutador secundario a la computadora de mi casa. Eso no funcionó. Incluso configurar una entrada estática en la mesa de arp para la computadora de mi casa no funcionó.

La segunda solución, que me parece la más segura, consiste en hacer que dd-wrt verifique los archivos de registro para solicitarlos a la computadora de mi casa y, si encuentra alguno, dd-wrt emite su comando wol, despertando la computadora. Encontré este script:

#!/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

Configuré el script, el registro almacenado /tmp/www/wol.htmlsolo contiene la salida de los dos comandos echo antes del ciclo while en el script.

Creo que es un problema de los registros dd-wrt, los inspeccioné y parecen no contener ninguna información sobre direcciones IP o puertos:

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'

¿Alguien sabe por qué el script no funciona? ¿Tienes alguna solución alternativa?

ran3000
fuente
Tengo la sensación de que debe examinar cómo está utilizando los números de puerto. ¿Qué es 32400? ¿Es necesario reenviarlo desde el enrutador ascendente al enrutador descendente? ¿Por qué a veces usa el puerto 7 y otras veces el 9? 9 (descartar) es tradicionalmente el puerto que la gente usa para WOL basado en IP.
Spiff
Mientras intentaba diferentes soluciones, cambio de puerto varias veces. Sin embargo, finalmente encontré una solución, la publicaré como respuesta cuando llegue a casa. ¡Gracias de todos modos!
ran3000

Respuestas:

0

Ok, finalmente encontré una solución.

En el enrutador primario, reenvío el tráfico UDP que entra en el puerto 9 al enrutador secundario.

Habilité el registro de syslogd y firewall en dd-wrt para el segundo enrutador, esos registros se guardan en el archivo: / proc / net / ip_conntrack

Agregué este script de inicio en dd-wrt:

#! /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

Observa el archivo de registro de tráfico y cuando ve el tráfico UDP en el puerto 9, activa la computadora de mi casa usando el comando dd-wrt wol.

Funciona perfectamente incluso de forma remota, mi única preocupación es la seguridad.

ran3000
fuente