WOL Script Wake Up Your Webserver On Internet Traffic - XIYO/asuswrt-merlin.ng-kr GitHub Wiki

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋ฒ„์˜ ํฌํŠธ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ์„œ๋ฒ„๋ฅผ ๊นจ์šฐ๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ๋œ ํฌํŠธ์— ์ƒ๊ด€์—†์ด ์–ด๋–ค ์š”์ฒญ์—๋„ ์‘๋‹ตํ•˜๋ฏ€๋กœ ํฌํŠธ ์Šค์บ”์ด ์›น ์„œ๋ฒ„๋ฅผ ๋งค๋ฒˆ ๊นจ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•˜์—ฌ ๋‚ด ํ•„์š”์— ๋งž๊ฒŒ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€ ํ•˜๋‹จ์—๋Š” ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ํฌํŠธ์—์„œ๋งŒ ๊นจ์šฐ๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๋กœ๊ทธ:
06/02/2017: /usr/bin/ether-wake ๊ฒฝ๋กœ๋ฅผ /usr/sbin/ether-wake๋กœ ๋ณ€๊ฒฝ [๋ฒ„์ „ 380.65์—์„œ ๋ณ€๊ฒฝ]

์ถœ๋ ฅ์€ ๋ณธ๋ฌธ๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.


Wake On Lan ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ:

1. ๋ผ์šฐํ„ฐ๋กœ ์ด๋™ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜์„ธ์š” (192.168.1.1) ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ.
2. ๊ด€๋ฆฌ ์˜ต์…˜์œผ๋กœ ์ด๋™ํ•˜๊ณ  JFFS ํŒŒํ‹ฐ์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋‹ค์Œ ๋ถ€ํŒ… ์‹œ JFFS ํŒŒํ‹ฐ์…˜์„ ํฌ๋งทํ•˜๋„๋ก ์„ค์ •ํ•˜์„ธ์š”.
3. SSH์™€ Telnet์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

![์‚ฌ์ง„ 1](http://members.home.nl/frits.pruymboom/Enable%20JFFS%20&%20Telnet%20SSH%201.PNG)
4. ์ ์šฉ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋ผ์šฐํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”!
5. WINSCP๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. [๋‹ค์šด๋กœ๋“œ](http://winscp.net/download/winscp439setup.exe)
6. WINSCP๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜์„ธ์š”.
![์‚ฌ์ง„ 2](http://members.home.nl/frits.pruymboom/Login%20WINSCP%202.PNG)

7. SCP ํ”„๋กœํ† ์ฝœ์„ ์„ ํƒํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ผ์šฐํ„ฐ ์„ค์ •์— ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(WINSCP๋Š” ์ผ๋ถ€ ๊ทธ๋ฃน์ด ๋ˆ„๋ฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•  ๊ฒƒ์ด์ง€๋งŒ ์ด๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

8. ๋ฃจํŠธ ํด๋”๋กœ ์ด๋™ํ•˜๊ณ  JFFS ํด๋”๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
![์‚ฌ์ง„ 3](http://members.home.nl/frits.pruymboom/Root%20folder%20WINSCP%203.PNG)

9. 'scripts'๋ผ๋Š” ํด๋”๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (์—†๋‹ค๋ฉด ๋งŒ๋“œ์„ธ์š”!).

10. 'JFFS' ํด๋” ์•ˆ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ > ํŒŒ์ผ์„ ์„ ํƒํ•˜์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„์€ 'services-start'๋กœ ์ง€์ •ํ•˜์„ธ์š”.
๋‚ด์šฉ์„ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.

#!/bin/sh

์ง€์ •๋œ IP๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•  ๋•Œ WOL ํŒจํ‚ท์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ

sh /jffs/scripts/wake.sh&


![์‚ฌ์ง„ 4](http://members.home.nl/frits.pruymboom/SCRIPT%20SERVICES%20START%205.PNG)

11. ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„์„ 'wake.sh'๋กœ ์ง€์ •ํ•˜๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์„ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.
```shell
#!/bin/sh

# ์Šคํฌ๋ฆฝํŠธ ์„ค์ •
INTERVAL=5
NUMP=1
OLD=""
TARGET="๊นจ์šฐ๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์˜ IP ์ฃผ์†Œ"
IFACE=br0
MAC="๊นจ์šฐ๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์˜ MAC ์ฃผ์†Œ"
WOL="/usr/sbin/ether-wake"
LOGFILE="/var/log/ether-wake.log"

while sleep $INTERVAL; do
    NEW=$(dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ {print }' | tail -1)
    SRC=$(echo $NEW | awk -F'[=| ]' '/SRC/{for(i=1;i<=NF;i++) if($i ~ /SRC/) print $(i+1)}')
    DPORT=$(echo $NEW | awk -F'[=| ]' '/DPT/{for(i=1;i<=NF;i++) if($i ~ /DPT/) print $(i+1)}')
    PROTO=$(echo $NEW | awk -F'[=| ]' '/PROTO/{for(i=1;i<=NF;i++) if($i ~ /PROTO/) print $(i+1)}')

    if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then
        if ! ping -qc $NUMP $TARGET >/dev/null; then
            # echo "$TARGET๋Š” $SRC์— ์˜ํ•ด $DPORT ํฌํŠธ, ํ”„๋กœํ† ์ฝœ $PROTO๋กœ ์ ‘๊ทผ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฏธ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค." `date`>> $LOGFILE
            # else
            echo "$SRC์— ์˜ํ•ด $DPORT ํฌํŠธ, ํ”„๋กœํ† ์ฝœ $PROTO๋กœ $TARGET์„ ๊นจ์šฐ๊ธฐ ์š”์ฒญ๋ฐ›์•˜์œผ๋ฉฐ ์‹œ๊ฐ„์€" `date`>> $LOGFILE
            $WOL -i $IFACE $MAC
            sleep 5
        fi
        OLD=$NEW
    fi
done
  • ์Šคํฌ๋ฆฝํŠธ์— IP์™€ MAC์„ ์ž…๋ ฅํ•˜์„ธ์š”.

์‚ฌ์ง„ 5

์ด์ œ ์ด๋ ‡๊ฒŒ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ง„ 6

์ด์ œ ๋ช‡ ๊ฐ€์ง€ Telnet SSH ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PUTTY๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. ๋‹ค์šด๋กœ๋“œ

  • PUTTY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜์„ธ์š” (192.168.1.1).

์‚ฌ์ง„ 9

  • ๋ผ์šฐํ„ฐ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.

์ด์ œ PUTTY์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.

chmod +x /jffs/scripts/wake.sh

chmod +x /jffs/scripts/services-start

์ด ๋ช…๋ น์œผ๋กœ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๊ฐ€ ํ•˜๋‚˜ ๋” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

  • ๋ผ์šฐํ„ฐ ์›น ํŽ˜์ด์ง€ (192.168.1.1)์— ๋กœ๊ทธ์ธํ•˜์„ธ์š”. ๋ฐฉํ™”๋ฒฝ๋กœ ์ด๋™ํ•˜๊ณ  ๋กœ๊น…๋œ ํŒจํ‚ท์„ ACCEPTED๋กœ ์„ค์ •ํ•˜์„ธ์š”.
  • ์ ์šฉ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์„ธ์š”. ์ด์ œ ๋ผ์šฐํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์„ธ์š”. ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

์‚ฌ์ง„ 10

๋Œ€์ฒด ๋ฐฉ๋ฒ•

์„œ๋ฒ„๋ฅผ ๊นจ์šฐ๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

#!/bin/sh

# ์Šคํฌ๋ฆฝํŠธ ์„ค์ •
INTERVAL=5
NUMP=3
OLD=""
TARGET="๋‚ด๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”!"
PORT="ํฌํŠธ๋ฅผ ์—ฌ๊ธฐ์— ์ง€์ •ํ•˜์„ธ์š”!"
IFACE=br0
MAC="MAC ์ฃผ์†Œ๋ฅผ ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”!"
WOL="/usr/sbin/ether-wake"
LOGFILE="/var/log/ether-wake.log"

while sleep $INTERVAL; do
    NEW=$(dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print }' | tail -1)
    SRC=$(echo $NEW | awk -F'[=| ]' '/SRC/{for(i=1;i<=NF;i++) if($i ~ /SRC/) print $(i+1)}')
    DPORT=$(echo $NEW | awk -F'[=| ]' '/DPT/{for(i=1;i<=NF;i++) if($i ~ /DPT/) print $(i+1)}')
    PROTO=$(echo $NEW | awk -F'[=| ]' '/PROTO/{for(i=1;i<=NF;i++) if($i ~ /PROTO/) print $(i+1)}')

    if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then
        if ! ping -qc $NUMP $TARGET >/dev/null; then
            # echo "$TARGET๋Š” $SRC์— ์˜ํ•ด $DPORT ํฌํŠธ, ํ”„๋กœํ† ์ฝœ $PROTO๋กœ ์ ‘๊ทผ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฏธ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค." `date`>> $LOGFILE
            # else
            echo "$SRC์— ์˜ํ•ด $DPORT ํฌํŠธ, ํ”„๋กœํ† ์ฝœ $PROTO๋กœ $TARGET์„ ๊นจ์šฐ๊ธฐ ์š”์ฒญ๋ฐ›์•˜์œผ๋ฉฐ ์‹œ๊ฐ„์€" `date`>> $LOGFILE
            $WOL -i $IFACE $MAC
            sleep 5
        fi
        OLD=$NEW
    fi
done

๋Œ€์ฒด ๋ฐฉ๋ฒ• 2 - ๋ชจ๋“  ACCEPT ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๋Œ€์ƒ์„ ๊นจ์šฐ๊ธฐ

๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ๋ฐฉํ™”๋ฒฝ ๋กœ๊ทธ๋œ ํŒจํ‚ท์„ "none"์œผ๋กœ ์„ค์ •ํ•œ ์ƒํƒœ์—์„œ "nat-start" ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/bin/sh
iptables -I FORWARD -d <๋Œ€์ƒ IP> -p tcp --dport <๋Œ€์ƒ ํฌํŠธ> -j LOG --log-prefix "[2WAKE] <๊นจ์šธ MAC ์ฃผ์†Œ> "

๊ทธ๋ฆฌ๊ณ  "wake.sh" ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

#!/bin/sh

INTERVAL=3
NUMP=1
OLD=""
IFACE=br0
WOL="/usr/sbin/ether-wake"

logger "์ž๋™ WOL ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค." `date`

while sleep $INTERVAL; do
    NEW=$(dmesg | awk '/2WAKE/ {print }' | tail -1)

    if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then

        MAC=$(dmesg | awk -F'[=| ]' '/2WAKE/ {print $2}' | tail -1)
        TARGET=$(dmesg | awk -F'[=| ]' '/2WAKE/ {print $10}' | tail -1)
        SRC=$(dmesg | awk -F'[=| ]' '/2WAKE/ {print $8}' | tail -1)

        if ping -qc $NUMP $TARGET >/dev/null; then
            logger "NOWAKE $TARGET was accessed by $SRC and is already alive at" `date`
            sleep 500
        else
            logger "WAKE $SRC causes WOL of $TARGET using $MAC at" `date`
            $WOL -i $IFACE $MAC | logger
            sleep 5
        fi
        OLD=$NEW
    fi
done

์ด ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ACCEPT ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๋Œ€์ƒ์„ ๊นจ์šธ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ