远程唤醒电脑主机

Posted by Steel Shadow on October 21, 2025

缘由

宿舍里的主机有远程桌面控制需求,但是主机有噪音,影响睡眠。每天早上出门时又可能忘记开机,导致出门在外无法使用主机(总不能每次都麻烦室友按电源吧)。

为了保证能在关机状态开启主机,我目前想到以下几个方案。

方案 所需设备/成本
路由器 WoL/WoLAN openwrt 无线路由器
单片机控制继电器 ESP8266 继电器 面包板 杜邦线

WoL (Wake-on-LAN) 是一种通过网络唤醒计算机的技术。计算机在关机状态下,网卡仍然保持通电状态,监听特定的网络数据包(称为“魔术包”)。当网卡接收到包含目标计算机 MAC 地址的魔术包时,计算机会被唤醒。WoL 需要主板和网卡支持,并且需要在 BIOS 和操作系统中启用相关设置。WoWLAN (Wake on Wireless LAN) 是 WoL 的无线版本,通过无线网络发送魔术包来唤醒计算机,值得注意的是,很多网卡都不支持 WoWLAN。

BUAA 校园网环境:WoWLAN 不可行

我原计划使用 WoWLAN 方案,但尝试过后发现不可行。

IPv4 IP隔离

测了一晚上 WoWLAN 方案都无效,使用 Wireshark 抓包,发现接收端根本没有 magic packet。才想起来校园网对 ipv4 有 AP 隔离,ipv6 就不受影响。我尝试的几个 WoL 客户端都采用 ipv4 地址,导致测试一直失败。自己编写 python 脚本进行测试,改用 ipv6 单播地址后,WoWLAN 终于成功。

断电校园网地址过期

在主机断电后过一段时间,网卡的校园网认证过期,导致在断电等待 WoWLAN 时,主机原有的 ipv6 地址失效(我观察到的现象是子网号改变),无法通过原有的 ipv6 地址发送魔术包唤醒主机。

路由器 WoL

购买路由器,刷入 OpenWRT 固件,路由器连接到公网服务器,我向公网服务器发送命令,服务器指示路由器发送 WoL 魔术包唤醒主机。

路由器与公网服务器连接的具体方案:

  • MQTT 消息队列
  • websocket
  • frp 内网穿透

路由器与主机以太网连接,路由器使用 WoL 唤醒直连主机。

单片机控制继电器

修改电脑主板的电源连线,将机箱按钮的 2 根电源按钮与继电器并联,继电器另一端连接到 ESP8266。单片机电源线连接主板的 5VSB (stand by +5V) 电源。当主机断电时,5VSB 依然有电压供应给单片机,单片机可以正常工作。

为了保证远程开机不影响原有按钮开机,两者应当并联。这样修改电路连线,需要面包板/杜邦母口转接板。此方案较为复杂,调试麻烦,但不要求主机支持 WoL 功能。

ESP-主机电路图

使用 ESP8266(带有WIFI模块的单片机) 连接公网服务器,服务器发送指令给 ESP8266,ESP8266 控制继电器闭合,物理按下主机电源按钮。