Remote Wake on LAN atrás de 2 roteadores

0

Estou procurando uma solução para meus problemas nos últimos três dias, mas nada funcionou ainda.

Objetivo

Eu preciso ser capaz de acordar meu computador de casa a partir do controle remoto. Agora, eu tenho WOL trabalhando no local: eu posso ligar a máquina do meu telefone android. Eu preciso que ele esteja funcionando mesmo se eu estiver longe de casa.

Minha configuração de rede

Eu tenho dois roteadores, o roteador principal está conectado ao ISP, executa software proprietário, que suporta Port Forwarding mas não tem funcionalidade WOL. O roteador secundário é conectado ao primeiro via cabo ethernet e executa dd-wrt. Meu computador doméstico está conectado ao roteador secundário via cabo ethernet e tem um endereço IP estático. Eu também configurei o DNS dinâmico, ligando ao roteador principal, graças ao no-ip.

Soluções que experimentei

A primeira solução que tentei foi encaminhar o tráfego UDP na porta 7 do roteador principal para a porta 7 do roteador secundário. Em seguida, encaminhe o UDP na porta 7 do roteador secundário para o meu computador doméstico. Isso não deu certo. Mesmo definir uma entrada estática na tabela arp para o meu computador doméstico não funcionou.

A segunda solução, que me parece a mais segura, consiste em ter o dd-wrt verificando os arquivos de log para solicitar ao meu computador em casa e se encontrar algum, dd-wrt emite seu comando wol, ativando o computador. Eu encontrei este script:

#!/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

Eu configurei o script, o log armazenado em /tmp/www/wol.html apenas contém a saída dos dois comandos de eco antes do loop while no script.

Eu acho que é um problema dos logs do dd-wrt, eu os inspecionei e eles parecem não conter nenhuma informação sobre endereços IP ou portas:

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'

Alguém sabe por que o script não está funcionando? Você tem alguma solução alternativa?

    
por ran3000 01.09.2016 / 19:12

1 resposta

0

Ok, finalmente encontrei uma solução.

No roteador principal, envio o tráfego UDP na porta 9 para o roteador secundário.

Eu habilitei o log do syslogd e do firewall em dd-wrt para o segundo roteador, esses logs são salvos no arquivo: / proc / net / ip_conntrack

Eu adicionei este script de inicialização em 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

Ele observa o arquivo de registro de tráfego e, quando vê o tráfego UDP na porta 9, ele ativa meu computador doméstico usando o comando dd-wrt wol.

Funciona perfeitamente, mesmo remotamente, minha única preocupação é com segurança.

    
por 02.09.2016 / 10:20