2 個路由器後面的 LAN 遠端喚醒

2 個路由器後面的 LAN 遠端喚醒

在過去的三天裡我一直在尋找解決我的問題的方法,但還沒有任何效果。

目標

我需要能夠遠端喚醒我的家用電腦。現在,我可以在本地運行 WOL:我可以從 Android 手機打開機器。即使我不在家,我也需要它正常工作。

我的網路設定

我有兩個路由器,主路由器連接到 ISP,運行專有軟體,支援連接埠轉發,但沒有 WOL 功能。輔助路由器透過乙太網路電纜連接到第一個路由器並執行 dd-wrt。我的家用電腦透過乙太網路線連接到輔助路由器,並具有靜態 IP 位址。我還配置了動態 DNS,連結到主路由器,這要歸功於 no-ip。

我嘗試過的解決方案

我嘗試的第一個解決方案是將來自主路由器連接埠 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 命令喚醒我的家用電腦。

即使在遠程,它也能完美運行,我唯一關心的是安全性。

相關內容