Wake-on-Lan

Updated 4 July 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, - загружаем ведомый компьютер набираем в консоли:

ethtool eth0
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 на всех сетевых адаптерах, которые его поддерживают:

/etc/conf.d/net
preup() {
   if ethtool $1 | grep "Supports Wake-on:" | grep g >/dev/null;
     then
       ethtool -s $1 wol g
     fi
}

Для получение MAC-адреса сетевого адаптера на ведомом компьютере можно выполнить команду на ведомом компьютере:

ifconfig -a
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-кэш:

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.