在 Proxmox VE(PVE)中设置网络唤醒(Wake-on-LAN, WOL)需结合硬件配置、系统命令和开机自启动设置。以下是详细步骤,分为 PVE 主机唤醒PVE 下虚拟机唤醒两类场景:


⚙️ 一、PVE 主机唤醒(物理机远程开机)

1️⃣ 硬件准备

  • 主板支持:进入 BIOS 的 Power Management 选项,开启以下功能:

    • Wake-on-LAN(或 WOLPME Event Wake Up)。

    • PCI/PCI-E 设备唤醒(部分主板需单独启用)。

  • 网卡支持:确认网卡支持 WOL(通过 ethtool 检查输出 Supports Wake-on: pumbg)。

2️⃣ PVE 系统配置

  1. 安装 ethtool

    bash

    apt update && apt install ethtool
  2. 查看网卡名称

    bash

    ip a  # 确认网卡名(如 `enp4s0`)
  3. 启用 WOL 并测试

    bash

    ethtool -s enp4s0 wol g  # 开启 WOL
    ethtool enp4s0 | grep Wake-on  # 检查是否显示 `Wake-on: g`

    注意:该设置重启后失效,需配置自启动⬇️。

  4. 设置开机自启(三选一)

    • 方法①:通过 rc.local(推荐简单场景)
      编辑 /etc/rc.local,添加以下内容(网卡名需替换):

      bash

      #!/bin/bash
      /sbin/ethtool -s enp4s0 wol g
      exit 0

      赋予权限:chmod +x /etc/rc.local

    • 方法②:通过 systemd 服务(推荐生产环境)
      创建服务文件 /etc/systemd/system/wol.service

      ini

      [Unit]
      Description=Enable Wake-on-LAN
      After=network.target
      
      [Service]
      Type=oneshot
      ExecStart=/usr/sbin/ethtool -s enp4s0 wol g
      
      [Install]
      WantedBy=multi-user.target

      启用服务:

      bash

      systemctl enable wol.service
      systemctl start wol.service
      ```:cite[5]  
    • 方法③:定时任务(备用)
      添加 cron 任务(每天开机时执行):

      bash

      echo "0 16 * * * root /sbin/ethtool -s enp4s0 wol g" >> /etc/crontab
      ```:cite[1]

3️⃣ 获取 MAC 地址并测试唤醒

  • 查询 MAC

    bash

    ethtool -P enp4s0  # 或 ip a show enp4s0
  • 局域网唤醒
    使用另一台设备发送魔术包(工具如 wakeonlanetherwake 或路由器内置网络唤醒功能):

    bash

    wakeonlan -i PVE_IP PVE_MAC

💻 二、PVE 下虚拟机唤醒(伪 WOL)

若需通过魔术包唤醒 PVE 管理的虚拟机,需借助第三方工具(如 dosthol),因为虚拟机网卡无法直接响应广播包。

1️⃣ 安装 dosthol 工具

bash

apt install gawk socat xxd
wget https://附件链接/dosthol.zip  # 从原帖下载工具:cite[6]
unzip dosthol.zip
cp dosthol.sh /usr/local/bin/
cp dosthol.service /etc/systemd/system/
chmod +x /usr/local/bin/dosthol.sh
systemctl enable dosthol
systemctl start dosthol

2️⃣ 配置虚拟机

  1. 为虚拟机添加非直通虚拟网卡(型号不限)。

  2. 记录该网卡的 MAC 地址(在虚拟机配置中查看)。

3️⃣ Home Assistant 集成示例

yaml

switch:
  - platform: wake_on_lan
    name: "PVE_VM"
    mac: "XX:XX:XX:XX:XX:XX"  # 虚拟机虚拟网卡 MAC
    host: "192.168.x.x"        # 虚拟机 IP
    turn_off:
      service: shell_command.turn_off_vm

shell_command:
  turn_off_vm: "bash /config/turn_off.sh"  # 自定义关机脚本

⚠️ 三、注意事项

  1. 网卡名称:PVE 默认网卡名可能为 enpXs0vmbr0 绑定的物理网卡,需通过 ip a 确认。

  2. 公网唤醒:需搭配内网穿透(如 WireGuard)或路由器端口转发(UDP 端口 7/9)。

  3. 故障排查

    • 重启后检查 WOL 状态:ethtool enp4s0 | grep Wake-on

    • 测试命令:dostholc.sh -f wakeup -m MAC -v 1(虚拟机场景)。

    • 确保 PVE 关机后网卡指示灯常亮(物理唤醒必要条件)。


💎 总结

场景

核心步骤

自启动方案

PVE 物理主机唤醒

BIOS 开启 WOL + ethtool -s wol g

rc.local 或 systemd 服务

PVE 下虚拟机唤醒

安装 dosthol + 添加虚拟网卡

绑定 Home Assistant 开关

按上述操作后,即可通过局域网/公网远程唤醒 PVE 主机或虚拟机。若唤醒失败,重点检查 BIOS 设置网卡支持性自启动服务状态