Wake-on-LAN cez VPN prestal fungovať? Opravte záznam ARP
Magické pakety prejdú tunelom, ale router ich zahodí, keď mu vyprší záznam ARP. Porovnajte tri cesty doručenia a natrvalo pripnite MAC adresu.
Pošlite prebúdzací paket hneď po vypnutí a počítač sa vráti; ten istý príkaz na druhý deň ráno nič neurobí. V konfigurácii VPN sa nič nezmenilo a presmerovanie portu stále ukazuje na správnu adresu. Rozdiel je v čase: tabuľka susedov routera zabudla spiacu mašinu, takže nemá MAC adresu, ktorú by vložila do rámca. Práve toto vypršanie, nie tunel, vysvetľuje väčšinu zlyhaní Wake-on-LAN cez VPN.
Prvé prebudenie funguje, druhé nie
Router preposiela rámec na privátnu adresu tak, že cieľ hľadá vo svojej tabuľke susedov. Kým stroj beží, odpovedá na ARP, takže mapovanie zostáva čerstvé. Keď sa vypne, nič neodpovedá, záznam po niekoľkých minútach vyprší a neskoršie rámce na túto adresu sa zahodia, aj keď IP a presmerovanie portu zostávajú platné.
Vzor vám povie, ktorú závadu máte. Prebudenie, ktoré nikdy nefunguje, ukazuje na doručenie: nesprávny port, nesprávny cieľ alebo firewall, ktorý paket zahodí skôr, než sa dostane do LAN. Prebudenie, ktoré raz zaberie a potom hodiny zlyháva, ukazuje na záznam suseda. Prebudenie, ktoré funguje do zmeny lízingu DHCP, ukazuje na adresovanie, ktoré rieši rezervácia.
Než sa dotknete ARP, overte, že adresa je stabilná. Ak spiacu mašinu po vypršaní lízingu získa novú adresu, pripnutý záznam suseda pre starú adresu bude zároveň trvalý aj zbytočný. Najprv nastavte rezerváciu DHCP, aby adresa prežila reštarty.
Čo magický paket od siete potrebuje
Užitočné zaťaženie je jednoduché: 102 bajtov zo šiestich bajtov 0xFF, za ktorými šestnásťkrát nasleduje cieľová MAC adresa, zvyčajne odosielané na port UDP 9. V plochej LAN vychádza ako broadcast, každý port ho prijme a vypnutá sieťová karta rozpozná vlastnú adresu.
Cez VPN dorazí paket do routera ako unicast na privátnu adresu alebo ako broadcast smerovaný do podsiete. V prípade unicast musí router preložiť cieľ na MAC adresu, než môže rámec vložiť do LAN, a práve tento preklad zlyháva, kým hostiteľ spí.
Niektoré nástroje posielajú na port 7 namiesto 9 a niektoré zariadenia štandardne blokujú smerovaný broadcast. To sú chyby doručenia, nie ARP, preto pred zmenou tabuľky susedov skontrolujte cieľ a port.
Tri cesty k spiacemu hostiteľovi
Rámec dostanete do LAN tromi praktickými spôsobmi a správna voľba závisí od toho, čo ovládate.
| 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 |
Zvoľte pomocného hostiteľa, keď nejaký je, pretože vysiela na linku a nepotrebuje výnimku v routeri. Zvoľte smerovaný broadcast, keď ho router už povoľuje a prebúdzací nástroj podporuje adresu. Zvoľte statický záznam, keď ani jedno nie je dostupné a môžete v routeri spustiť príkaz.
Tieto možnosti sa nevylučujú. Trvalý záznam tiež umožní, aby unicast cesta prežila spánok, čo je užitočné, keď klient VPN vie posielať len na konkrétnu adresu.
Urobte záznam suseda trvalým
Na routeri s linuxovým shellom pripne mapovanie jediný príkaz. Hodnoty tu patria ukážkovej LAN a musíte ich nahradiť svojimi:
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.23Stav nud permanent drží záznam aj cez časové limity ARP a používa ho na preposielanie, kým je stroj vypnutý. Druhý príkaz dokazuje, že záznam existuje, a ukazuje rozhranie, ku ktorému patrí, čo je dôležité na routeroch so samostatným hostovským mostom alebo VLAN.
Urobte ho odolným voči reštartu pomocou akéhokoľvek háku, ktorý firmware ponúka: skript v /jffs/scripts na Asuswrt-Merlin, oneshot jednotka systemd na linuxovom serveri v role brány, Neighbor= stanza v systemd-networkd, alebo záznam v /etc/ethers, ktorý lokálne nástroje čítajú. Príkaz napísaný do shellu zmizne pri ďalšom reštarte, a to je najčastejší dôvod, prečo funkčná oprava vyzerá, že prestala fungovať.
Otestujte to zvonku a vedzte, kedy záznam odstrániť
Uspite stroj a počkajte aspoň desať minút, dosť dlho na to, aby vypršal každý dynamický záznam. Potom pošlite prebúdzaciu požiadavku z klienta VPN a sledujte obe strany routera:
tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9Prvé zachytenie dokazuje, že paket prišiel z tunela; druhé, že router vložil rámec do LAN. Platný magický paket vyzerá ako 102 bajtov s opakovanou MAC, preto skontrolujte dĺžku aj cieľ. Ak rámec opustí LAN most a stroj zostane vypnutý, zostávajúci problém je v zariadení: rýchly štart, hlboký spánok alebo nastavenie v BIOS, ktoré odpojí napájanie sieťovej karty.
Záznam odstráňte, keď sa zmení sieťová karta, a aktualizujte ho, keď stroj presuniete na inú adresu. Trvalé mapovanie je vedomá výnimka a výnimka, na ktorú si nikto nespomenie, je spôsob, akým budúci notebook začne dostávať rámce určené vyradenému stolnému počítaču.