He estado buscando una solución a mis problemas durante los últimos 3 días pero nada funcionó todavía.
Meta
Necesito poder reactivar la computadora de mi casa desde el control remoto. Ahora tengo WOL funcionando en local: puedo encender la máquina desde mi teléfono Android. Necesito que funcione incluso si estoy fuera de casa.
Mi configuración de red
Tengo dos enrutadores, el enrutador principal está conectado al ISP y ejecuta software propietario que admite el reenvío de puertos pero no tiene funcionalidad WOL. El enrutador secundario está conectado al primero mediante un cable Ethernet y ejecuta dd-wrt. La computadora de mi casa está conectada al enrutador secundario mediante un cable Ethernet y tiene una dirección IP estática. También configuré DNS dinámico, vinculándolo al enrutador principal, gracias a no-ip.
Soluciones que probé
La primera solución que probé fue reenviar el tráfico UDP que llegaba del puerto 7 del enrutador principal al puerto 7 del enrutador secundario. Luego, reenvíe el UDP que llega al puerto 7 del enrutador secundario a la computadora de mi casa. Eso no funcionó. Incluso configurar una entrada estática en la tabla 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 revise los archivos de registro para solicitarlos a la computadora de mi hogar y, si encuentra alguno, dd-wrt emite su comando wol, activando 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 el resultado de los dos comandos echo antes del bucle while en el script.
Creo que es un problema de los registros dd-wrt, los inspeccioné y parece que no contienen 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 guión no funciona? ¿Tiene alguna solución alternativa?
Respuesta1
Ok, finalmente encontré una solución.
En el enrutador principal reenvío el tráfico UDP que llega por 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 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.