Skip to content

Instantly share code, notes, and snippets.

@maestrow
Last active March 27, 2025 18:05
Show Gist options
  • Save maestrow/d5198bd50dab577ff2fdfbd9126351d1 to your computer and use it in GitHub Desktop.
Save maestrow/d5198bd50dab577ff2fdfbd9126351d1 to your computer and use it in GitHub Desktop.
Wake On Lan (WOL) HowTo

Wake On Lan (WOL) How to

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

  • Включить в BIOS опцию включения по сигналу на сетевую карту;
  • Возможно потребуется настроить сетевую карту на прием WOL;

BIOS

Пример настройки для материнской платы Asus m4a785td-v evo:

POWER \ APM Configuration \ Power on From S5 By PME# : Enabled.

Powershell скрипт для отправки пакета WOL

Send-WOL.ps1 - скрипт, который посылает пакет WOL на указанный ip адрес. Обязательным параметром является mac адрес устройства, которому адресован данный пакет.

Импорт командлета:

Import-Module .\Send-WOL.ps1  # Import CmdLet. You can add this in your $profile script.
Get-Help Send-WOL -Detailed   # Get Help about it

Пример использования:

Send-WOL -mac 00:11:32:21:2D:11 -ip 192.168.8.255  

Если не указывать ip, то будет использован широковещательный адрес 255.255.255.255, т.о пакет будет отправлен всем компьютерам локальной сети. Однако включиться только тот, который имеет указанный mac адрес.

Если ваш компьютер выходит в интернет через роутер

Чтобы включать компьютер локальной сети, посылая пакет WOL из интернета, нужно настроить port forwarding в маршрутизаторе. Пакеты приходящие на определенный порт (например, 9, можно использовать любой порт) по протоколу UDP должны передаваться на нужный локальный IP адрес. Если в port forwarding настроить перенаправление (с внешнего порта) на широковещательный (внутренний) адрес 255.255.255.255, то т.о. можно пробуждать из интернета любой компьютер локальной сети, указывая в пакете WOL нужный mac адрес.

WOL after power loss/failure

Существует проблема: Если материнская плата будет обесточена, а затем снова подключена к питанию, то она уже не будет включать компьютер по сигналу WOL. Эта проблема решается:

  1. использованием источника бесперебойного питания (ИБП);
  2. или настройкой BIOS: POWER \ APM Configuration \ Restore on AC Power Loss : Power On. Без ИБП, но с настройкой включения, компьютер будет включаться и не использоваться после короткой обесточки, что может быть нежелательным. Поэтому удобно использовать ИБП + настройку BIOS. В этом случае короткие обесточки не прервут подачу питания на материнскую плату и WOL будет функционировать, а если все-таки случиться прерывание питания, то настройка Restore on AC Power Loss включит компьютер.

Ссылки:

WOL on Linux

Enable WOL on network adapter

ifconfig -a - посмотреть список сетевых интерфейсов вместе с MAC адресами (apt install net-tools) ethtool $if - посмотреть настройки сетевого адаптера, в т.ч. возможность WOL (apt install ethtool).

Пример:

$ ethtool enp7s0 
Settings for enp7s0:
	Supported ports: [ TP	 MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	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
	                                     1000baseT/Full
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	master-slave cfg: preferred slave
	master-slave status: slave
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: external
	MDI-X: Unknown
	Supports Wake-on: pumbg
	Wake-on: g
	Link detected: yes

$ ethtool vmbr0 
Settings for vmbr0:
	Supported ports: [  ]
	Supported link modes:   Not reported
	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: 1000Mb/s
	Duplex: Unknown! (255)
	Auto-negotiation: off
	Port: Other
	PHYAD: 0
	Transceiver: internal
	Link detected: yes

В примере выше видим, что для enp7s0 WOL поддерживается, об этом говорит строка Supports Wake-on: pumbg. Параметр Wake-on показывает включен ли режим WOL. Значение d - выключен, g - включен. В свою очередь для vmbr0 нет параметров Supports Wake-on и Wake-on, что означает, что этот сетевой интерфей WOL не поддерживает.

Включить/выключить WOL можно командой:

  • ethtool -s enp7s0 wol g - включить
  • ethtool -s enp7s0 wol d - выключить

Отправка магического пакета

Для отправки магического пакета можно использовать утилиту wakeonlan

$ wakeonlan 75:A9:8D:74:28:48
Sending magic packet to 255.255.255.255:9 with 75:A9:8D:74:28:48

Можно отправить пакет на конкретный IP внутри сети: wakeonlan -i 192.168.1.3 75:A9:8D:74:28:48.

Resources

WOL on Proxmox

Настройка WOL для компьютера с proxmox (с настроенным Virtual Machine Bridge).

На компьютере с одной серевой картой, после установки proxmox конфигурация сети будет состоять из трех сетевых интерфейсов:

$ ifconfig -a
enp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 75:A9:8D:74:28:48  txqueuelen 1000  (Ethernet)
        RX packets 479  bytes 39920 (38.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 233  bytes 33006 (32.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 8  bytes 440 (440.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 440 (440.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.3  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::1c48:a9ff:fe2a:c911  prefixlen 64  scopeid 0x20<link>
        ether 70:DF:2C:5C:35:A8  txqueuelen 1000  (Ethernet)
        RX packets 478  bytes 33162 (32.3 KiB)
        RX errors 0  dropped 180  overruns 0  frame 0
        TX packets 243  bytes 34060 (33.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Видно, что интерфейс vmbr0 (Virtual Machine Bridge) имеет IP адрес, а enp7s0 не имеет.

Посмотрим настройки сети:

cat /etc/network/interfaces

auto lo
iface lo inet loopback

iface enp7s0 inet manual

auto vmbr0
iface vmbr0 inet static
	address 192.168.1.3/24
	gateway 192.168.1.1
	bridge-ports enp7s0
	bridge-stp off
	bridge-fd 0

На описанной конфигурации отправка магического паента для MAC интерфейса vmbr0 ничего не даст. Отправлять нужно на MAC реальной сетевой карты. Т.е. для описанной конфигурации сработает команда:

$ wakeonlan 75:A9:8D:74:28:48
Sending magic packet to 255.255.255.255:9 with 75:A9:8D:74:28:48

Стоит отметить, что если рассылать пакет не на широковещательный адрес, а на конкретный:

$ wakeonlan -i 192.168.1.3 75:A9:8D:74:28:48

то почему-то это не работает.

Resources

function Send-WOL
{
<#
.SYNOPSIS
Send a WOL packet to ip address
.PARAMETER mac
The MAC address of the device that need to wake up
.PARAMETER ip
The IP address where the WOL packet will be sent to
.EXAMPLE
Send-WOL -mac 00:11:32:21:2D:11 -ip 192.168.8.255
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $True, Position = 1)]
[string]$mac,
[string]$ip = "255.255.255.255",
[int]$port = 9
)
$address = [Net.IPAddress]::Parse($ip)
$mac = $mac.replace("-", ":")
$target = $mac.split(':') | %{ [byte]('0x' + $_) }
$packet = [byte[]](,0xFF * 6) + ($target * 16)
$UDPclient = new-Object System.Net.Sockets.UdpClient
$UDPclient.Connect($address, $port)
[void]$UDPclient.Send($packet, $packet.Length)
}
@webresurs
Copy link

webresurs commented Sep 7, 2024

после того как включили опцию wol в proxmox

ethtool -s enp7s0 wol g

https://www.myworkroom.de/p-hb:wakeonlan.proxmox - wakeonlan unter Proxmox

Хотите постоянно полагаться на MagicPacket™

Здесь возможны различные решения, я выбрал следующее. Мне показалось, что это самое простое решение, и, главное, его можно воспроизвести практически везде. Я использую здесь systemd, хотя мне это не нравится...
Proxmox - PVE - _Оболочка (Shell)

  • ввести команду для создания файла:
    nano /etc/systemd/system/wol.service
  • добавить текст:

[Unit]
Description=Configure Wake-up on LAN
Requires=network.target
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s enp7s0 wol g

[Install]
WantedBy=basic.target

  • где "enp7s0" - заменить на свое значение сетевой карты, которую нашли по команде ip addr

Сочетание и клавиши для сохранение файла wol.service
CTRL + X, Y, Enter

Этот файл необходимо создать, а затем активировать, вот команды:

systemctl start wol.service
systemctl enable wol.service
systemctl is-enabled wol.service
systemctl daemon-reload

Теперь WakeOnLan должен работать стабильно.
....
Это было бы слишком просто!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment