ether-wake – будим ПК

Возникла задача будить на выходных один ПК.

Устанавливаем комплекс утилит:

# yum -y install ethtool

Требования к удаленному компьютеру, что бы данная технология работала это:

  1. Материнская плата с питанием ATX.
  2. BIOS здесь нужно включить поддержку Wake-On-LAN, и настроить правильно энергосбережение.
  3. Сетевая карта с поддержкой технологии WOL (тоже почти все, но её еще необходимо включить в настройках сетевой карты).

Включаем функцию Wake-On-LAN, выглядит этот пункт может по разному в зависимости от BIOS, пример:

  1. Resume by LAN
  2. Wake Up On LAN
  3. WOL From Soft-Off
  4. Power Up on PCI

Вообще смотрите все что касается фраз “Power Up”, “WOL”, “Wake Up”, “Resume by” но связанное с LAN, MAC или PCI.

Переводим работу материнской платы в определенный режим энергосбережения Suspend Mode в основном компьютеры поддерживают ACPI и позволяют использовать только два режима S1 (POS) и S3(STR) но нас будет интересовать режим S1 (Power on Suspend), это тоже очень важно, иначе на нашу сетевую карту не будут подаваться постоянно 5В при выключенном компьютере, и мы не сможем его включить.

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

Далее надо настроить сетевую карту, того же ПК, в операционной системе Windows, не важно встроенная или выделенная заходим в настройки ищем такие пункты как:

  1. Wake on Magic Packet
  2. Wake on Pattern
  3. Wake on Lan
  4. WakeOnLan from PowerOff
  5. Wake from shutdown

и включаем их.

Посылается пакет, например, с сервера в виде:

# ether-wake -i eth0 11:22:33:44:55

где eth0 – нужный интерфейс на сервере, а 11:22:33:44:55 – MAC адресата.

Для побудки CentOS нужно выполнение условий в BIOS, и также поддержка сетевой картой и системой. Проверяем:

# ethtool enp5s0
Settings for enp5s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes
  • Supports Wake-on: g — сетевой интерфейс поддерживает технологию Wake On Lan
  • Wake-on: d — поддержка отключена

По man-у:

              p   Wake on PHY activity
              u   Wake on unicast messages
              m   Wake on multicast messages
              b   Wake on broadcast messages
              a   Wake on ARP
              g   Wake on MagicPacket™
              s   Enable SecureOn™ password for MagicPacket™
              d   Disable (wake on nothing).   This  option  clears  all
                  previous options.

Нужно дописать в конф. файл нужного интерфейса строку на постоянку:

# vi /etc/sysconfig/network-scripts/ifcfg-enp5s0
ETHTOOL_OPTS=”-s ${DEVICE} wol g”

или дать команду:

# ethtool -s enp5s0 wol g

Проверка tcpdump-ом:

# tcpdump -i enp5s0 ether proto 0x0842 or udp port 9
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp5s0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:50:41.736472 00:30:84:0a:99:af (oui Unknown) > 00:19:db:f5:6a:76 (oui Unknown), ethertype Unknown (0x0842), length 116:
        0x0000: ffff ffff ffff 0019 dbf5 6a76 0019 dbf5 ..........jv....
        0x0010: 6a76 0019 dbf5 6a76 0019 dbf5 6a76 0019 jv....jv....jv..
        0x0020: dbf5 6a76 0019 dbf5 6a76 0019 dbf5 6a76 ..jv....jv....jv
        0x0030: 0019 dbf5 6a76 0019 dbf5 6a76 0019 dbf5 ....jv....jv....
        0x0040: 6a76 0019 dbf5 6a76 0019 dbf5 6a76 0019 jv....jv....jv..
        0x0050: dbf5 6a76 0019 dbf5 6a76 0019 dbf5 6a76 ..jv....jv....jv
        0x0060: 0019 dbf5 6a76 ....jv
^C
1 packet captured
1 packet received by filter
0 packets dropped by kernel

Или такой вариант

tcpdump -UlnXi enp6s0 ether proto 0x0842 or udp port 9 2>/dev/null | sed -nE 's/^.*20: (ffff|.... ....) (..)(..) (..)(..) (..)(..).*$/\2:\3:\4:\5:\6:\7/p'

Будить по cron-у (будние дни в 8-55):

# crontab -e

55 8 * * 1-5       /home/svm/bin/wake_web.sh
# cat wake_web.sh
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ether-wake -i enp5s0 00:19:db:f5:6a:76 sleep

UPD. После обновления системы wake on lan перестал работать. Решение здесь.