У меня есть прямое соединение Ethernet между ПК с Windows 10 и Raspberry Pi.
У меня Pi настроен как сервер, на который я могу сесть и запустить сценарий, который будет запускать Etherwake, программу Wake on lan из командной строки, и она отлично работает, когда я тестирую ее, выключая компьютер и оставляя на минуту, затем я запускаю команду, и компьютер включается.
Но когда я оставляю его на ночь, он больше не работает. Запуск сценария ничего не делает.
Судя по тому, что я читал, многие люди исправляют это, возясь с некоторыми настройками ARP на своем маршрутизаторе, но в этой ситуации нет маршрутизатора - опять же, это прямой кабель Ethernet, проложенный между двумя компьютерами.
Поскольку машина назначения без питания не ответ на запросы ARP, вполне вероятно, что кеш ARP просто истекает - отправитель не может разрешить IP-адрес, и ничего не отправляется.
Из-за этого волшебный пакет WoL обычно отправляется в виде широковещательной рассылки. Поскольку таблица MAC-адресов коммутатора, вероятно, также устарела, одноадресный пакет WoL в любом случае будет эффективно отправляться как широковещательный.
Трансляция отправляется только локально, поэтому, когда вам нужно отправить удаленный WoL, вам необходимо использовать либо направленную широковещательную рассылку, либо статическую фиктивную запись ARP на маршрутизаторе назначения.
Направленное вещание обычно требует явного включения и может быть сложной задачей в зависимости от оборудования. Статическая запись ARP, например, для 192.168.0.254 => FF: FF: FF.FF: FF: FF отправит все IP-пакеты на этот IP-адрес в качестве локальной широковещательной передачи Ethernet, что делает свое дело. Конечно, вам нужна только одна запись в каждой подсети, в которую вы хотите направить WoL.
Трюк со статическим ARP также можно использовать для пробуждения устройства из Интернета: настройте переадресацию порта для любого непонятного порта UDP на поддельный IP-адрес ARP и отправьте пакет WoL на пересылаемый порт на общедоступном IP-адресе вашего маршрутизатора.