To make iptables
work, make sure that you have netfilter installed:
opkg install kmod-br-netfilter
Thanks, @Reutertu3
#!/bin/sh | |
# Inspired by https://wiki.openwrt.org/doc/howto/auto_wake_on_lan | |
# - code that does not hurt my eyes | |
# - log that does eat up all the memory | |
set -euo pipefail | |
#set -x | |
target=192.168.0.1 | |
mac=01:23:45:67:89:ab | |
interface=br-lan | |
interval=2 | |
t_wait_for_boot=5 | |
logfile="/www/wol/index.html" | |
max_log_lines=200 | |
echo "<meta http-equiv="refresh" content="5">" > $logfile | |
echo "AUTO WOL started at $(date +%F__%H-%M-%S)<br>" >> $logfile | |
log() { | |
#echo $@ | |
echo "$@<br/>" >> $logfile | |
} | |
rotate_log() { | |
count=$(wc -l $logfile | awk '{ print $1 }') | |
if [ $count -gt $max_log_lines ]; then | |
head -2 $logfile > /tmp/autowol.log.tmp | |
tail -50 $logfile >> /tmp/autowol.log.tmp | |
mv /tmp/autowol.log.tmp $logfile | |
fi | |
} | |
old="" | |
while sleep $interval; do | |
rotate_log | |
last_line=$(logread | grep "WOL_LOG.*DST=$target" | tail -1) | |
if [ "$last_line" != "" -a "$last_line" != "$old" ]; then | |
dt=$(date "+%F %H:%M:%S") | |
src=$(echo $last_line | sed -Ee 's/.* SRC=([0-9.]+) .*/\1/') | |
if ping -q -W 1 -c 1 $target >/dev/null; then | |
log "$dt NOWAKE SRC=$src DST=$target" | |
else | |
log "$dt WAKE SRC=$src DST=$target" | |
etherwake -i $interface $mac >> $logfile | |
log "" | |
sleep $t_wait_for_boot | |
fi | |
old=$last_line | |
fi | |
done |
iptables -I FORWARD 1 -p tcp -d 192.168.0.1 -m limit --limit 1/min -j LOG --log-prefix "WOL_LOG: " --log-level 7 |
#!/bin/sh /etc/rc.common | |
START=90 | |
STOP=90 | |
PIDFILE=/var/run/autowol.pid | |
start() { | |
/root/autowol.sh & | |
echo $! > $PIDFILE | |
} | |
stop() { | |
kill -15 `cat $PIDFILE` | |
rm $PIDFILE | |
} |
# run bridged traffic through iptables too | |
# http://superuser.com/a/928246 | |
net.bridge.bridge-nf-call-iptables=1 | |
# and update with | |
# sysctl -p |
The MIT License (MIT) | |
Copyright (c) 2015 Felix Hummel | |
Permission is hereby granted, free of charge, to any person obtaining a copy of | |
this software and associated documentation files (the "Software"), to deal in | |
the Software without restriction, including without limitation the rights to | |
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies | |
of the Software, and to permit persons to whom the Software is furnished to do | |
so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in all | |
copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
SOFTWARE. |