Wake-on-LAN przez VPN przestał działać? Napraw wpis ARP
Pakiety magiczne przechodzą przez tunel, ale router je odrzuca, gdy wygaśnie jego wpis ARP. Porównaj trzy ścieżki dostarczania, a potem przypnij adres MAC na stałe.
Wyślij pakiet wybudzający zaraz po wyłączeniu, a komputer wraca; ta sama komenda następnego ranka nic nie robi. W konfiguracji VPN nic się nie zmieniło, a przekierowanie portu nadal wskazuje właściwy adres. Różnica jest w czasie: tablica sąsiedztwa routera zapomniała o uśpionej maszynie, więc nie ma adresu MAC, który można wpisać w ramkę. To właśnie wygaśnięcie wpisu, a nie tunel, wyjaśnia większość awarii Wake-on-LAN przez VPN.
Pierwsze wybudzenie działa, a następne nie
Router przekazuje ramkę na adres prywatny, szukając celu w tablicy sąsiedztwa. Dopóki maszyna działa, odpowiada na ARP, więc przypisanie pozostaje świeże. Gdy się wyłączy, nic nie odpowiada, wpis starzeje się po kilku minutach, a późniejsze ramki na ten adres są odrzucane, choć IP i przekierowanie portu pozostają ważne.
Wzorzec mówi, z którą awarią masz do czynienia. Wybudzenie, które nigdy nie działa, wskazuje na dostarczanie: zły port, zły cel albo zapora, która odrzuca pakiet, zanim dotrze do LAN. Wybudzenie, które działa raz, a potem zawodzi godzinami, wskazuje na wpis sąsiedztwa. Wybudzenie, które działa do zmiany dzierżawy DHCP, wskazuje na adresację, którą naprawia rezerwacja.
Zanim dotkniesz ARP, upewnij się, że adres jest stabilny. Jeśli uśpiona maszyna dostanie nowy adres po wygaśnięciu dzierżawy, przypięty wpis sąsiedztwa dla starego adresu będzie jednocześnie trwały i bezużyteczny. Najpierw ustaw rezerwację DHCP, aby adres przetrwał restarty.
Czego pakiet magiczny potrzebuje od sieci
Ładunek jest prosty: 102 bajty złożone z sześciu bajtów 0xFF, po których szesnaście razy następuje docelowy adres MAC, zwykle wysyłane na port UDP 9. W płaskim LAN wychodzi jako rozgłoszenie, każdy port je odbiera, a wyłączona karta sieciowa rozpoznaje własny adres.
Przez VPN pakiet dociera do routera jako unicast na adres prywatny albo jako rozgłoszenie kierowane do podsieci. W przypadku unicast router musi rozwiązać cel na adres MAC, zanim położy ramkę w LAN, i właśnie to rozwiązanie zawodzi, gdy host śpi.
Niektóre narzędzia wysyłają na port 7 zamiast 9, a niektóre urządzenia domyślnie blokują rozgłoszenie kierowane. To błędy dostarczania, nie ARP, więc sprawdź cel i port, zanim zmienisz tablicę sąsiedztwa.
Trzy drogi do uśpionego hosta
Masz trzy praktyczne sposoby, by dostarczyć ramkę do LAN, a właściwy wybór zależy od tego, czym sterujesz.
| 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 |
Wybierz hosta pomocniczego, gdy istnieje, ponieważ rozgłasza w łączu i nie potrzebuje wyjątku w routerze. Wybierz rozgłoszenie kierowane, gdy router już je dopuszcza i narzędzie wybudzające przyjmuje adres. Wybierz wpis statyczny, gdy żadne z nich nie jest dostępne i możesz uruchomić komendę na routerze.
Te opcje się nie wykluczają. Trwały wpis pozwala też ścieżce unicast przetrwać sen, co jest przydatne, gdy klient VPN może wysyłać tylko na konkretny adres.
Uczyń wpis sąsiedztwa trwałym
Na routerze z powłoką Linux jedna komenda przypina przypisanie. Podane tu wartości należą do przykładowego LAN i trzeba je zastąpić własnymi:
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.23Stan nud permanent utrzymuje wpis ponad limity czasu ARP i używa go do przekazywania, gdy maszyna jest wyłączona. Druga komenda dowodzi, że wpis istnieje, i pokazuje interfejs, do którego należy, co ma znaczenie na routerach z osobnym mostkiem gości lub VLAN.
Uczyń go odpornym na restart przez dowolny hak, jaki oferuje firmware: skrypt w /jffs/scripts na Asuswrt-Merlin, jednostka oneshot systemd na serwerze Linux jako brama, Neighbor= stanza w systemd-networkd albo wpis w /etc/ethers, który czytają lokalne narzędzia. Komenda wpisana w powłoce znika przy następnym restarcie i to jest najczęstsza przyczyna tego, że działająca poprawka zdaje się przestawać działać.
Przetestuj z zewnątrz i wiedz, kiedy to usunąć
Uśpij maszynę i odczekaj co najmniej dziesięć minut, dość długo, by wygasł każdy dynamiczny wpis. Następnie wyślij żądanie wybudzenia z klienta VPN i obserwuj obie strony routera:
tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9Pierwsze przechwycenie dowodzi, że pakiet przyszedł z tunelu; drugie, że router położył ramkę w LAN. Poprawny pakiet magiczny wygląda jak 102 bajty z powtórzonym MAC, więc sprawdź długość i cel. Jeśli ramka opuszcza mostek LAN, a maszyna pozostaje wyłączona, pozostały problem jest w urządzeniu: szybki start, głęboki sen albo ustawienie BIOS odcinające zasilanie karty sieciowej.
Usuń wpis, gdy zmieni się karta sieciowa, i zaktualizuj go, gdy przeniesiesz maszynę na inny adres. Trwałe przypisanie to świadomy wyjątek, a wyjątek, którego nikt nie pamięta, to sposób, w jaki przyszły laptop zaczyna odbierać ramki przeznaczone dla wycofanego komputera stacjonarnego.