Programação Por Equipe DevBras

Capa do artigo: Wake-on-LAN que funciona: ligar o PC pela rede, de casa e de fora

Wake-on-LAN que funciona: ligar o PC pela rede, de casa e de fora

Configure BIOS, placa de rede e sistema para o pacote mágico ligar o PC, teste na rede local e acorde a máquina de fora sem abrir porta para a internet.

Você está no trabalho, precisa de um arquivo que ficou no PC de casa e o aplicativo de Wake-on-LAN no celular diz "pacote enviado". Nada liga. A resposta curta: o pacote mágico é um broadcast da rede local e só funciona se a placa de rede continuar alimentada e escutando enquanto o PC está desligado. Isso exige três ajustes (BIOS, driver e sistema) e, para acordar de fora, um aparelho sempre ligado dentro de casa que envie o pacote por você.

O caso que atravessa este guia: um desktop chamado estudio, ligado por cabo ao roteador, IP 192.168.0.20, MAC 3C:7C:3F:12:AB:9E, e um Raspberry Pi sempre ligado em 192.168.0.5. A meta é ligar o estudio pelo celular, de qualquer lugar, sem expor nada à internet.

Por que o pacote não chega ou não acorda

O "pacote mágico" é um quadro simples: seis bytes FF seguidos do MAC da placa repetido dezesseis vezes, normalmente enviado por UDP para a porta 9 do endereço de broadcast da rede (192.168.0.255 no exemplo). Toda placa da rede recebe. Só a que reconhece o próprio MAC dentro dele reage.

Daí vêm as três falhas clássicas:

  • A placa está sem energia. Com o PC desligado, alguém precisa manter a interface de rede alimentada. Se a BIOS corta tudo (opções como ErP ou "economia profunda"), não há quem escute.
  • O sistema desligou a escuta. No desligamento, Windows e Linux dizem à placa em que modo ficar. Se o driver não pede "acordar por pacote mágico", ela dorme surda.
  • O pacote não chega à rede certa. Broadcast não atravessa roteador. Mandado da internet para o seu IP público, ele morre no roteador de casa, que não sabe a qual máquina entregar uma placa desligada sem IP ativo.

Repare que o alvo é o MAC, não o IP. Uma máquina desligada não tem conversa de IP com ninguém. Por isso o IP fixo ajuda depois, para conectar, mas não é o que acorda.

Como configurar a máquina que vai acordar

  1. BIOS/UEFI. Procure "Wake on LAN", "Power On By PCI-E" ou "Resume by LAN" e ative. Se existir "ErP Ready" ou "Deep Sleep", desative: essas opções cortam a energia da placa para baixar o consumo em espera. Os nomes mudam por fabricante; o manual da placa-mãe diz qual é o seu.
  2. Driver no Windows. Abra o Gerenciador de Dispositivos, entre no adaptador Ethernet e, na aba Gerenciamento de Energia, marque "Permitir que este dispositivo ative o computador" e "Permitir apenas um pacote mágico para ativar o computador". Na aba Avançado, ative "Wake on Magic Packet" se existir.
  3. Inicialização rápida do Windows. Em muitas máquinas, ela faz o desligamento virar uma hibernação parcial, e o comportamento da placa muda. Se o PC acorda da suspensão mas não do desligado, teste com a inicialização rápida desligada nas opções de energia.
  4. Linux. Confira e ative com ethtool, e torne permanente no gerenciador de rede (exemplo abaixo).
  5. Anote o MAC da placa cabeada, não do Wi-Fi. Wake-on-LAN por Wi-Fi existe em poucos equipamentos e falha com frequência. Use cabo.

No Linux do estudio, a verificação e a ativação ficam assim:

$ sudo ethtool eno1 | grep Wake-on
	Supports Wake-on: pumbg
	Wake-on: d

$ sudo ethtool -s eno1 wol g

$ sudo ethtool eno1 | grep Wake-on
	Supports Wake-on: pumbg
	Wake-on: g

# tornar permanente no NetworkManager
$ nmcli connection show
$ sudo nmcli connection modify "Conexão cabeada 1" 802-3-ethernet.wake-on-lan magic

O d significa desativado e o g significa pacote mágico. Se a linha "Supports" não tiver g, a placa ou o driver não suporta, e nenhum ajuste de software resolve.

Como enviar o pacote mágico na rede local

Antes de pensar em acesso remoto, prove que funciona dentro de casa. Desligue o estudio pelo menu, espere um minuto e envie o pacote do Raspberry Pi. Ferramentas prontas resolvem (wakeonlan e etherwake existem nos repositórios das distribuições comuns), mas o pacote é tão simples que vale ver por dentro:

#!/usr/bin/env python3
# acordar.py
import socket
import sys

def acordar(mac, broadcast="192.168.0.255", porta=9):
    limpo = mac.replace(":", "").replace("-", "")
    if len(limpo) != 12:
        raise ValueError("MAC inválido: " + mac)
    pacote = bytes.fromhex("FF" * 6 + limpo * 16)
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        s.sendto(pacote, (broadcast, porta))

if __name__ == "__main__":
    acordar(sys.argv[1])
    print("pacote enviado para", sys.argv[1])
$ python3 acordar.py 3C:7C:3F:12:AB:9E
pacote enviado para 3C:7C:3F:12:AB:9E

Use o broadcast da sua rede. Se a rede for 192.168.1.0/24, o broadcast é 192.168.1.255. Mandar para 255.255.255.255 também costuma funcionar, mas em máquinas com mais de uma interface o pacote pode sair pela errada.

Se não ligou, descubra se o pacote chegou. Em outra máquina Linux da mesma rede, rode sudo tcpdump -i eth0 -n udp port 9 e envie de novo. Se o tcpdump mostra o pacote, a rede está entregando e o problema está no estudio (BIOS ou driver). Se não mostra, o problema está no envio: broadcast errado, interface errada ou isolamento de clientes no roteador.

Como acordar de fora sem abrir porta

O atalho que aparece em fórum é redirecionar a porta UDP 9 do roteador para o broadcast da rede. Muitos roteadores nem permitem, e os que permitem deixam qualquer pessoa da internet mandar tráfego para dentro da sua rede. Não vale o risco para um botão de ligar.

O desenho sóbrio usa o Raspberry Pi como ponte:

  1. Instale uma VPN no Pi (WireGuard ou um serviço de malha como o Tailscale). O celular entra na VPN; nada fica exposto sem autenticação.
  2. Pelo celular, já na VPN, abra uma sessão SSH com chave no Pi. Se ainda usa senha, veja como configurar chave SSH antes.
  3. Rode python3 acordar.py 3C:7C:3F:12:AB:9E no Pi. O pacote sai de dentro da rede, como no teste local.
  4. Espere o boot e conecte no estudio pelo IP fixo, reservado no DHCP do roteador.

Alguns roteadores têm a função de Wake-on-LAN no próprio painel. Funciona, desde que o painel não esteja exposto à internet com senha fraca, o que é mais perigoso do que o PC ligado.

Erros comuns

  • Testar só pelo Wi-Fi do PC. A maioria das placas sem fio não escuta desligada. Você conclui que "Wake-on-LAN não funciona" quando o problema é o meio.
  • Deixar ErP ou economia profunda ligado na BIOS. A placa fica sem energia e o LED da porta de rede apaga junto com o PC. Sem LED, sem escuta.
  • Usar o MAC errado. Notebook com dock, placa-mãe com duas portas, adaptador USB: cada um tem MAC próprio. O pacote para outro MAC é ignorado em silêncio.
  • Tirar o PC da tomada ou desligar o filtro de linha. Sem energia em espera, nada acorda. Parece óbvio até alguém desligar a régua à noite.
  • Redirecionar porta do roteador para a rede interna. Você troca uma conveniência por uma porta aberta permanente que pouca gente monitora.
  • Atualizar o driver e esquecer de conferir. Atualização do Windows às vezes volta as opções de energia ao padrão. O que funcionava mês passado para de funcionar.

Checklist

  • Wake-on-LAN ativo e ErP desativado na BIOS.
  • Opções de energia do adaptador marcadas no Windows, ou Wake-on: g no ethtool no Linux.
  • Configuração persistente no NetworkManager, conferida depois de reiniciar.
  • MAC da placa cabeada anotado e conferido.
  • LED da porta de rede aceso com o PC desligado.
  • Teste local com o PC desligado pelo menu, não só suspenso.
  • Acesso de fora por VPN até um aparelho interno, sem porta aberta para broadcast.

Desligue o PC agora e olhe a porta de rede atrás do gabinete: o LED continua aceso? Se apagou, nenhum aplicativo vai acordar essa máquina, e o próximo passo é a BIOS. Se acende, a pergunta seguinte é outra: você precisa mesmo dela ligada o tempo todo, ou só quando pede?

Avalie este artigo

Referência: https://www.youtube.com/watch?v=DOep-8oqZJ8