Wake-on-LAN via VPN smette di funzionare? Correggi la voce ARP
I pacchetti magici attraversano il tunnel, ma il router li scarta quando la sua voce ARP scade. Confronta tre percorsi di consegna, poi fissa definitivamente l'indirizzo MAC.
Invia un pacchetto di risveglio subito dopo lo spegnimento e il PC torna; lo stesso comando la mattina dopo non fa nulla. Nulla della configurazione VPN è cambiato e l'inoltro della porta punta ancora all'indirizzo giusto. La differenza è il tempo: la tabella dei vicini del router ha dimenticato la macchina dormiente, quindi non ha un indirizzo MAC da mettere nel frame. È quella scadenza, non il tunnel, a spiegare la maggior parte dei guasti di Wake-on-LAN su una VPN.
Il primo risveglio funziona e il successivo no
Un router inoltra un frame a un indirizzo privato cercando la destinazione nella tabella dei vicini. Finché la macchina è accesa risponde all'ARP, così la mappatura resta fresca. Quando si spegne, nulla risponde, la voce scade dopo qualche minuto e i frame successivi per quell'indirizzo vengono scartati anche se l'IP e l'inoltro della porta restano validi.
Lo schema ti dice quale guasto hai. Un risveglio che non funziona mai indica la consegna: porta sbagliata, destinazione sbagliata o un firewall che scarta il pacchetto prima che raggiunga la LAN. Un risveglio che funziona una volta e poi fallisce per ore indica la voce di vicino. Un risveglio che funziona finché non cambia il lease DHCP indica l'indirizzamento, che una prenotazione corregge.
Verifica che l'indirizzo sia stabile prima di toccare ARP. Se la macchina dormiente prende un nuovo indirizzo alla scadenza del lease, una voce di vicino fissa per il vecchio indirizzo sarà permanente e inutile allo stesso tempo. Imposta prima una prenotazione DHCP perché l'indirizzo sopravviva ai riavvii.
Di cosa ha bisogno il pacchetto magico dalla rete
Il carico utile è semplice: 102 byte formati da sei byte 0xFF seguiti dall'indirizzo MAC di destinazione per sedici volte, di solito inviati alla porta UDP 9. Su una LAN piatta esce come broadcast, ogni porta lo riceve e la scheda di rete spenta riconosce il proprio indirizzo.
Attraverso una VPN il pacchetto arriva al router come unicast verso un indirizzo privato o come broadcast diretto alla sottorete. Nel caso unicast il router deve risolvere la destinazione in un indirizzo MAC prima di poter mettere il frame sulla LAN, ed è proprio quella risoluzione a fallire mentre l'host dorme.
Alcuni strumenti inviano alla porta 7 invece che alla 9, e alcuni apparati bloccano il broadcast diretto per impostazione predefinita. Sono guasti di consegna, non di ARP, quindi controlla destinazione e porta prima di modificare la tabella dei vicini.
Tre percorsi verso un host dormiente
Hai tre modi pratici per portare il frame sulla LAN, e la scelta giusta dipende da cosa controlli.
| Method | What it needs | Where it breaks |
|---|---|---|
| Subnet-directed broadcast | A wake tool that accepts a broadcast address and a router that forwards it | Broadcast filtering, or a tool that only takes a MAC |
| Helper on the LAN | An always-on host such as the VPN server | No suitable host, or the host cannot reach the target VLAN |
| Permanent neighbour entry | Router shell access and the target MAC | NIC replacement or address change |
Scegli l'host di supporto quando esiste, perché trasmette sul link e non richiede eccezioni sul router. Scegli il broadcast diretto quando il router lo consente già e lo strumento di risveglio accetta un indirizzo. Scegli la voce statica quando nessuno dei due è disponibile e puoi eseguire un comando sul router.
Queste opzioni non si escludono. Una voce permanente fa sopravvivere al sonno anche il percorso unicast, cosa utile quando il client VPN può inviare solo a un indirizzo specifico.
Rendi permanente la voce di vicino
Su un router con shell Linux, un solo comando fissa la mappatura. I valori qui appartengono a una LAN di esempio e vanno sostituiti con i tuoi:
ip neigh replace 192.168.50.23 lladdr 3c:7c:3f:12:9a:4e dev br0 nud permanent
ip neigh show dev br0 | grep 192.168.50.23Lo stato nud permanent mantiene la voce oltre i timeout ARP e la usa per l'inoltro mentre la macchina è spenta. Il secondo comando dimostra che la voce esiste e mostra l'interfaccia a cui appartiene, cosa che conta sui router con un bridge ospiti o una VLAN separata.
Rendila persistente al riavvio con qualunque hook offra il firmware: uno script in /jffs/scripts su Asuswrt-Merlin, un'unità oneshot systemd su un server Linux che fa da gateway, una Neighbor= stanza in systemd-networkd, o una voce in /etc/ethers che gli strumenti locali leggono. Un comando digitato in una shell sparisce al riavvio successivo, ed è il motivo più comune per cui una correzione funzionante sembra smettere di funzionare.
Prova dall'esterno e sappi quando rimuoverla
Metti la macchina in sospensione e attendi almeno dieci minuti, abbastanza perché qualsiasi voce dinamica scada. Poi invia la richiesta di risveglio dal client VPN e osserva entrambi i lati del router:
tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9La prima cattura dimostra che il pacchetto è arrivato dal tunnel; la seconda che il router ha messo un frame sulla LAN. Un pacchetto magico valido appare come 102 byte con il MAC ripetuto, quindi controlla la lunghezza oltre alla destinazione. Se il frame lascia il bridge LAN e la macchina resta spenta, il problema rimanente è nel dispositivo: avvio rapido, sospensione profonda o un'impostazione del BIOS che toglie alimentazione alla scheda di rete.
Rimuovi la voce quando cambia la scheda di rete, e aggiornala quando sposti la macchina su un altro indirizzo. Una mappatura permanente è un'eccezione deliberata, e un'eccezione che nessuno ricorda è il modo in cui un futuro portatile finisce per ricevere frame destinati a un desktop dismesso.