J'ai décidé que je voulais une solution pour réveiller automatiquement mon serveur multimédia lors d'un accès qui ne dépendait pas de dd-wrt.
J'ai un Raspberry Pi, je l'ai donc utilisé car il est de faible puissance et cela ne me dérange pas de le garder allumé tout le temps, bien sûr, il peut être exécuté à partir de n'importe quelle machine Linux.
La solution finale que j'ai trouvée pour moi était d'écrire un petit script bash. Les dépendances de raspberry-pi sont etherwake et tcpdump. Les deux ne sont pas installés par défaut sur rasbian. Également sur le serveur, Wake On Lan doit être activé comme mentionné dans les autres articles.
sudo apt-get install etherwake
sudo apt-get install tcpdump
Le script de réveil est le suivant:
nano ~/wol.sh
Alors:
#!/bin/bash
pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x #WOL target ip address
targetMAC=00:11:22:33:44:55 #WOL target MAC
wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}
while sleep $pingInterval; do
varPing=`ping -s 1 -c 2 $target > /dev/null; echo $?`
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done
L'idée principale est qu'il est exécuté à partir de mon raspberry-pi qui réveillera le serveur s'il remarque une seule demande d'arp pour le serveur. Si le serveur est éveillé, il n'écoutera pas une demande d'arp, mais enverra quelques pings de temps en temps pour s'assurer qu'il est toujours éveillé.
J'ai nommé le fichier wol.sh et l'ai rendu exécutable. Ensuite, placez-le dans le sudo crontab pour lancer @reboot en tant que root. C'est pour tcpdump qui a besoin d'un accès élevé pour écouter eth0 et etherwake.
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
ajoutez ceci en bas
@reboot sh /home/pi/wol.sh > /dev/null