Skip to content

Instantly share code, notes, and snippets.

@ErneX
Created October 6, 2013 22:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ErneX/6859700 to your computer and use it in GitHub Desktop.
Save ErneX/6859700 to your computer and use it in GitHub Desktop.
iMac wake on lan + remote access
Wake On Lan:
Mi router es un Comtrend y este router en particular la tabla ARP no hay manera de crear entradas permanentes desde la UI web, pero se puede via telnet. No recuerdo ahora exactamente bajo cuales circunstancias se olvidaba de las entradas ARP que se creaban automáticamente, creo que si reiniciabas el router las perdía o algo. Entonces busqué la manera de recrear estas entradas de forma automática periódicamente mediante un script para que estuviesen al día y poder enviar el magic packet y que el router supiese a cual ordenador pasarlo.
La solución con la que he dado es esta:
1.
Instalar SleepWatcher http://www.bernhard-baehr.de es un programa que lo instalas con launchd y te permite ejecutar scripts cuando el ordenador se duerme o despierta.
2.
Una vez instalado el daemon busca en cada $HOME de usuario dos ficheros: ~/.wakeup y ~/.sleep, este es el contenido de mi fichero .wakeup:
expect -f /Users/ErneX/.sleepwatcher/router
Y esto el contenido de /Users/ErneX/.sleepwatcher/router
#!/usr/bin/expect -f
set timeout 100
set router "192.168.1.1"
set login "logindelrouter"
set password "passworddelrouter"
set ip_a "192.168.1.210"
set mac_a "00:1C:21:B9:11:3C"
spawn telnet $router
expect "Login: "
send -- "$login\r"
expect "Password: "
send -- "$password\r"
expect " >"
send "arp add $ip_a $mac_a\r"
expect " >"
send "exit"
exit
EOF
Esta es la descripción MAN de expect:
Expect is a program that "talks" to other interactive programs according to a
script. Following the script, Expect knows what can be expected from a program and
what the correct response should be. An interpreted language provides branching
and high-level control structures to direct the dialogue. In addition, the user
can take control and interact directly when desired, afterward returning control to
the script.
Básicamente con ese programa cada vez que el iMac despierta actualiza en el router la tabla ARP con la IP del iMac y la MAC address como permanentes (en caso de que las hubiese perdido).
3.
En system preferences del iMac > Energy Saver > Schedule… he configurado el iMac para que cada día se despierte a las 6AM. Con esto garantizo que cada día el iMac actualice la puta entrada en la tabla ARP para poder llegarle desde fuera.
4.
En el router deberás hacer que el puerto 9 UDP llegue hacia el ordenador que quieres poder hacer wake on lan remoto.
5.
Para el tema de la dirección IP mi router soporta únicamente Dyn http://dyn.com yo he comprado una cuenta (ahora son de pago) y el router se encarga de actualizar la IP con ellos y tengo un dominio con el cual le llego.
6.
Para enviar el magic packet y hacer que se encienda lo hago desde un VPS que tengo (Ubuntu) utilizando esta app command line https://launchpad.net/ubuntu/+source/wakeonlan
Hice una pequeña función que está en mi bash profile en el VPS para ejecutarla
wakehome()
{
IP=`host boobies.dyndns.org | grep boobies.dyndns.org | awk '{print \$4}'`
CMD="wakeonlan -i ${IP} 00:1C:21:B9:11:3C"
eval $CMD
}
A esta app hay que pasarle la IP y no un domain name por eso he tenido que hacer esta chorrada.
7.
Una vez enviado el magic packet el trasto debería salir de sleep, yo también tengo obviamente hecho un forward hacia el SSH de ese ordenador para poder entrar por allí y luego crear tunnels lo que necesite (remote desktop, etc).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment