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.html
solo 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?