Ho deciso che volevo una soluzione per riattivare automaticamente il mio media server quando vi si accedeva che non dipendesse da dd-wrt.
Ho un Raspberry Pi, quindi l'ho usato perché è a basso consumo e non mi dispiace tenerlo sempre acceso, ovviamente potrebbe essere eseguito da qualsiasi macchina Linux.
L'ultima soluzione che ho trovato per me stesso è stata scrivere un piccolo script bash. Le dipendenze di lampone-pi sono etherwake e tcpdump. Entrambi non sono installati di default su rasbian. Anche sul server Wake On Lan deve essere abilitato come indicato negli altri post.
sudo apt-get install etherwake
sudo apt-get install tcpdump
Lo script di wake è il seguente:
nano ~/wol.sh
Poi:
#!/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'idea principale è che viene eseguito dal mio raspberry-pi che riattiverà il server se nota una singola richiesta arp per il server. Se il server è sveglio, non ascolterà una richiesta arp ma invia qualche ping ogni tanto per assicurarsi che sia ancora attivo.
Ho chiamato il file wol.sh e l'ho reso eseguibile. Quindi inseriscilo nel crontab sudo per avviare @reboot come root. Questo è per tcpdump che necessita di un accesso elevato per ascoltare eth0 ed etherwake.
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
aggiungi questo in fondo
@reboot sh /home/pi/wol.sh > /dev/null