Etiquetas

jueves, 6 de diciembre de 2012

Despertares (remotos): Cómo despertar a tu PC remotamente (WoL)

La técnica se llama wake-on-lan, ya que originalmente estaba circunscripta a una red local. En este artículo se muestra cómo podés despertar a tu pc desde internet o lo que suele llamarse wake-on-wan.
En los tiempos que corren ahorrar energía es imperativo. Esto puede servir para no dejar siempre encendidas máquinas cuando no se las precisa. Entonces, podemos encenderlas desde donde querramos, cuando querramos y luego acceder remotamente a ellas ya sea usando ssh, vpn, o el protocolo que prefiramos.
El procedimiento lo utilicé en un Debian GNU/Linux, pero debe ser aplicable a cualquier otra distribución o incluso, a otros sistemas operativos.


1) Configurar el BIOS del motherboard para soportar Wake-on-lan

Antiguamente, cuando los motherboard no traían placas de red integradas para que WoL (wake-on-lan) funcionara había que agregar un cable que conectaba la placa con el motherboard. Actualmente, con placas integradas eso no es necesario.

Sí suele ser necesario activar la funcionalidad en el BIOS:

En un Motherboard Asus M3N que es donde lo probé hay que ir a la sección "Power" y colocar "enabled" en la opción "Power On by PCI devices".

2) Verificar el soporte por el Sistema Operativo

El siguiente paso es verificar que el sistema operativo soporte WoL y que utilice el llamado "Magic Packet" que es una señal determinada de bits en capa 2 (ethernet) que le dirán a la placa de red "Despiértate amgigo!". Más información sobre el "magic packet": http://en.wikipedia.org/wiki/Magic_packet#Magic_packet
Este paquete mágico es una trama ethernet tipo broadcast, que por consiguiente contiene 6 bytes con 255 (FF FF FF FF FF FF), seguidos por dieciseis repeticiones de la dirección MAC de la máquina de destino. Como la MAC son 48bits (6 bytes), la trama tendrá 102 bytes de datos (ver el enlace para más detalles).

La herramienta para comprobar que nuestra máquina soporta WoL es ethtool:

# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: g
Wake-on: g

Current message level: 0x0000003f (63)
drv probe link timer ifdown ifup
Link detected: yes

Nótese las opcions "supports Wake-on" y "Wake-on". La 'g' indica que la placa espera el paquete mágico para despertar.
En caso de que la opción que aparezca sea otra conviene agregar la siguiente linea en /etc/network/interfaces:

auto eth0
iface eth0 inet static
address 192.168.121.3
netmask 255.255.255.0
gateway 192.168.121.1
# BOF: Habilitar Wake-On-Lan
post-up /sbin/ethtool -s $IFACE wol g
post-down /sbin/ethtool -s $IFACE wol g
# EOF: Fin habilitar Wake-On-Lan


Las opciones en post-up y post-down hará que ethtool fuerce a la placa a utilizar el paquete mágico.

3) Obtener la dirección MAC de la tarjeta de red

En cualquier Linux esto puede hacerse con:

# ifconfig eth0 | grep HWaddr | awk '{print $5}'
11:22:33:AA:BB:CC

En este ejemplo la MAC (11:22:33:AA:BB:CC) y las direcciones IPs son ficticias.
Será necesario tomar nota de la dirección que tengamos para utilizarla luego.

3) Probando despertar

Para enviar el paquete mágico existen varias opciones. Pero la más sencilla es usar la aplicación wakeonlan, que no requiere correr como root. Para instalarlo sólo hay que instalar el paquete wakeonlan.

Para probar el funcionamiento dentro de una red LAN:

$ wakeonlan 11:22:33:AA:BB:CC

4) Wake-On-Wan: Más allá de la red local
Lo bueno es que wakeonlan, al igual que otros softwares nos permite empaquetar la trama del paquete máquico dentro de un datagrama UDP. Eso significa que el datagrama puede enrutarse, es decir, viajar por la Internet. De esa forma podremos despertar una máquina desde cualquier lugar del mundo.

Como la máquina estará apagada el switch de la red no tendrá idea a qué puerto entregar los frames ethernet. Por eso, en el router o firewall habrá que agregar una entrada fija en la tabla de ARP. Esta entrada deberá "mapear" la MAC del PC con la dirección IP interna que tenga asignada. En las ficticias que usé para este ejemplo:



También, en el router o firewall tendremos que hacer un NAT de destino o "PORT FORWARD" como lo llaman en router hogareños. La regla destinará lo que llegue al puerto externo (3875, ficticio en este ejemplo) al puerto 9 (puerto de descarte) de la máquina de destino. El protocolo de capa 4 es UDP, que transporta el frame del paquete mágico.


Regla de port forward:




Lo que resta es probar despertarla desde internet, de la siguiente forma:

$ wakeonlan -i IP_o_URL -p 3875 11:22:33:AA:BB:CC


No hay comentarios.:

Publicar un comentario