Автоматичне пробудження 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
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/31 11:32
  • by vazaz