1. 问题描述

在维护 Ubuntu Server 时,我们经常发现:如果系统在运行状态,通过魔法封包(Magic Packet)可以正常唤醒;但一旦执行sudo poweroff彻底关机,远程唤醒就会失效。
根本原因: Ubuntu 的网络管理器(Netplan/NetworkManager)在关机流程中,默认会将网卡的状态设置为禁用唤醒并切断供电,导致网卡无法在关机后监听网络指令。

2. 环境准备

确保你已经在 BIOS 中开启了以下设置:

  • Wake-on-LANPower On By PCIEEnabled
  • ErP ReadyDeep SleepDisabled(关键:若开启此项,网卡会完全断电)

3. 核心解决方案:修改 Netplan 配置

在 Ubuntu 18.04 及更新版本中,最标准的方法是通过 netplan 显式开启 WOL。
步骤:

  • 使用管理员权限打开配置文件(文件名通常以.yaml结尾):
sudo nano /etc/netplan/50-cloud-init.yaml

在你的物理网卡配置下添加wakeonlan: true。注意 YAML 的缩进非常严格,建议参考以下格式:

network:
    version: 2
    ethernets:
        enp2s0:  # 你的网卡名称
            addresses:
                - 1.1.1.2/24
            nameservers:
                addresses:
                    - 1.1.1.1
            routes:
                - to: default
                  via: 1.1.1.1
            wakeonlan: true  # 核心配置:强制关机后保持监听
  • 应用配置:
sudo netplan apply

如果提示Invalid YAML: inconsistent indentation,请检查viato等行的空格是否对齐。

4. 验证状态

安装 ethtool 工具来确认设置是否生效:

sudo apt install ethtool
sudo ethtool enp2s0 | grep Wake-on

预期输出:

Supports Wake-on: pumbg
Wake-on: g

只有当Wake-on值为g时,魔法封包才能在关机状态下唤醒机器。