This commit is contained in:
101
blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md
Normal file
101
blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
---
|
||||||
|
slug: make-one-proxmox-node-to-wol-another
|
||||||
|
title: "Make one Proxmox node to wake-on-lan another"
|
||||||
|
tags: [self-hosting, homelab, Proxmox, WOL]
|
||||||
|
image: /img/homelab.png
|
||||||
|
---
|
||||||
|
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.
|
||||||
|
|
||||||
|
<!-- truncate -->
|
||||||
|
|
||||||
|
:::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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip link show enp1s0
|
||||||
|
```
|
||||||
|
|
||||||
|
and write down our network device MAC address. Then create a file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install etherwake
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we can power the victim off and try to wake it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crontab -e
|
||||||
|
```
|
||||||
|
|
||||||
|
Cron job line to add:
|
||||||
|
|
||||||
|
```
|
||||||
|
@reboot sleep 30s && /usr/sbin/etherwake -i vmbr0 <mac_address>
|
||||||
|
```
|
@ -56,6 +56,9 @@ const config = {
|
|||||||
showReadingTime: true,
|
showReadingTime: true,
|
||||||
feedOptions: {
|
feedOptions: {
|
||||||
type: ['rss', 'atom'],
|
type: ['rss', 'atom'],
|
||||||
|
title: "Yehor Vialov's Blog",
|
||||||
|
description: 'Some notes, interesting things and projects',
|
||||||
|
copyright: 'Copyright © ${new Date().getFullYear()} Yehor Vialov',
|
||||||
xslt: true,
|
xslt: true,
|
||||||
},
|
},
|
||||||
blogSidebarTitle: 'Timeline',
|
blogSidebarTitle: 'Timeline',
|
||||||
@ -112,6 +115,14 @@ const config = {
|
|||||||
label: 'Blog',
|
label: 'Blog',
|
||||||
to: '/blog',
|
to: '/blog',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Blog RSS feed',
|
||||||
|
to: '/blog/rss.xml',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Blog Atom feed',
|
||||||
|
to: '/blog/atom.xml',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
BIN
static/img/homelab.png
Normal file
BIN
static/img/homelab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
Reference in New Issue
Block a user