Zdecydowałem, że chcę, aby rozwiązanie automatycznie budziło mój serwer multimediów po uzyskaniu dostępu, które nie było zależne od dd-wrt.
Mam Raspberry Pi, więc użyłem go, ponieważ ma niską moc i nie mam nic przeciwko utrzymywaniu go przez cały czas, oczywiście można go uruchomić z dowolnej maszyny Linux.
Ostatnim rozwiązaniem, które znalazłem dla siebie, było napisanie małego skryptu bash. Zależności raspberry-pi to etherwake i tcpdump. Oba nie są domyślnie instalowane na rasbian. Również na serwerze należy włączyć Wake On Lan, jak wspomniano w innych postach.
sudo apt-get install etherwake
sudo apt-get install tcpdump
Skrypt aktywacji wygląda następująco:
nano ~/wol.sh
Następnie:
#!/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
Podstawową ideą jest to, że jest uruchamiany z mojego raspberry-pi, który obudzi serwer, jeśli zauważy pojedyncze żądanie arp dla serwera. Jeśli serwer jest przebudzony, nie będzie nasłuchiwał żądania arp, ale od czasu do czasu wyśle kilka pingów, aby upewnić się, że nadal jest przebudzony.
Nazwałem plik wol.sh i uczyniłem go wykonywalnym. Następnie umieść go w sudo crontab, aby uruchomić @reboot jako root. To jest dla tcpdump, który potrzebuje podwyższonego dostępu do nasłuchiwania eth0 i etherwake.
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
dodaj to na dole
@reboot sh /home/pi/wol.sh > /dev/null