🖧 Введение в Wake On Lan

Мануал

Wake-on-lan (также известная под аббревиатурой “W.O.L”) – это стандартная функция ethernet, которая позволяет “разбудить” компьютер при получении определенного типа сетевого пакета (так называемого MagicPacket).

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

В этом руководстве мы рассмотрим, как включить функцию WOL на нашей ethernet-карте в Linux, и как отправить сетевой пакет, необходимый для пробуждения машины.

Проверьте, поддерживается ли функция Wake On Lan

Если мы хотим использовать функцию Wake On Lan, самое первое, что мы должны сделать, это убедиться, что эта опция поддерживается сетевым интерфейсом, который мы хотим использовать для пробуждения нашей машины, BIOS машины или встроенным ПО UEFI.

Чтобы сделать последнее, мы должны войти в интерфейс настроек прошивки при запуске машины (обычно это достигается нажатием клавиши, например F2, сразу после включения питания).

В интерфейсе прошивки эта функция, если она поддерживается, обычно перечислена в разделе “advanced” (найдите что-то вроде “PCI Device Power On”).

После того, как мы включили WOL в прошивке машины, нам нужно убедиться, что наша сетевая карта действительно поддерживает эту функцию.

На самом деле это очень простая задача

Все, что нам нужно сделать, это воспользоваться утилитой ethtool.

Мы вызываем ее с правами администратора и без каких-либо специальных опций, просто передавая имя сетевой карты в качестве аргумента.

В моем случае имя, присвоенное интерфейсу ethernet, – ens5f5, поэтому я запускаю:

$ sudo ethtool ens192

Команда выдает следующее сообщение:

Settings for ens192:
Supported ports: [ TP ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: No
Supported FEC modes: Not reported
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Supports Wake-on: uag
Wake-on: d
Link detected: yes

Соответствующая строка вывода, на которую мы хотим обратить внимание в нашем случае, это Supports Wake-on: uag и Wake-on: d.

Здесь буква похожа на статус функции.

Давайте сосредоточимся на том, что означают эти строки.

Значение, связанное с ключом “Supports Wake-on”, сообщает, какие типы метода включения поддерживаются:

БУКВА ЗНАЧЕНИЕ
p Пробуждение при физической активности
u Пробуждение по одноадресным сообщениям
m Пробуждение по многоадресным сообщениям
b Пробуждение при получении широковещательных сообщений
a Пробуждение по ARP
g Пробуждение по MagicPacket(tm)
s Включен пароль SecureOn(tm) для MagicPacket(tm)
d Отключено

Текущее состояние функции Wake On Lan отображается под клавишей “Wake-on”. В данном случае мы видим, что она отключена (“d”).

Включение функции Wake On Lan

После того как мы установили, что функция Wake On Lan поддерживается нашей сетевой картой, мы можем перейти к ее включению.

Как мы можем это сделать?

Для этого достаточно воспользоваться утилитой ethtool и выполнить следующую команду:

$ sudo ethtool -s ens192 wol g

Вы можете заметить, что в примере выше мы запустили ethtool с опцией -s.

Это краткая форма для –change, и, как следует из названия, ее нужно использовать каждый раз, когда мы хотим выполнить изменение на сетевом интерфейсе, который мы передаем в качестве аргумента.

В данном случае мы включили Wake On Lan в режиме g, поскольку мы хотим использовать MagicPacket для удаленного пробуждения системы.

Чтобы убедиться, что изменение было применено правильно, мы можем еще раз проверить состояние WOL:

$ sudo ethtool ens192 | grep Wake-on
Supports Wake-on: pg
Wake-on: g

Как сделать изменение постоянным с помощью правила udev

Включить функцию Wake On Lan так, как мы это сделали, недостаточно, поскольку изменения не сохранятся при перезагрузке машины.

Мы должны найти способ включить эту опцию автоматически при загрузке.

Существует множество способов сделать это.

В рамках данного руководства мы создадим правило udev, которое будет выполнять соответствующую команду при обнаружении сетевого интерфейса.

Чтобы написать правило udev, первое, на что мы должны обратить внимание, это MAC-адрес сетевого интерфейса, на который будет отправлен MagickPacket, в данном случае это ens192.

Получить адрес интерфейса очень просто, все, что нам нужно сделать, это выполнить следующую команду:

$ cat /sys/class/net/<interface-name>/address

В приведенном выше примере <interface-name> должно быть заменено реальным именем сетевого интерфейса.

Мы будем основывать наше правило udev на MAC ADDRESS интерфейса, чтобы быть уверенными, что оно будет применено только к этому устройству.

Вот как выглядит наше правило:

ACTION=="add", ATTRS{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/sbin/ethtool -s  wol g"

Правило будет применено по событию “add” к устройству, которое соответствует заданному MAC ADDRESS (замените его своим реальным адресом в правиле).

Как только udev найдет соответствие правилу, будет выполнена заданная команда, автоматически включающая функцию Wake-on-lan.

Отправка пакета MagickPacket для пробуждения устройства

Мы рассмотрели, как активировать функцию Wake On Lan вручную, и как написать правило udev, чтобы соответствующая команда выполнялась автоматически при каждом обнаружении сетевого интерфейса.

Теперь нам осталось найти способ действительно отправить MagickPacket на наш сетевой интерфейс, когда машина выключена.

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

На самом деле можно отправить пакет из другой подсети или из интернета, но маршрутизатор должен поддерживать эту функцию и быть настроен на трансляцию MagicPacket.

Программа, которую мы можем использовать для отправки MagicPacket, зависит от дистрибутива, на котором мы работаем.

В Fedora, и в целом в дистрибутивах, входящих в семейство Red Hat, все, что нам нужно сделать, это установить пакет net-tools

🖧 Сравнение iproute2 и net-tools

Вероятно, он установлен по умолчанию и включает утилиту ether-wake:

$ sudo dnf install net-tools

Если мы используем Debian или одну из его многочисленных производных, мы можем установить и использовать утилиту etherwake:

$ sudo apt-get update && sudo apt-get install etherwake

Если наш любимый дистрибутив – Archlinux, вместо этого мы можем установить и использовать утилиту wol для отправки MagicPacket:

$ sudo pacman -Sy wol

Все упомянутые приложения работают практически одинаково.

Все, что нам нужно сделать, это вызвать их и передать в качестве аргумента, например, MAC-адрес интерфейса, на который мы хотим отправить MagicPacket:

$ etherwake XX:XX:XX:XX:XX:XX

Заключение

В этом руководстве мы рассмотрели, что такое функция Wake On Lan, и как ее можно использовать для удаленного включения устройства путем отправки MagicPacket.

Мы увидели, как проверить, что эта функция действительно поддерживается в прошивке машины и на сетевом интерфейсе с помощью утилиты ethtool, как активировать ее вручную и как написать правило udev для автоматической активации при каждом обнаружении интерфейса.

Наконец, мы увидели, как на самом деле отправить MagicPacket с помощью таких приложений, как etherwake или wol.

 

Добавить комментарий