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 命令唤醒我的家用电脑。

它甚至可以在远程完美运行,我唯一担心的是安全性。

相关内容