From f9be7b0c1069db9ef1b74f330d989431adb89e50 Mon Sep 17 00:00:00 2001 From: yehor Date: Wed, 21 May 2025 11:43:49 +0300 Subject: [PATCH] Add new blog post --- .../index.md | 101 ++++++++++++++++++ docusaurus.config.js | 11 ++ static/img/homelab.png | Bin 0 -> 17902 bytes 3 files changed, 112 insertions(+) create mode 100644 blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md create mode 100644 static/img/homelab.png diff --git a/blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md b/blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md new file mode 100644 index 0000000..0617f43 --- /dev/null +++ b/blog/2025-05-21-make-one-proxmox-node-to-wol-another/index.md @@ -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. + + + +:::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= + +[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 +``` + +Where `vmbr0` is a bridge network interface of current Proxmox node, and `` 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 +``` \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index f046e73..5abc536 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -56,6 +56,9 @@ const config = { showReadingTime: true, feedOptions: { type: ['rss', 'atom'], + title: "Yehor Vialov's Blog", + description: 'Some notes, interesting things and projects', + copyright: 'Copyright © ${new Date().getFullYear()} Yehor Vialov', xslt: true, }, blogSidebarTitle: 'Timeline', @@ -112,6 +115,14 @@ const config = { label: 'Blog', to: '/blog', }, + { + label: 'Blog RSS feed', + to: '/blog/rss.xml', + }, + { + label: 'Blog Atom feed', + to: '/blog/atom.xml', + }, ], }, { diff --git a/static/img/homelab.png b/static/img/homelab.png new file mode 100644 index 0000000000000000000000000000000000000000..50c38cd64b35f0170966e84342f8e7ba1443c9de GIT binary patch literal 17902 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