2 台のルーターの背後にあるリモート Wake on LAN

2 台のルーターの背後にあるリモート Wake on LAN

私は過去 3 日間、問題の解決策を探してきましたが、まだ何も解決していません。

ゴール

自宅のコンピューターをリモートから起動できるようにする必要があります。現在、WOL がローカルで動作しています。Android フォンからマシンをオンにできます。自宅から離れているときでも動作する必要があります。

私のネットワーク設定

私にはルーターが 2 台あります。プライマリ ルーターは ISP に接続されており、ポート転送はサポートしていますが WOL 機能のない独自のソフトウェアを実行しています。セカンダリ ルーターはイーサネット ケーブル経由で最初のルーターに接続されており、dd-wrt ​​を実行しています。自宅のコンピューターはイーサネット ケーブル経由でセカンダリ ルーターに接続されており、静的 IP アドレスを持っています。また、no-ip のおかげで、プライマリ ルーターにリンクする動的 DNS も構成しました。

私が試した解決策

私が最初に試した解決策は、プライマリ ルーターのポート 7 に着信する UDP トラフィックをセカンダリ ルーターのポート 7 に転送することでした。次に、セカンダリ ルーターのポート 7 に着信する UDP を自宅のコンピューターに転送しました。これはうまくいきませんでした。自宅のコンピューターの ARP テーブルに静的エントリを設定してもうまくいきませんでした。

2 番目の解決策は、私にとって最も安全だと思われるもので、自宅のコンピュータへのリクエストのログ ファイルを 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 ループの前の 2 つの 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 トラフィックをセカンダリ ルータに転送します。

2番目のルータの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 コマンドを使用して自宅のコンピューターを起動します。

リモートでも完璧に動作しますが、唯一の懸念はセキュリティです。

関連情報