Изпратете пакет за събуждане веднага след изключване и компютърът се връща; същата команда на следващата сутрин не прави нищо. В конфигурацията на 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, а правилният избор зависи от това какво контролирате.

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

Изберете помощния хост, когато има такъв, защото той излъчва в рамките на сегмента и не се нуждае от изключение в рутера. Изберете насочен 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, която спира захранването на мрежовата карта.

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

Подобни статии