2개의 라우터 뒤의 원격 Wake on LAN

2개의 라우터 뒤의 원격 Wake on LAN

지난 3일 동안 내 문제에 대한 해결책을 찾고 있었지만 아직 아무 것도 효과가 없었습니다.

목표

원격으로 집에 있는 컴퓨터를 깨울 수 있어야 합니다. 이제 로컬에서 WOL을 작동하게 되었습니다. Android 휴대폰에서 컴퓨터를 켤 수 있습니다. 집에서 멀리 떨어져 있어도 작동해야 합니다.

내 네트워크 설정

두 개의 라우터가 있는데 기본 라우터는 ISP에 연결되어 있고 포트 전달을 지원하지만 WOL 기능이 없는 독점 소프트웨어를 실행합니다. 보조 라우터는 이더넷 케이블을 통해 첫 번째 라우터에 연결되고 dd-wrt를 실행합니다. 내 집 컴퓨터는 이더넷 케이블을 통해 보조 라우터에 연결되어 있으며 고정 IP 주소를 가지고 있습니다. 또한 no-ip 덕분에 기본 라우터에 연결되는 동적 DNS를 구성했습니다.

내가 시도한 솔루션

제가 시도한 첫 번째 해결책은 기본 라우터의 포트 7에서 들어오는 UDP 트래픽을 보조 라우터의 포트 7로 전달하는 것이었습니다. 그런 다음 보조 라우터의 포트 7에서 들어오는 UDP를 내 집 컴퓨터로 전달하십시오. 그것은 효과가 없었습니다. 집에 있는 컴퓨터의 arp 테이블에 고정 입구를 설정해도 작동하지 않았습니다.

내가 보기에 가장 안전한 두 번째 해결책은 dd-wrt가 내 집 컴퓨터에 대한 요청에 대한 로그 파일을 확인하도록 하는 것으로 구성되며, 이를 발견하면 dd-wrt는 wol 명령을 실행하여 컴퓨터를 깨웁니다. 이 스크립트를 찾았습니다.

#!/bin/sh
#Enable JFFS2 and place script in /jffs/ then run on startup in web interface.
#You can check the log from http://192.168.2.1/user/wol.html

INTERVAL=1
PINGTIME=1
OLD=""
PORT=32400
WOLPORT=9
TARGET=192.168.2.4
BROADCAST=192.168.2.255
MAC=00:1f:5b:32:c6:0c
WOL=/usr/sbin/wol
LOGFILE="/tmp/www/wol.html"

echo "<meta http-equiv=\"refresh\" content=\"10\">" > $LOGFILE
echo "AUTO WOL Script started at" `date` "<br>" >> $LOGFILE

while sleep $INTERVAL;do
NEW=`dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print }' | tail -1`
SRC=`dmesg | awk -F'[=| ]' '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/ {print $7}' | tail -1`
LINE=`dmesg | awk '/ACCEPT/ && /DST='"$TARGET"'/ && /DPT='"$PORT"'/'`

if [ "$NEW" != "" -a "$NEW" != "$OLD" ]; then                                               
   if ping -qw $PINGTIME $TARGET >/dev/null; then                                                 
      echo "NOWAKE $TARGET was accessed by $SRC and is already alive at" `date` "<br>">> $LOGFILE    
   else                                                                                        
      echo "WAKE $SRC causes wake on lan at" `date` "<br>">> $LOGFILE                         
      $WOL -i $BROADCAST -p $WOLPORT $MAC >> $LOGFILE                                             
      echo "<br>" >> $LOGFILE                                                                  
      sleep 1                                                                                 
   fi                                                                                          
   OLD=$NEW                                                                                  
fi                                                                                                                                                                               
done

스크립트를 구성했는데, 저장된 로그에는 /tmp/www/wol.html스크립트의 while 루프 이전에 두 개의 echo 명령의 출력이 포함되어 있습니다.

dd-wrt 로그에 문제가 있는 것 같습니다. 검사해 보니 IP 주소나 포트에 대한 정보가 전혀 포함되어 있지 않은 것 같습니다.

Sep  1 16:58:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:00:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:02:01 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:04:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:06:00 DD-WRT user.info : dhcpfwd : dhcp forwarder daemon successfully started
Sep  1 17:06:39 DD-WRT daemon.info hostapd: ath0: STA ac:cf:85:a1:f0:1b IEEE 802.11: disassociated due to inactivity
Sep  1 17:06:40 DD-WRT daemon.info hostapd: ath0: STA ac:cf:85:a1:f0:1b IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sep  1 17:06:45 DD-WRT daemon.info hostapd: ath0: STA fc:3f:7c:8b:0c:71 IEEE 802.11: disassociated due to inactivity
Sep  1 17:06:46 DD-WRT daemon.info hostapd: ath0: STA fc:3f:7c:8b:0c:71 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
Sep  1 17:07:08 DD-WRT auth.info login[1874]: root login on 'pts/0'

스크립트가 작동하지 않는 이유를 아는 사람이 있습니까? 대체 솔루션이 있나요?

답변1

좋아, 마침내 해결책을 찾았습니다.

기본 라우터에서는 포트 9로 들어오는 UDP 트래픽을 보조 라우터로 전달합니다.

두 번째 라우터에 대해 dd-wrt에서 syslogd 및 방화벽 로그인을 활성화했으며 해당 로그는 /proc/net/ip_conntrack 파일에 저장됩니다.

dd-wrt에 다음 시작 스크립트를 추가했습니다.

#! /bin/sh 

WOL=/usr/sbin/wol 
MAC_VMC=cd:6e:a2:32:87:6v 
BCAST=192.168.2.255 
LOGFILE="/tmp/www/wol.html"

echo "AUTO WOL Script started at" `date` "<br>" >> $LOGFILE

while sleep 5 ; do 
 if [ `egrep -c udp.+dport=9 /proc/net/ip_conntrack` -gt 0 ] ; then 
  echo "Sending Magic Packet at" `date` >> $LOGFILE
  $WOL -i $BCAST -p 7 $MAC_VMC 
  sleep 120
 fi 
done

트래픽 로그 파일을 감시하고 포트 9에서 UDP 트래픽을 발견하면 dd-wrt wol 명령을 사용하여 내 집 컴퓨터를 깨웁니다.

원격으로도 완벽하게 작동합니다. 유일한 관심사는 보안입니다.

관련 정보