WOL(Wake-on-LAN)科普:从原理到在 NAS 与 Docker 上的实战应用

alt text 在家庭与小型办公室的数字化管理场景中,“远程开机”早已成为高频需求。不论是外网访问 NAS 文件、远程开发、还是让家里的主机做下载/渲染,“让设备在需要时自动开机”都是提高效率的关键能力。

而让这一切成为现实的核心技术,就是 WOL(Wake-on-LAN)网络唤醒。

本文带你从原理入门,再到手把手在 NAS / 群晖 / Docker 上实现 WOL 的完整方案,简单易懂,适用性强。

一、什么是 WOL(Wake-on-LAN)?

WOL = 网络唤醒

它允许你从网络上远程唤醒一台处于关机状态(低功耗状态)的电脑或设备。

工作条件

只有满足以下条件,WOL 才能成功:

  1. 主板支持 WOL(绝大部分都支持)
  2. 网卡支持 WOL
  3. BIOS/UEFI 中开启 WOL
  4. 网口使用有线网络(WIFI 绝大多数不支持)
  5. 设备关机后网口灯仍闪烁(代表网卡待机)
  6. 确保网关/交换机不会阻断广播包

二、WOL 的工作原理:Magic Packet“魔术包”

网络唤醒的关键,是发送一个特殊格式的数据包: Magic Packet(魔术包)

其结构非常简单:

  FF FF FF FF FF FF (6 字节广播头)
  +
  (目标 MAC 地址重复 16 次)

示例(省略):

FF FF FF FF FF FF  70 4D 7B 1A 2B 5C ...重复16次

当目标设备收到这个结构的广播包,就会从待机状态被唤醒,即便没有系统运行。

三、唤醒方式有哪些?

  1. 局域网唤醒(最稳定): 在同一网段内发送 Magic Packet 即可。

  2. 广域网唤醒(外网唤醒): 需要额外条件

  • ISP 分配固定 IP 或 DDNS
  • 路由器支持端口转发 UDP 9 / UDP 7
  • 路由器支持广播转发

外网 WOL 稍微麻烦一些,但 NAS 通常可以做到。

四、常见 WOL 使用场景

  • NAS 唤醒家庭主机做任务
  • 智能家居触发电脑开机
  • 外出远程访问 PC / 服务器
  • 夜间定时自动唤醒服务器

五、NAS / 群晖 / Docker 中安装 WOL 工具(实战)

下面给出两种种常见环境中的 WOL 工具安装方式:

  • 群晖(Synology)
  • Docker 环境

六、在群晖(Synology)上使用 WOL

  1. 套件中心里搜索 wol alt text
  2. 安装之后启动
  3. 访问

NPS_IP:25091

  1. 添加你想要唤醒的局域网主机 alt text
  2. 点击唤醒即可
  3. 可以用过 rdp 等工具远程连接局域网的主机

七、在 Docker 中安装并使用 WOL(独立容器方式)

如果你希望通过 Docker 部署一个 Web 版 WOL 页面 推荐使用现成的 WOL 容器。

方法一:WOL Web GUI(带网页界面)

流行镜像:tchapi/docker-wakeonlan

配置文件

$ touch config.yaml

machines:
  - name: desktop
    mac: "00:11:22:33:44:55"
    ip: "192.168.1.90 " # 可选,用于状态检查
  - name: server
    mac: "AA:BB:CC:DD:EE:FF"
    ip: "192.168.1.100" # 可选,用于状态检查

server:
  listen: ":7777" # 可选,默认为 :7777

docker 启动 wol web 页面, 监听的端口是 7777

$ docker run -d --network host -v $(pwd)/config.yaml:/etc/wol/config.yaml -- name wol ghcr.io/trugamr/wol:latest serve

或者使用 docker-compose,

$ touch docker-compose.yaml
#Docker Compose 示例jj
services:
  wol:
    image: ghcr.io/trugamr/wol:latest
    command: serve # 启动网页界面
    network_mode: "host"
    volumes:
      - ./config.yaml:/etc/wol/config.yaml

启动

$ docker compose up -d

访问:

http://NAS_IP:7777

要增删改唤醒设备的信息,则需要修改 config.yaml 文件, 然后再重启容器。

$ docker restart wol

点击WAKE即可唤醒

alt text

方法二:命令行版 WOL

  • 流行镜像:tchapi/docker-wakeonlan
  • 配置文件同上

命令行界面

  1. 列出所有已配置的设备
$ wol list
  1. 通过设备名称唤醒设备
$ wol send --name desktop
  1. 通过 MAC 地址唤醒设备
$ wol send --mac "00:11:22:33:44:55"
  1. 启动网页界面
$ wol serve
  1. 显示版本信息
$ wol version

可以在docker中使用 WOL 工具, 来唤醒局域网中的设备。(也可以在已经启动的容器中使用) 也可以额外启动一个容器进行唤醒操作,只要把前面命令行的 wol 替换成docker启动容器的操作即可。

举个例子,列出所有已配置的设备

$ docker run --network host -v $(pwd)/config.yaml:/etc/wol/config.yaml --rm ghcr.io/trugamr/wol:latest list

–rm 是为了在容器启动之后立即删除容器, 避免占用资源

通过 MAC 地址唤醒设备

$ docker run --network host -v $(pwd)/config.yaml:/etc/wol/config.yaml --rm ghcr.io/trugamr/wol:latest send --mac "00:11:22:33:44:55"

由于 WOL 是广播包,Docker 建议使用 –net=host 模式。

八、常见 WOL 失败原因与解决

失败原因解决方案
BIOS 未开启 WOLAdvanced → Wake on LAN → Enabled
关机后网口灯不亮主板不供电,更换设置或主板
网卡驱动禁用节能唤醒设备管理器 → 网卡 → 电源管理
路由器不转发广播打开“广播转发/UDP 广播”
Docker 不在 host 网络使用 –net=host
外网 WOL 无法唤醒使用 DDNS + UDP 9 端口转发

久、总结

  • WOL 是通过广播 Magic Packet 唤醒设备的技术
  • 局域网 WOL 最稳定
  • 群晖天然支持 WOL,也可通过 SSH + etherwake 操作
  • Docker 上可部署网页版 WOL 工具
  • 外网 WOL 需要路由器支持广播转发 WOL 是一个非常简单但极其实用的技术,配合 NAS、Docker、智能家居,你可以轻松构建一个高效的家庭 IT 自动化体系。

--完--