dd-wrt script to trigger a LAN WOL event based on a WAN port forward event.
roku/roksbox -> dd-wrt -> WAN -> dd-wrt -> wake media server
If you enter this in the GUI as a startup script, remember to escape
all dollar \$ and quote \" characters.
Code:
#!/bin/sh
# Triggers WOL by watching /proc/net/ip_conntrack for an
# established port forward, WAN source -> LAN target event
# runs on local dd-wrt
# Developed and tested on
# DD-WRT v24-sp2 vpn (c) 2010 NewMedia-NET GmbH
# Release: 12/24/10 (SVN revision: 15962)
# local forward_spec=roksbox:on:both:80>media_server_IP:80<remote_router_IP
# remote forward_spec=roksbox:on:both:80>local_router_IP:80<roku_IP
# event-specific quick match keys
KEY1=6
KEY2=SYN_SENT
# port forward IPs, order is important (see POC)
SOURCE=remote_router_IP
TARGET=media_server_IP
# WOL target
WOL=192.168.1.255\ 00:11:22:33:ab:cd
while [ 1 ]; do
if ping -c1 -w1 $TARGET > /dev/null; then
exit
else
# too long == miss trigger event, too short == unnecessary load
sleep 4
fi
if egrep "${KEY1}.*${KEY2}.*${SOURCE}.*${TARGET}" /proc/net/ip_conntrack; then
/usr/sbin/wol -i $WOL
exit
fi
done
# PoC
#root@dd-wrt:/tmp# KEY1=6; KEY2=EST; SOURCE=192.168.1.32; TARGET=76.123.123.76
#root@dd-wrt:/tmp# if egrep "${KEY1}.*${KEY2}.*${SOURCE}.*${TARGET}" /proc/net/ip_conntrack; then echo "test match"; fi
#tcp 6 124 ESTABLISHED src=192.168.1.32 dst=18.28.16.50 sport=36450 dport=80 src=18.28.16.50 dst=76.123.123.76 sport=80 dport=36450 [ASSURED] use=1 rate=11360 mark=0
#test match
Cheers,