Автоматичне пробудження Wake-on-LAN для хостів

Цей скрипт автоматично пробуджує пристрої за запитом.

Користувачам принаймні варто зберігати LOGFILE у ``/tmp/``, а не у flash-пам’яті. OpenWrt також не обслуговує HTML-сторінки так само, як DD-WRT.

Також зверніть увагу на проблеми з перезавантаженням роутера при використанні цього скрипта: https://forum.openwrt.org/t/cant-reboot-while-sleep-script-wol/


Привіт! Я знайшов на https://www.dd-wrt.com/wiki/index.php/Useful_Scripts#Web_Server_Wake-up корисний скрипт для пробудження хоста за запитом.
Я використовую його для пробудження свого NAS, коли Kodi або ПК хоче щось із нього отримати.

Вимоги:

  • Версія OpenWrt: Barrier Breaker 14.07 / LuCI Trunk (0.12+svn-r10530)
  • Версія ядра: 3.10.49
Обов'язковість Змінна Значення за замовчуванням Опис
необов'язково INTERVAL 5 інтервал повторення виконання скрипта в секундах
не обов'язково OLD порожнє має залишатися порожнім
необов'язково PORT 80 порт, за яким перевіряється трафік
необов'язково NUMP 3 кількість спроб перед пробудженням
так TARGET 192.168.1.1 IP-адреса цільового пристрою
так INTERFACE br-lan інтерфейс або широкомовна адреса
так MAC 00:00:00:00:00:00 MAC-адреса цільового пристрою
не обов'язково WOL /usr/bin/etherwake шлях до утиліти wake-on-lan
необов'язково LOGFILE “/www/wol/index.html” файл журналу, доступний за URL <ROUTER-IP>/wol/index.html
необов'язково LOGPROG “logread” джерело логів: logread, dmesg тощо

Встановіть потрібні пакети:

opkg update
opkg install etherwake

Збереження скрипта:

cat << "EOF" > /bin/autowol.sh
#!/bin/sh
# Активуйте JFFS2 та помістіть скрипт у /jffs/, тоді додайте його до автозапуску через інтерфейс.
 
# Налагодження
# set -xv
 
INTERVAL=5
NUMP=3
OLD=""
PORT=80
TARGET=192.168.1.1
INTERFACE=br-lan
MAC=00:00:00:00:00:00
WOL=/usr/bin/etherwake
LOGFILE="/www/wol/index.html"
LOGPROG="logread" # або "dmesg"
 
echo "<meta http-equiv=\"refresh\" content=\"10\">" > $LOGFILE
echo "Скрипт AUTO WOL запущено: " `date` "<br>" >> $LOGFILE
 
wake_up () {
	PORT=$1
	TARGET=$2
	BROADCAST=$3
	MAC=$4
	NEW=`$LOGPROG | awk '/WOL_LOG/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print }' | tail -1`
	SRC=`$LOGPROG | awk -F'[=| ]' '/WOL_LOG/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print }' | tail -1`
	LINE=`$LOGPROG | awk '/WOL_LOG/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/'`
	if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then
		if ping -qc $NUMP $TARGET >/dev/null; then
			echo "NOWAKE: $TARGET вже активний, запит від $SRC — " `date` "<br>" >> $LOGFILE
		else
			echo "WAKE: $SRC викликав Wake-on-LAN — " `date` "<br>" >> $LOGFILE
			$WOL -i $BROADCAST $MAC >> $LOGFILE
			echo "<br>" >> $LOGFILE
			sleep 5
		fi
		OLD=$NEW
	fi
}
 
while sleep $INTERVAL; do
	wake_up $PORT $TARGET $INTERFACE $MAC
done
EOF
 
chmod +x /bin/autowol.sh

Порада: не копіюйте скрипт вручну, бо можуть виникнути помилки через символи CRLF наприкінці рядків. Краще просто завантажте файл звідси.

Щоб увімкнути автозапуск, перейдіть у System → Startup → Local Startup та додайте рядок:

/bin/autowol.sh

Увімкніть вивід налагодження:

sh -x -v /bin/autowol.sh

Перевірте файл журналу: http://192.168.1.1/wol/

Перейдіть у Network → Firewall → Custom Rules та додайте наступне правило:

iptables -I FORWARD 1 -p tcp -d 192.168.1.1 -m limit --limit 1/min -j LOG --log-prefix "WOL_LOG:  " --log-level 7
  • Last modified: 2025/05/31 11:32
  • by vazaz