Skip to main content

Make one Proxmox node to wake-on-lan another

· 3 min read

Nothing is eternal, especially the relevance of documentation. I think help.ubuntu.com is an absolute winner, holding the largest number of outdated and irrelevant pages. But that's not a topic for today's post. One of my Proxmox cluster nodes can't power itself on after the outage. But it supports wake-on-LAN, so I decided that another node could power it on. And the simplicity of this task was overrated by me.

warning

Wake on LAN doesn't work across VLANs. Magic packets could be sent and received only inside a single subnet.

The victim

First of all, even after enabling "Wake up on PCI event" or something in BIOS it was not working because WoL was still disabled on a software level. It can be checked with:

ethtool enp1s0

Where enp1s0 is a physical network interface of a Proxmox node, not a bridge.

There should be Wake-on: setting among others. In my case it was Wake-on: d, which means that wake-on-LAN is disabled, according to ethtool documentation:

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(tm)
s Enable SecureOn(tm) password for MagicPacket(tm)
d Disable (wake on nothing). This option clears all previous
options.

We need to set it to wake by the MagicPacket(tm). We need to create a config file for this to be enabled on system start. But first we need to:

ip link show enp1s0

and write down our network device MAC address. Then create a file:

nano /etc/systemd/network/90-wakeonlan.link

with the next content:

[Match]
MACAddress=<mac-address-here>

[Link]
NamePolicy=kernel database onboard slot path
MACAddressPolicy=persistent
WakeOnLan=magic

After that we need to reboot and check WOL status again:

ethtool enp1s0

Now Wake-on should be set to g.

The one who bothering

On another node we need to install an util that will be sending a magic packet:

apt update
apt install etherwake

Now we can power the victim off and try to wake it with:

etherwake -i vmbr0 <mac_address>

Where vmbr0 is a bridge network interface of current Proxmox node, and <mac_address> is a MAC address of the victim's physical network interface.

If it works, we can now add a cron job to wake our victim upon current node startup, adding some delay to make sure the network is ready:

crontab -e

Cron job line to add:

@reboot sleep 30s && /usr/sbin/etherwake -i vmbr0 <mac_address>