Wake-on-Lan
Обновлено 10 августа 2019
Wake-On-Lan - технология, позволяющая включать компьютер по сети.
Требование к ведомому компьютеру
- Источник питания ATX, материнская плата с поддержкой Wake-On-Lan
- сетевой адаптер с поддержкой Wake-On-Lan
- известный MAC-адрес сетевого адаптера
Требование к ведущему компьютеру
- специальная программа, умеющая отсылать Magic Packet
Принцип работы
Ведомый компьютер находится в дежурном режиме (stand by) и выдает питание на сетевой адаптер. Сетевой адаптер находится в режиме пониженного энергопотребления, просматривая все пакеты, приходящие на его MAC-адрес, но ничего не отвечая на них. Если один из них окажется Magic Packet, то сетевой адаптер выдаёт сигнал на включение питания компьютера.
Реализация
Включаем поддержку WoL в BIOS на ведомом компьютере. Это может быть одноименный пункт наподобие Wake On Lan Enable, либо Power On By PCIE и т.д. Возможно также, что этот режим в BIOS не меняется, а материнская плата поддерживает его по умолчанию.
Чтобы определить, поддерживает ли сетевая карта WoL, - загружаем ведомый компьютер и набираем в консоли:
Settings for eth0: Supported ports: [ MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: external Auto-negotiation: on Supports Wake-on: g Wake-on: d Link detected: yes
Нас интересуют строчка Supports Wake-on и Wake-on. Первая показывает доступные режимы сетевого адаптера на пробуждение (g - как раз пробуждение по Magic Pocket), а вторая - текущий режим (d означает выключенный WoL).
Для того, чтобы перевести сетевую карту в режим WoL, используется команда:
ethtool -s eth0 wol g
Для выключения режима WoL:
ethtool -s eth0 wol d
Сетевой адаптер может поддерживать сохранение состояния, в которое его перевели, но может и сбрасывать (чаще всего на d), поэтому при каждой загрузке необходимо будет устанавливать нужный режим WoL.
Добавим настройку включения режима WoL на всех сетевых адаптерах, которые его поддерживают:
preup() { if ethtool $1 | grep "Supports Wake-on:" | grep g >/dev/null; then ethtool -s $1 wol g fi }
Для получения MAC-адреса сетевого адаптера на ведомом компьютере можно выполнить команду на ведомом компьютере:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.225.0 broadcast 10.0.0.255
inet6 fde1:92f6:649a:0:724d:7bff:feb7:406e prefixlen 64 scopeid 0x0<global>
inet6 fe80::724d:7bff:feb7:406e prefixlen 64 scopeid 0x20<link>
ether 00:01:02:03:04:05 txqueuelen 1000 (Ethernet)
RX packets 4129968 bytes 1885750720 (1.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2068548 bytes 985677562 (940.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xf7000000-f7020000
или выполнить на ведущем компьютере команду, которая отобразит ARP-кэш:
Address HWtype HWaddress Flags Mask Iface
10.0.0.1 ether 00:01:02:03:04:05 C eth0
10.0.0.2 ether 06:07:08:09:0a:0b C eth0
10.0.0.3 ether 0c:0d:0e:0f:10:11 C eth0
Для того, чтобы все компьютеры сети попали в кэш, можно воспользоваться утилитой nmap
, которая пропингует компьютеры в сети и их MAC-адреса попадут в кэш:
nmap -v -Sp 10.0.0.0/24
Для пробужения компьютера воспользуйтесь утилитой wol
на ведущем компьютере:
wol MAC-адрес
При работе с программами следует учитывать, что не все компьютеры включаются сразу после подключения в электрическую сеть. Это связано с отсутствием процесса инициализации подачи питания на сетевую карту (компьютер еще не включался и не знает, какие устройства следует питать, чтобы получать специальные сигналы, среди которых будет "магический пакет"). Поэтому следует произвести одно предварительное включение вручную. Если существует необходимость избавиться от данной проблемы (например, сервер закрывается на ключ или находится очень далеко), следует установить в BIOS параметр питания Wake After Power Fail в значение ON.