Arrancando tu equipo de forma remota desde tu dispositivo Android

Imaginaos que, estando fuera de casa, queréis acceder a algún archivo o servicio de vuestro PC de casa pero éste está apagado. Lo que os voy a explicar aquí es cómo encenderlo de forma remota mediante wake on lan.

En el equipo a encender

En el equipo que queréis encender tenéis que instalar ethtool, que es una utilidad que permite controlar diversos parámetros de la tarjeta de red. Para ello, como siempre:

# aptitude install wakeonlan ethtool

Una vez instalado, tenemos que configurar nuestra tarjeta de red para que, una vez que se apague el equipo, ésta quede “a la escucha” de paquetes especiales de red llamados MagicPacket (paquetes mágicos), de forma que, cuando reciba uno, la máquina se encenderá. Para ello ejecutamos -como root- el siguiente comando:

# ethtool -s eth0 wol g

Con “-s eth0” indicamos la interfaz que queremos configurar con Wake On Lan y con “wol g” le decimos que queremos configurar dicha interfaz tal y como comentábamos, esto es, que “despierte” (que arranque) al recibir un “MagicPacket”.

En el dispositivo Android

Ahora vamos al dispositivo Android. En este caso, instalamos la aplicación Wake On Lan (intuitivo, no?). Una vez instalada, simplemente tenemos que indicar el equipo queremos encender. Para ello, especificamos la dirección MAC de la tarjeta de red del equipo queremos encender y su IP. También se especifica un puerto, que normalmente es el puerto 7 o el puerto 9, pero os funcionará con cualquier puerto.

Lógicamente, si la IP que indicáis es la IP local del equipo (algo como 192.168.1.3), esto sólo os funcionará si estáis precisamente en esa misma red (por ejemplo, conectados por wifi al router de vuestra casa). Pero nosotros queríamos encenderlo estando fuera de casa, usando para ello nuestra conexión de datos 3G/HSDPA del móvil. Os cuento cómo tenéis que hacerlo.

Básicamente tenéis que configurar un port forwarding (una redirección de puertos) en el router, de forma que los paquetes UDP dirigidos a la IP pública vuestra y puerto UDP -por ejemplo- 33333-los reenvíe a la dirección de broadcast de vuestra red. Esta dirección será algo acabado en .255. Por ejemplo, si vuestro PC tiene la IP 192.168.1.3, la máscara de red será 255.255.255.0 y, por tanto, la dirección de broadcast es la 192.168.1.255. Ésta es la que tenéis que especificar en el router.

En particular, si nuestro router adsl es Cisco, os indico lo que tenéis que configurar exactamente:

1.- En la interfaz Vlan1 permitiremos el forward de los broadcast:

# ip directed-broadcast

2.- Añadimos un port forwarding a la dirección broadcast de nuestra red y un puerto UDP (el que queramos, da igual):

# ip nat inside source static udp 192.168.1.255 33333 interface Dialer1 33333

donde 33333 es el puerto que hemos especificado (insisto, podemos poner el que queramos entre 1024 y 65535).

Os preguntaréis, ¿por qué no puedo especificar la IP propia del PC en lugar de la dirección broadcast? Pues porque el router retiene la dirección MAC de vuestro PC durante un tiempo (*), pero al cabo de un rato se borra dicha dirección MAC de las tablas del router (para ser más exactos, de las tablas arp del switch que vuestro router adsl incorpora). Esto lo podríais solucionar si en vuestro router podéis meter traducciones arp estáticas, pero no es una opción que esté normalmente disponible en los routers adsl domésticos (al menos no desde el interfaz web, que será seguro el que uséis para “trastear” el router (**)).

Volviendo al tema en cuestión, si simplemente tenéis que especificar la IP pública de vuestro router en la apli Wake On Lan y, como siempre, la MAC del PC que queréis arrancar (eso no cambia).

Claro, prácticamente todo el mundo que usa banda ancha con adsl usa direccionamiento dinámico para la IP pública. ¿Cómo acceder entonces? Pues usáis Dns Dinámico. Existen varios proveedores de este servicio. Yo uso dyndns y me va de perlas.

En un equipo Linux

Si lo quisiéramos arrancar desde un equipo Linux en lugar de un dispostivo Android, instalaríamos el paquete wakeonlan:

# aptitude install wakeonlan

Para arrancar el equipo simplemente ejecutaremos

wakeonlan MAC

donde MAC es la dirección MAC del equipo que queremos arrancar.

 

Para el caso de IP pública:

$ wakeonlan -i IP_PUBLICA_O_NOMBRE -p 33333 MAC

También podéis usar el comando etherwake:

# aptitude install etherwake

Y, de forma similar a como hacíamos con wakeonlan, ejecutaríamos:

$ etherwake MAC

Si alguien se ha perdido y quiere que le concrete/explique algo, que lo comente y se aclara lo que sea necesario. Es posible que use algún tecnicismo pero debo partir de un cierto nivel de redes porque si no este artículo sería eterno. Insisto, si tenéis dudas y os interesa el tema preguntad y hallaréis respuesta -en la medida que esté en mi mano-.

Espero que os sea útil.

 

(*) De hecho, si especificáis la IP del equipo en lugar de la de broadcast, os funcionará durante unos minutos, pero si pasa un rato y probáis es posible que ya no os funcione porque el router ya no recuérda qué MAC corresponde a la IP en cuestión ni por qué puerto del router (del switch, para ser más exactos) tiene que enviar el paquete.

(**) Si alguien quiere ir a más, podéis acceder con telnet ssh y usar una interfaz de comandos que permite ir más allá y tener más control del router que desde el interfaz web.

NOTA: Previamente hay que activar el WOL en BIOS. Si la placa es moderna normalmente no hace falta ni poner el cable desde la tarjeta de red a la placa ya que si soporta PCI 2.2 tendrá la energía suficiente para el WOL. Si tiene tarjeta integrada, obviamente, tampoco hará falta el cable.