Wake-on-LAN обычно описывают одной фразой про включение компьютера по сети, но за ней стоит вполне конкретная цепочка электрики и логики. Пока блок питания воткнут в розетку, на плате живёт дежурная линия 5VSB, которая кормит сетевой контроллер даже тогда, когда процессор, диски и видеокарта давно отключились. Контроллер продолжает слушать сеть в минимальном режиме, распознаёт специальный кадр пробуждения и дёргает сигнал включения так же, как это делает кнопка питания на корпусе. Дальше начинается уже программная часть: состояния сна S3 и S5, настройки драйвера, ложные пробуждения от случайного широковещательного шума и вечный вопрос о том, почему всё работает внутри офиса и ломается за пределами домашнего маршрутизатора. В этом тексте разберём механизм от дежурного питания до диагностики снабженными практическими деталями, которые обычно узнают только после пары неудачных ночей с резервными копиями.

Дежурное питание 5VSB и кто остаётся на ночном дежурстве

Выключенный компьютер с воткнутым шнуром питания не выключен до конца. Импульсный блок питания стандарта ATX держит отдельную линию дежурного напряжения 5VSB, где SB означает standby. На неё обычно выделяют от одного до трёх ампер, и этого хватает, чтобы питать скромный набор потребителей: схему супервизора питания, контроллер кнопки включения, память подсистемы управления и, что важнее всего для этой темы, сетевой адаптер.

Сетевой контроллер в этом режиме работает не полностью. Часть приёмопередатчика и логика распознавания кадров остаются активными, а всё тяжёлое, включая обработку прерываний и общение с процессором, отключено. Контроллер не обрабатывает входящий трафик как сетевой стек операционной системы: он просто сравнивает байты приходящих кадров с запомненным образцом и при совпадении поднимает сигнал PME по шине PCI Express или аппаратный вывод wake на встроенном чипе.

Из этого следуют два практических вывода. Во-первых, если отключить питание через фильтр-удлинитель с выключателем или выдернуть шнур, дежурное напряжение пропадёт, и никакой кадр компьютер не оживит. Во-вторых, механизм зависит от прошивки BIOS или UEFI: там должен быть явно разрешён пункт вроде Wake on PCI Express или Power On by LAN, иначе плата проигнорирует сигнал от сетевого процессора даже при наличии питания.

Специальный кадр и как он строится

Кадр пробуждения устроен поразительно просто. Он состоит из шести байт со значением FF в шестнадцатеричной записи, за которыми шестнадцать раз подряд повторяется MAC-адрес целевой сетевой карты. Итого 102 байта полезной нагрузки, которую можно завернуть в любой транспорт: чаще всего это UDP-дейтаграмма на порт 9 или 7, но бывают варианты с голым Ethernet-кадром и даже TCP. В индустрии эту конструкцию называют Magic Packet, и одного этого слова в латинице достаточно, чтобы описать всю суть.

Контроллер игнорирует транспортную обёртку и ищет сам шаблон: шесть байт FF и цепочку из девяноста шести байт MAC-адреса. Из-за этого кадр пробуждения переживает проход через неуправляемые коммутаторы, но легко теряется на интересных границах. Роутер не пересылает широковещательный трафик между сетями, управляемые коммутаторы с фильтрацией штормов способны его порезать, а старый Wi-Fi-мост иногда просто не транслирует широковещание корректно.

Практическая деталь: кадр нужно слать на широковещательный адрес подсети или на сам известный IP машины, пока она ещё в ARP-кэше роутера. После выключения компьютера его ARP-запись исчезает через несколько минут, и посылка настроенная на точный IP начинает умирать, поэтому надёжные отправители всегда используют 255.255.255.255 или адрес широковещания подсети. MAC указывается без разделителей или с дефисами, регистр не важен, но один неверный октет сводит эффект к нулю без единого сообщения об ошибке.

Состояния сна S3 и S5, Modern Standby и беспроводный вариант WoWLAN

ACPI делит выключенные состояния компьютера на несколько ступеней, и механизм пробуждения живёт в каждой по-разному. В S3, то есть в классическом сне с питанием оперативной памяти, сетевой контроллер обычно уже находится на дежурной линии, и кадр пробуждения срабатывает быстро и почти всегда. С пятым состоянием S5 история тоньше: компьютер полностью выключен, поэтому всё упирается в ту самую линию 5VSB и в то, умеет ли прошивка поднимать сигнал включения из полного выключения. Гибернация S4 для WOLObvychno равнозначна S5.

Modern Standby в новых ноутбуках ломает привычную картину. Построенная по схеме S0 Low Power Idle машина технически не уходит в S3, а значит, классическая распознающая логика либо не включена, либо спит вместе с радиомодулем. Производители решают это по-разному: дорогие модели бизнес-серии часто поддерживают пробуждение только по шине USB-C с док-станции, а MSI-планшеты и ультрабуки иногда посылают спящий беспроводной адаптер.

WoWLAN переносит механизм на беспроводную сеть. Чип удерживает ассоциацию с точкой доступа, периодически просыпается для beacon-трафика и также ищет шаблон из кадра пробуждения. На практике WoWLAN забавно скромен по надёжности: слабый сигнал, агрессивное энергосбережение точки доступа и короткий интервал beacon легко сводят вероятность пробуждения к лотерее, поэтому для серьёзных задач медные джеки всё ещё правят балом.

Настройка драйвера и война с Energy Efficient Ethernet

Даже при живой линии 5VSB и разрешённой настройке BIOS операционная система способна свести механизм на нет. В Windows это делается в свойствах адаптера, где три чекбокса управляют поведением. История с галочкой Allow this device to wake the computer включает саму возможность пробуждения, а отдельная опция с ограничением only allow a magic packet to wake the computer решает вечную драму ложных пробуждений от произвольного сетевого шума. Если эту опцию не ограничить, адаптер согласен будить машину любым входящим кадром, включая широковещательные ARP-запросы провайдера и тонны multicast-шума от соседей по сети.

Управление питанием PCIe тоже имеет голос. Политика Allow the computer to turn off this device to save power иногда по умолчанию включена и ведёт к странной картине: контроллер пытается выключиться сам, и пробуждение работает один раз из трёх. Опытные сетевики обычно снимают обе политики энергосбережения и оставляют только узкое разрешение на кадр пробуждения.

Energy Efficient Ethernet добавляет отдельный пласт проблем. Стандарт 802.3az снижает энергопотребление соединения путём перевода физического уровня в экономный режим при простое, но этот лёгкий сон глубоко несовместим с режимом пробуждения на многих чипах. Адаптер огребает кадр, видит, что PHY уснул, и теряет его частями. Практическое правило простое: если включение из сна нестабильно на проводном 1G или 2.5G линке, отключите Energy Efficient Ethernet, Green Ethernet, Power Saving Mode и всё с похожими названиями во вкладке Advanced драйвера.

Ниже последовательность, которая обычно приводит механизм в рабочее состояние:

  1. Включить Power On by LAN или аналог в BIOS или UEFI материнской платы.
  2. В свойствах адаптера отметить Allow this device to wake the computer.
  3. Отметить же и опцию with only a magic packet, иначе пробуждения будут хаотичными.
  4. Снять галочку Allow the computer to turn off this device to save power.
  5. Отключить Energy Efficient Ethernet и Green Ethernet во вкладке Advanced.
  6. Проверить, что система при выключении использует S5 с живой линией 5VSB, а не полное отключение через отдельный механический выключатель.

Почему включение из интернета непрямолинейно

Кадр пробуждение настолько прост, что с ним приятно работать в локальной сети, и настолько же теряется за её пределами. Основная проблема фундаментальна: широковещательный кадр по определению локален для одной broadcast domain. Маршрутизатор перегораживает его на границе сети, и никакой IP-адрес назначения, прописанный внутри UDP-дейтаграммы, не заставит широковещательный кадр пересечь третий уровень автоматически.

Первый вариант обхода называется directed broadcast. Роутер в удалённой сети настраивается принимать пакеты на широковещательный адрес конкретной подсети с внешнего интерфейса и превращать их в локальное широковещание. Звучит удобно, но эта штука также удобная площадка для усиливающих атак, поэтому почти все современные роутеры держат directed broadcast выключенным по умолчанию, и включать его против здравого смысла.

Второй вариант привычнее домашним сетевикам: проброс порта. Пробрасывается UDP-порт 9 на фиктивный адрес вроде 192.168.1.254, которого в сети нет, и роутер с прибитым статическим ARP-записью MAC на этот адрес превращает входящий кадр к пробуждения в правильно адресованный Ethernet-кадр. Всё это зависит от прошивки домашнего роутера: на половине устройств статических ARP-записей нет в принципе, и мастера обходятся скриптами на отдельном мини-компьютере, который принимает внешний пакет и шлёт локальное пробуждение сам. Этот промежуточный узел становится фактической платформой доставки, и заодно добавляет в схему точку отказа.

Ложные пробуждения и как их диагностировать

Классический звонок в службу поддержки звучит одинаково: компьютер включается сам среди ночи. Виновата редко бывает аппаратура, чаще всего это адаптер, разрешённый будить машину любым кадром. Анализ начинается с команды powercfg с ключом lastwake, которая показывает источник последнего пробуждения. Если там процессор честно называет сетевой адаптер, дальше проверяют журнал событий Power-Troubleshooter с идентификатором 1, где записана точная цепочка: время сна, время подъёма и источник.

Таймеры пробуждения добавляют шуму. Команда powercfg с ключом waketimers выводит список запланированных механизмов выхода из сна, включая задания обновления, телеметрию и задачи планировщика. Полезная особенность: если пробуждение вызвано таймером, сетевой адаптер и кадр пробуждения тут совершенно ни при чём, и бессмысленные эксперименты с фильтрацией широковещания не дадут результата.

Ещё один странный кандидат на ночные пробуждения это Windows Update, который умеет будить машину для проверки обновлений, и старая служба время от времени поднимает инфраструктуру резервного копирования на NAS. Диагностика почти всегда сводится к одной команде и одному журналу, поэтому загадочные включения редко остаются загадками больше получаса.

Типовые сценарии применения механизма после диагностики обычно закрепляются сами. Ночные резервные копии, когда backup-сервер перед началом задачи рассылает кадры пробуждения на клиентские машины, делают своё дело и засыпают обратно. Удалённый доступ к рабочему ПК через корпоративную сеть тоже хрестоматийный случай: сотрудник заходит на шлюз, тыкает в список своих машин, и админская утилита за кулисами будит нужный десктоп. Домашние медиацентры, сборочные ноды и мини-серверы под лестницей живут тем же законом.

Безопасность и здоровая паранойя

У механизма исторически слабая защита. В стандарте предусмотрен опциональный шестибайтный пароль SecureOn, который прибавляется к шаблону пробуждения, но его поддержка в драйверах, утилитах и BIOS настолько фрагментарна, что рассчитывать на неё как на реальный рубеж не стоит. Получается, что любого, кто может доставить широковещательный кадр в целевую подсеть, механизм слушается беспрекословно.

Практические выводы известны. В публичных сетях, гостевых Wi-Fi и студенческих общежитиях Wake-on-LAN выключают полностью либо жёстко ограничивают фильтрами на коммутаторах. Проброс порта пробуждения наружу с жёсткой привязкой ARP стоит делать только с пониманием, что запись MAC в таблице открывает постоянный путь будить машину извне. Если сценарий допускает более узкое решение, разумнее принимать команду на отдельном всегда включенном узле внутри локальной сети, а кадр пробуждения наружу не выпускать вообще.

Один взгляд на всю цепочку даёт спокойную уверенность в том, что Wake-on-LAN это олдскульная железная штука, которая хорошо стареет. Дежурное питание 5VSB, six байт FF, шестнадцать повторений MAC и поднятый сигнал включения это простой ритуал, который исправно работает с конца девяностых, и несмотря на Modern Standby, EEE и беспроводные ответвления, он никуда не делся. Он просто живёт тихо, пока не понадобится.