Последние 3 дня я искал решение своих проблем, но пока ничего не получалось.
Цель
Мне нужно иметь возможность разбудить мой домашний компьютер с пульта. Теперь у меня есть WOL, работающий в местном масштабе: я могу включить машину с моего телефона Android. Мне нужно, чтобы это работало, даже если я вдали от дома.
Моя настройка сети
У меня есть два маршрутизатора, основной маршрутизатор подключен к Интернет-провайдеру, работает на проприетарном программном обеспечении, которое поддерживает переадресацию портов, но не имеет функциональности WOL. Вторичный маршрутизатор подключен к первому через кабель 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 $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
раз и содержит выходные данные двух команд 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'
Кто-нибудь знает, почему скрипт не работает? Есть ли у вас альтернативное решение?
источник
Ответы:
Хорошо, я наконец нашел решение.
На основном маршрутизаторе я пересылаю UDP-трафик, поступающий через порт 9, на дополнительный маршрутизатор.
Я включил syslogd и вход в брандмауэр в dd-wrt для второго маршрутизатора, эти журналы сохраняются в файле: / proc / net / ip_conntrack
Я добавил этот скрипт запуска в dd-wrt:
Он просматривает файл журнала трафика и, когда он видит трафик UDP на порту 9, он пробуждает мой домашний компьютер с помощью команды dd-wrt wol.
Он отлично работает даже удаленно, моя единственная забота - безопасность.
источник