Debian 12 · ethtool · Magic Packet

Wake on LAN

Wybudź komputer Magic Packetem z każdego urządzenia w sieci lokalnej. Kompletny przewodnik — gotowe komendy, gotowy skrypt.

💻
Windows
PowerShell
📡
Router
192.168.1.x
🖥️
Debian
.126
Interfejs
enp3s0
MAC
30:85:a9:46:bf:af
IP Debiana
192.168.1.126
Broadcast
192.168.1.255
WOL
● aktywny (g)
Konfiguracja na Debianie
01
Znajdź kartę sieciową
Szukaj nazwy typu enp3s0, eno1, eth0.
bash
ip link
ip route get 1.1.1.1
02
Zainstaluj ethtool
bash
sudo apt update
sudo apt install ethtool
03
Sprawdź obsługę WOL
Szukaj Supports Wake-on: ... g ... i Wake-on: g.
bash
sudo ethtool enp3s0 | grep -i wake
04
Włącz WOL (jeśli Wake-on: d)
bash
sudo ethtool -s enp3s0 wol g
echo enabled | sudo tee /sys/class/net/enp3s0/device/power/wakeup
05
Trwałe ustawienie — usługa systemd
Utwórz /etc/systemd/system/wol.service:
bash
sudo nano /etc/systemd/system/wol.service
systemd unit
[Unit]
Description=Enable Wake-on-LAN
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp3s0 wol g
ExecStart=/bin/sh -c 'echo enabled > /sys/class/net/enp3s0/device/power/wakeup'

[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now wol.service
06
Wyłącz Debiana poprawnie
Nie odcinaj prądu z listwy. Diody przy gnieździe LAN powinny nadal świecić lub migać po wyłączeniu.
bash
sudo systemctl poweroff
Magic Packet z Windowsa — PowerShell
powershell — gotowy do użycia
$mac       = "30:85:a9:46:bf:af"
$broadcast = "192.168.1.255"
$port      = 9

$macBytes = ($mac -split "[:-]") | ForEach-Object { [Convert]::ToByte($_, 16) }
$packet   = [byte[]]((,0xFF * 6) + ($macBytes * 16))

$udp = New-Object System.Net.Sockets.UdpClient
$udp.EnableBroadcast = $true
$udp.Connect($broadcast, $port)
[void]$udp.Send($packet, $packet.Length)
$udp.Close()

"Magic Packet sent to $mac via $broadcast:$port"
// nie wymaga uprawnień admina  ·  jeśli nie działa, zmień broadcast na 255.255.255.255
Test przed wyłączeniem
📡
Nasłuch na Debianie — sprawdź czy pakiet dochodzi
Uruchom poniższe, wyślij pakiet z Windowsa — powinieneś zobaczyć ruch UDP na porcie 9.
bash
sudo apt install tcpdump
sudo tcpdump -i enp3s0 -nn udp port 9 or udp port 7
Symulacja wybudzania
WOL SIMULATOR — enp3s0 · 30:85:a9:46:bf:af
💻
Windows
🖥️
Debian · .126
uśpiony — czeka na Magic Packet
BIOS — krytyczne ustawienia
✓ ENABLED
Power On By PCIE
Najważniejsza opcja. Bez niej karta sieciowa traci zasilanie po wyłączeniu i WOL nie zadziała.
✗ DISABLED
ErP / EuP
Tryb ErP odcina zasilanie od urządzeń PCIe po wyłączeniu. Musi być wyłączony.
Diagnoza gdy nie działa
⚠ Diody Ethernet całkowicie gasną po wyłączeniu → karta nie dostaje zasilania → WOL niemożliwy. Sprawdź BIOS (Power On By PCIE / ErP).
✓
tcpdump widzi pakiet, ale komputer nie wstaje
Problem z BIOS/zasilaniem. Sprawdź Power On By PCIE i ErP.
✗
tcpdump nie widzi pakietu
Problem sieciowy — firewall, VLAN lub router blokuje broadcast. Testuj z tego samego segmentu.
↺
Wake-on: d po restarcie
Usługa systemd nie uruchomiła się. Sprawdź: systemctl status wol.service
→
Używasz NetworkManagera?
sudo nmcli connection modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic
Gotowy skrypt — skopiuj i uruchom
powershell — wol.ps1
$mac       = "30:85:a9:46:bf:af"
$broadcast = "192.168.1.255"
$port      = 9

$macBytes = ($mac -split "[:-]") | ForEach-Object { [Convert]::ToByte($_, 16) }
$packet   = [byte[]]((,0xFF * 6) + ($macBytes * 16))

$udp = New-Object System.Net.Sockets.UdpClient
$udp.EnableBroadcast = $true
$udp.Connect($broadcast, $port)
[void]$udp.Send($packet, $packet.Length)
$udp.Close()

"Magic Packet sent to $mac via $broadcast:$port"