Ligando equipamentos com Wake-On-Lan (WOL)

Introdução:
Wake On Lan é uma tecnologia que pemite ligar ("acordar") um ativo de rede (micros, servidores, roteadores, switches, etc) que esteja desligado, através do envio de um pacote especial chamado MagicPacket para a placa de rede do computador.

Limitações:
* Funciona apenas em redes cabeadas, ou seja, não funciona em redes wireless.
* O equipamento que será ligado e o que vai enviar o MagicPacket precisam estar no mesmo segmento de rede. MagicPackets são pacotes de broadcast e portanto não atravessam roteadores.
* Placas de rede mais antigas (MUITO antigas)podem não ter suporte à tecnologia.

Verificando o suporte:
Verificar se sua placa de rede tem suporte a WOL é fácil: em caso de placas de rede on-board, basta acessar a BIOS do computador, procurar pela opção e colocar como "Yes" ou "Enabled". Costuma ficar na parte de gerenciamento de energia (Power Management). Procure por opções como WOL, Wake On Lan, Power On By PCI devices, Power On By PCIE devices, etc. Veja as imagens abaixo.





Caso a sua bios não mostre uma dessas opções, nem tudo está perdido (a minha por exemplo não mostra, no entanto o WOL funciona perfeitamente). Entre no Linux, e utilize o comando ethtool, que verifica e configura opções nas placas de rede.

Nota: utilizo WOL em um host Xen e percebi que a interface eth0 é uma interface virtual. A interface real é a peth0 (provavelmente o "p" é de physical (física)). Se esse for o seu caso, certifique-se de informar a interface correta (peth0).

[root@debian ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes
A parte que nos interessa são as linhas "Supports Wake-on" e "Wake-on". "Supports Wake-on" mostra os tipos de tecnologias de WOL que a placa suporta (existem mais de uma). No caso essa placa suporta apenas o modo "g", que é justamente WOL via MagicPacket. A linha "Wake-on" mostra quais tecnologias WOL estão ativos atualmente na placa. No nosso caso, está mostrando "d", de "disabled". Ou seja, essa placa suporta WOL via MagicPacket mas atualmente a opção está desligada.

Ativando o suporte via software:
Para ativar o suporte a WOL (com MagicPacket), utilize o seguinte comando:
/sbin/ethtool -s eth0 wol g
Ao reiniciar a máquina, essa configuração é perdida. Assim é necessário acrescentar essa linha ao arquivo /etc/rc.local, para que ela seja executada a cada boot (nota: a última linha do arquivo /etc/rc.local tem de ser exit 0). Isso habilita o WOL via MagicPacket na interface selecionada (eth0) a cada boot. O problema é que durante o processo de desligamento da máquina, a interface de rede é desligada. Para evitar isso, é necessário editar o arquivo /etc/init.d/halt. Procure logo no começo do arquivo pela linha NETDOWN=yes e troque para NETDOWN=no.

Despertando
Para despertar a máquina, é necessário executar um cliente WOL em outro computador.

Linux:
instale o pacote wakeonlan (apt-get install wakeonlan)

execute o comando wakeonlan (em alguns casos o comando pode se chamar wol, mas a sintaxe é a mesma):
wakeonlan MAC-ADDRESS 
onde MAC-ADDRESS é o endereço de hardware (MAC) da máquina que se deseja ligar. Para descobrir o endereço MAC de uma interface, digite o comando ifconfig e procure por HWaddr.
Se a máquina cliente (onde o comando wakeonlan é executado) possui mais de uma interface de rede, é necessário informar o endereço de broadcast da rede à qual o micro a ser despertado pertence, com a opção -i. Nesse caso o comando ficaria:
wakeonlan -i 192.168.1.255 AA:BB:CC:11:22:33 
Supondo-se uma rede 192.168.1.0/24 e um equipamento com MAC AA:BB:CC:11:22:33.

Existe a possibilidade de informar a porta UDP a ser utilizada, com a opção -p. O padrão é 9. Minha máquina normalmente é despertada com a porta 7 (embora eu nunca tenha testado com outras), então meu comando fica assim:
wakeonlan -i 192.168.1.255 -p 7  AA:BB:CC:11:22:33
A última opção é a -f, que permite o uso de um arquivo com os endereços de diversos equipamentos a serem ligados. Útil por exemplo para ligar vários equipamentos em uma hora específica, visando algum tipo de manutenção (atualização/execução de antí-virus, por exemplo).

Existem também clientes WOL para o modo gráfico, como o GWakeOnLan (http://code.google.com/p/gwakeonlan/ ), escrito em GTK:



Roteadores com DD-WRT instalado:
Se o seu roteador possui instalada a distro DD-WRT (o meu tem, e eu recomendo), você pode cadastrar vários equipamentos na interface gráfica, e realizar o WOL a partir de lá:



Windows:
Uma busca no Google mostra que existem diversos clientes disponíveis para Windows. Infelizmente, como eu nunca utilizei nenhum, não tenho um específico para indicar. Se alguém tiver um pra sugerir, pode mandar a dica para antipragas@gmail.com, que eu atualizo o post (ou colocar nos comentários).

Uma última observação: um problema que me ocorre às vezes é quando o micro é ligado e desligado na sequência (sem que o sistema operacional seja carregado), ou quando ele é desligado sem o procedimento normal (em caso de falta de energia, por exemplo), o WOL fica indisponível até o proximo boot. Desconfio que seja devido ao fato da minha BIOS não dar suporte à tecnologia. Em casos como esse, basta ligar o equipamento normalmente (pelo botão de power) e após o shutdown/restart correto o funcionamento volta ao normal.

Um comentário:

Allan Spindola de Ataides disse...

Meu amigo parabéns, pela primeira vez encontro uma explicação clara e funcional do recurso Wakeonlan, tudo que vi até agora não me agradava ou simplesmente não funcionava, sua dica de ativar o suporte via software é que me ajudou e foi muito importante.
Abraço.