Удаленное пробуждение по локальной сети за 2 маршрутизаторами

Я искал решение своих проблем в течение последних 3 дней, но ничего не работало.

цель

мне нужно, чтобы иметь возможность разбудить мой домашний компьютер с пульта дистанционного управления. Теперь у меня есть WOL, работающий в местном: я могу включить машину с моего телефона android. Мне нужно работать, даже если я далеко от дома.

Мои настройки сети

у меня есть два маршрутизатора, основной маршрутизатор подключен к интернет-провайдеру, работает проприетарный программное обеспечение, которое поддерживает переадресацию портов, но не работает Воль. Вторичный маршрутизатор подключен к первому с помощью кабеля ethernet и выполняет DD-wrt. Мой домашний компьютер подключен к дополнительному маршрутизатору через кабель ethernet и имеет статический IP-адрес.
Я также настроил динамический DNS, подключившись к основному роутеру, благодаря no-ip.

решения я пробовал

первое решение, которое я попытался было направить UDP-трафик, поступающий в порт 7 основного маршрутизатор к порту 7 дополнительного маршрутизатора. Затем перенаправьте UDP, входящий в порт 7 вторичного маршрутизатора на мой домашний компьютер. Ничего из этого не вышло. Даже установка статического входа в таблицу 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 }' | 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 просто содержат выходные данные двух команд echo перед циклом while в скрипте.

Я думаю, что это проблема журналов 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'

кто-нибудь знает, почему скрипт не работает? Есть ли у вас альтернативное решение?

25
задан ran3000
17.03.2023 11:11 Количество просмотров материала 2600
Распечатать страницу

1 ответ

Ок, я, наконец, нашел решение.

на основном маршрутизаторе я перенаправляю UDP-трафик, поступающий через порт 9 на дополнительный маршрутизатор.

Я включил syslogd и брандмауэр, входящий в DD-wrt для второго маршрутизатора, эти журналы сохраняются в файле: /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

Он смотрит файл журнала трафика и, когда он видит UDP-трафик на порту 9, он пробуждает мой домашний компьютер с помощью DD-wrt wol команда.

оно работает совершенно даже отдаленно, моя единственная забота обеспеченность.

0
отвечен ran3000 2023-03-18 18:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

dd-wrt
logging
networking
router
wake-on-lan
Вверх