Linux и Wake On Lan

Решил я сэкономить немного электроэнергии за счет включения и выключения своей домашней лабы удаленно, когда это необходимо. Удалённое выключение компьютера под управлением Linux не представляет сложности, достаточно иметь доступ к ssh. А вот с включением системы дело обстоит немного сложнее.

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

Принцип работы Wake On Lan следующий: компьютер находится в режиме stand-by, питание поступает на сетевой адаптер, который находится в режиме пониженного энергопотребления. Сетевой адаптер просматривает все пакеты, приходящие на его MAC-адрес, в ожидании так называемого magic packet. В случае если такой пакет получен — сетевой адаптер инициирует включение питания компьютера.

Magic packet — это специальная последовательность байт, первый 6 байт равны 0xFF и называемаются цепочкой синхронизации, затем идет mac-адрес сетевой платы, повторенный 16 раз.

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

Это можно сделать с помощью утилиты ethtool:

root@linux:~# ethtool eth0 | grep Wake-on
	Supports Wake-on: pumbg
	Wake-on: g

Или через sysfs:

root@linux:~# cat /sys/class/net/eth0/device/power/wakeup
enabled

Если Wake On Lan выключен, необходимо его включить.

root@linux:~# ethtool -s eth0 wol g

Или через sysfs:

root@linux:~# echo enabled > /sys/class/net/eth0/device/power/wakeup

Так же необходимо знать mac-адрес сетевого интерфеса, на который будет отправлен magic packet.

root@linux:~# cat /sys/class/net/eth0/device/net/eth0/address 
00:25:90:65:7b:12

Чтобы проверить как оно работает, выключем компьютер.

root@linux:~# shutdown -hy now

На другом компьютере устанавливаем утилиту wakeonlan

rascal@notebook:~$ sudo apt-get install wakeonlan

Отправляем magic packet.

rascal@notebook:~$ wakeonlan -p 8 00:25:90:65:7b:12
Sending magic packet to 255.255.255.255:8 with 00:25:90:65:7b:12

Компьютер должен включиться.

По умолчанию wakeonlan использует широковещательный адрес для отправки пакета, однако, если на пути такого пакета будет стоять маршрутизатор, скорее всего он не достигнет цели, так как на большинстве маршрутизаторов передача широковещательного трафика запрещена. В этом случае следует использовать опцию -i, которая позволяет отправить magic packet на определенный ip-адрес.