2025-04-06 更新:添加 systemd.link 方法
一般来说,WoL 功能可以在主板 BIOS 中设置,开启就 OK
但是,对于一些 BIOS 中没有 WoL 设置的主板,需要在操作系统中开启 WoL,比如我的 Z370M-DS3H
参考
- https://www.thomas-krenn.com/en/wiki/Wake_On_LAN_under_Linux
- https://serverfault.com/questions/54704/how-to-get-ethtool-wake-on-lan-setting-to-stick
- https://wiki.archlinux.org/title/Wake-on-LAN
- https://forum.proxmox.com/threads/wake-on-lan-on-pve.124785/
步骤
查看网卡信息
首先查看网卡支持的所有 Wake-on 模式,执行
ethtool [网络接口名称]
查看输出的 Supports Wake-on 行,该行字母对应的 Wake-on 模式:
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
s Enable SecureOn password for MagicPacket
d Disable (wake on nothing). This option clears all previous options.
我的输出了 Supports Wake-on: pumbg,支持 WoL
然后查看 Wake-on 行,这行的字母代表当前网卡使用的 Wake-on 模式(字母对应上文)
如果 Wake-on 为 d,代表 Wake-on 关闭(我的输出为 d)
如果要开启 WoL,需要将 Wake-on 模式改为 Wake on MagicPacket,对应字母为 g
使用指令更改 Wake-on 模式
ethtool -s [网络接口名称] wol g
但是,如果此时重启系统,会发现 Wake-on 模式会被重置为 d,关机后也无法通过魔法包唤醒,网口指示灯也不亮
所以需要修改配置文件
修改 interfaces 文件
编辑 /etc/network/interfaces,在待开启 WoL 的网络接口配置下添加
iface [网络接口名称] inet manual
post-up /usr/sbin/ethtool -s [网络接口名称] wol g
post-down /usr/sbin/ethtool -s [网络接口名称] wol g
重启系统
再次关闭系统后发现主板网口灯亮,使用魔法包可以唤醒机器
新增 systemd.link 文件
使用 ifconfig、ip 等指令查看并记录对应网口的 MAC 地址
然后在 /etc/systemd/network/ 下新建文件 90-wakeonlan.link,写入以下内容
[Match] MACAddress=[your NIC's MAC address here] [Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent WakeOnLan=magic
新建后直接关机即生效
在 PVE 8 下测试

这里我只是同步了 main 源