Надішліть пакет пробудження одразу після вимкнення, і комп'ютер повертається; та сама команда наступного ранку нічого не робить. У конфігурації VPN нічого не змінилося, і переадресація порту досі вказує на правильну адресу. Різниця в часі: таблиця сусідів маршрутизатора забула сплячу машину, тому в неї немає MAC-адреси, яку можна вписати в кадр. Саме це завершення терміну, а не тунель, пояснює більшість збоїв Wake-on-LAN через VPN.

Перше пробудження працює, наступне ні

Маршрутизатор пересилає кадр на приватну адресу, шукаючи призначення у своїй таблиці сусідів. Поки машина працює, вона відповідає на ARP, тому зіставлення залишається свіжим. Щойно вона вимикається, ніхто не відповідає, запис старіє за кілька хвилин, і наступні кадри на цю адресу відкидаються, хоча IP і переадресація порту залишаються чинними.

Схема підказує, який у вас збій. Пробудження, яке ніколи не працює, вказує на доставку: неправильний порт, неправильне призначення або міжмережевий екран, що відкидає пакет до того, як він потрапить у LAN. Пробудження, яке спрацьовує один раз, а потім годинами не працює, вказує на запис сусіда. Пробудження, яке працює до зміни оренди DHCP, вказує на адресацію, і це виправляє резервування.

Переконайтеся, що адреса стабільна, перш ніж торкатися ARP. Якщо спляча машина отримає нову адресу після завершення оренди, закріплений запис сусіда для старої адреси буде одночасно постійним і марним. Спершу налаштуйте резервування DHCP, щоб адреса пережила перезавантаження.

Що потрібно магічному пакету від мережі

Корисне навантаження просте: 102 байти з шести байтів 0xFF, за якими шістнадцять разів іде цільова MAC-адреса, зазвичай надсилаються на порт UDP 9. У пласкій LAN він виходить широкомовно, кожен порт його отримує, а вимкнена мережева карта впізнає власну адресу.

Через VPN пакет надходить до маршрутизатора як одноадресна передача на приватну адресу або як широкомовна передача, спрямована в підмережу. В одноадресному випадку маршрутизатор має перетворити призначення на MAC-адресу, перш ніж поставити кадр у LAN, і саме це перетворення не вдається, поки хост спить.

Деякі інструменти надсилають на порт 7 замість 9, а деякі пристрої за замовчуванням блокують спрямоване широкомовлення. Це збої доставки, а не ARP, тому перевірте призначення і порт, перш ніж змінювати таблицю сусідів.

Три шляхи до сплячого хоста

Є три практичні способи доставити кадр у LAN, і правильний вибір залежить від того, що ви контролюєте.

MethodWhat it needsWhere it breaks
Subnet-directed broadcastA wake tool that accepts a broadcast address and a router that forwards itBroadcast filtering, or a tool that only takes a MAC
Helper on the LANAn always-on host such as the VPN serverNo suitable host, or the host cannot reach the target VLAN
Permanent neighbour entryRouter shell access and the target MACNIC replacement or address change

Виберіть допоміжний хост, якщо він є, бо він широкомовно передає в ланці й не потребує винятку на маршрутизаторі. Виберіть спрямоване широкомовлення, якщо маршрутизатор уже дозволяє його, а інструмент пробудження приймає адресу. Виберіть статичний запис, якщо ні того, ні іншого немає і ви можете виконати команду на маршрутизаторі.

Ці варіанти не виключають один одного. Постійний запис також дозволяє одноадресному шляху пережити сон, що корисно, коли клієнт VPN може надсилати лише на певну адресу.

Зробіть запис сусіда постійним

На маршрутизаторі з оболонкою Linux одна команда закріплює зіставлення. Значення тут належать прикладу LAN і мають бути замінені вашими:

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.23

Стан nud permanent утримує запис крізь тайм-аути ARP і використовується для пересилання, поки машина вимкнена. Друга команда доводить, що запис існує, і показує інтерфейс, до якого він належить, що важливо на маршрутизаторах з окремим гостьовим мостом або VLAN.

Зробіть його стійким до перезавантаження через будь-який хук, який пропонує прошивка: скрипт у /jffs/scripts на Asuswrt-Merlin, модуль systemd oneshot на сервері Linux у ролі шлюзу, Neighbor= stanza у systemd-networkd або запис у /etc/ethers, який читають локальні інструменти. Команда, набрана в оболонці, зникає під час наступного перезавантаження, і це найпоширеніша причина, чому робоче виправлення ніби перестає працювати.

Перевірте ззовні й знайте, коли видаляти

Приспіть машину і зачекайте щонайменше десять хвилин, цього достатньо, щоб будь-який динамічний запис застарів. Потім надішліть запит пробудження з клієнта VPN і спостерігайте за обома боками маршрутизатора:

tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9

Перший запис доводить, що пакет прийшов із тунелю; другий, що маршрутизатор поставив кадр у LAN. Коректний магічний пакет виглядає як 102 байти з повтореною MAC, тому перевіряйте і довжину, і призначення. Якщо кадр залишає міст LAN, а машина лишається вимкненою, залишкова проблема в пристрої: швидкий запуск, глибокий сон або налаштування BIOS, що відключає живлення мережевої карти.

Видаляйте запис, коли змінюється мережева карта, і оновлюйте його, коли переносите машину на іншу адресу. Постійне зіставлення це навмисний виняток, а виняток, про який ніхто не пам'ятає, це шлях, яким майбутній ноутбук починає отримувати кадри, призначені списаному настільному комп'ютеру.

Схожі статті