Wake-on-LAN през VPN спира да работи? Оправете ARP записа
Магическите пакети преминават през тунела, но рутерът ги изхвърля, след като ARP записът му изтече. Сравнете три пътя за доставяне и закрепете MAC адреса за постоянно.
Изпратете пакет за събуждане веднага след изключване и компютърът се връща; същата команда на следващата сутрин не прави нищо. В конфигурацията на VPN нищо не се е променило, а пренасочването на порт продължава да сочи към правилния адрес. Разликата е във времето: таблицата на съседите на рутера е забравила заспалата машина, затова няма MAC адрес, който да сложи в кадъра. Точно това изтичане, а не тунелът, обяснява повечето откази на Wake-on-LAN през VPN.
Първото събуждане работи, а следващото не
Рутерът препраща кадър към частен адрес, като търси дестинацията в таблицата на съседите си. Докато машината работи, тя отговаря на ARP и съответствието остава свежо. Щом се изключи, нищо не отговаря, записът изтича след няколко минути и следващите кадри към този адрес се изхвърлят, макар IP адресът и пренасочването на порт да остават валидни.
Моделът показва кой отказ имате. Събуждане, което никога не работи, сочи към доставянето: грешен порт, грешна дестинация или защитна стена, която изхвърля пакета, преди да стигне до LAN. Събуждане, което проработи веднъж и после се проваля с часове, сочи към записа за съседа. Събуждане, което работи до промяна на DHCP наема, сочи към адресирането, което резервация поправя.
Уверете се, че адресът е стабилен, преди да пипате ARP. Ако заспалата машина получи нов адрес след изтичане на наема, закрепен запис за съседа към стария адрес ще бъде едновременно постоянен и безполезен. Първо задайте DHCP резервация, за да оцелее адресът след рестартиране.
Какво трябва на магическия пакет от мрежата
Полезният товар е прост: 102 байта от шест байта 0xFF, последвани от целевия MAC адрес шестнадесет пъти, обикновено изпращани към UDP порт 9. В плоска LAN те излизат като broadcast, всеки порт ги получава и изключената мрежова карта разпознава собствения си адрес.
През VPN пакетът пристига в рутера като unicast към частен адрес или като насочен към подмрежата broadcast. При unicast рутерът трябва да превърне дестинацията в MAC адрес, преди да сложи кадъра в LAN, и точно това преобразуване се проваля, докато хостът спи.
Някои инструменти изпращат към порт 7 вместо 9, а някои устройства блокират насочения broadcast по подразбиране. Това са откази на доставянето, не на ARP, затова проверете дестинацията и порта, преди да променяте таблицата на съседите.
Три пътя към заспал хост
Имате три практични начина да изведете кадъра в LAN, а правилният избор зависи от това какво контролирате.
| 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 |
Изберете помощния хост, когато има такъв, защото той излъчва в рамките на сегмента и не се нуждае от изключение в рутера. Изберете насочен broadcast, когато рутерът вече го позволява и инструментът за събуждане поддържа адрес. Изберете статичния запис, когато нито едно от двете не е налично и можете да изпълните команда на рутера.
Тези варианти не се изключват взаимно. Постоянният запис също позволява unicast пътят да оцелее след заспиване, което е полезно, когато 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, която спира захранването на мрежовата карта.
Премахнете записа при смяна на мрежовата карта и го актуализирайте, когато преместите машината на друг адрес. Постоянното съответствие е съзнателно изключение, а изключение, което никой не помни, е начинът, по който бъдещ лаптоп започва да получава кадри, предназначени за пенсиониран настолен компютър.