网络唤醒主机一览
2022-07-27 19:24:23 阿炯

网络唤醒(Wake-on-LAN)在早些年间是比较高端的主机(网卡)上才具备的功能,用于系统管理员的远程开机操作,经过多年的发展,该功能基本上是全面覆盖了。可用于远程启动如工作站、NAS存储设备等需要使用时才启动的主机,比之于加电自动引导与定时加电启动要更加灵活可控。

WOL(Wake-On-LAN)是一种用于远程唤醒局域网内主机的一种解决方案。Wake-on-LAN简称WOL或WoL,中文多译为“网上唤醒”、“远程唤醒”技术。WOL是一种技术,同时也是该技术的规范标准,它的功效在于让已经进入休眠状态或关机状态的计算机,通过局域网多半为以太网的另一端对其发令,使其从休眠状态唤醒、恢复成运作状态,或从关机状态转成引导状态。此外与WOL相关的技术也包括远程下令关机、远程下令重启等相关的遥控机制。但对于跨网络的远程唤醒功能由于网络中路由器的限制,这种解决方案只能在主控机和被控机位于同一广播域的情况下使用。也有一种廉价、低耗且实用的WOL-Proxy的设计方案,利用单片机技术,实现了基于WOL的跨网络远程唤醒主机的功能。

工作原理

可被远程唤醒的计算机必须有其电源、主板和网卡等硬件的支持,该计算机的电源是必需符合ATX 2.03标准的ATX电源,+5V Standby电流至少应在720mA以上,否则某些耗电较大的网卡可能无法启动;主板必须支持WOL,并在其BIOS中的电源管理菜单中启用这项功能。

网卡也必须支持WOL,其与普通网卡的区别主要表现在:
1).早期支持WOL的网卡都有一个3针的WOL接口,并通过一根3芯电缆与主板相连,以获得供电;
2).支持网络启动功能的网卡都有一块支持WOL的芯片。

具备上述硬件要求的计算机便可被运行在局域网内另外一台计算机上的一些实用软件唤醒了。软件通常会在局域网内广播一个UDP数据包,端口不限,数据内容是一个有着特定格式的数据包:Magic Packet,其格式为:6个0xFF加16个目标网卡MAC地址,因此该Magic Packet总长度为。6+16*6=102个字节,如下表所示。

表:Magic Packet数据报格式

字 节

含 义

1~6字节是6个重复的0xFF

表示该包是网络唤醒数据包

内容

FF-FF-FF-FF-FF-FF

字节

7~12字节是目标网卡MAC地址

内容

00-10-2A-C3-D4-BB

字节

13~18字节是目标网卡MAC地址

内容

00-10-2A-C3-D4-BB

字节/内容

……

字节

97~102字节是目标网卡MAC地址

内容

00-10-2A-C3-D4-BB



只有指定的支持WOL的网卡才会处理这个数据包,并唤醒这台计算机。

魔术包

将唤醒魔术包发送到被唤醒机器的网卡上,魔术包指AMD公司开发的唤醒数据包,具有远程唤醒的网卡都支持这个标准,用16进制表示如下:
6对“FF”前缀+16次重复MAC地址组成

无线唤醒Wake-on-Wireless-LAN,WoWLAN作为 WOL 的补充技术,使用无线网卡去唤醒计算机,但是需要无线网卡支持。在局域网外唤醒局域网内特定计算机,可以使用路由器的 DNS 与端口转发。

有时魔术包内还会紧接着4-6字节的密码信息。这个帧片段可以包含在任何协议中,最常见的是包含在 UDP 中:
FF FF FF FF FF FF FF 被唤醒端MAC 地址 x 16 4-6字节的密码可空

被唤醒端网卡需要配置

BIOS模式下打开Wakeup By Pci或PCI Express Power Management或PME EVENT Wake Up类似选项(BIOS 里关于 WOL 网络唤醒的选项一般是类似这些字眼 wake on lan;resume on lan;power on PME;power on by PCI-E device; Power on by Onboard LAN 等等,将其设为 Enabled 即可,这是必须条件)。网卡配置中电源管理选项卡中勾选允许此设备唤醒计算机或在网卡驱动里设置开启 WOL 相关选项。

Windows在设备管理器中找到网卡设备,右键选择「属性」,然后在「电源管理」里面开启「允许此设备唤醒计算机」,再然后在「高级」一栏里找到「关机网络唤醒」、「魔术封包唤醒」里设置成「开启」。这里的选项名称在不同厂商不同网卡都不一样的,有些网卡驱动是英文的,类似选项为 Wake up by Magic Packet; wait for link 等。

设置通过互联网进行 WOL 远程唤醒

虽然 WOL (Wake on Lan) 网络唤醒原本的设计就是 LAN 局域网环境下使用的,但其实也是可以想办法让其在 WAN 广域网 (即互联网) 下使用——Wake On Wan。广域网 WOL 主要是要在路由器里配置,首先设置静态固定IP;其次是开启 ARP 绑定 (部分路由器没有这功能,这可能会导致广域网无法持续成功 WOL)。开启 UDP 端口映射(端口转发),新增一个 UDP 协议的端口 (一般端口号用 7 或 9),指向局域网内需要被唤醒的电脑的 IP,以确保公网的请求能到达最终内网的机器(如果是群晖 NAS 默认端口号一般是 5000,QNAP 端口号为 4505)。还可以借助DDNS (动态域名/动态 DNS) 来获得一个「固定的域名」,一些路由器或 NAS 厂商也会提供免费的 DDNS 服务。在成功设置好 DDNS 之后,则是使用动态域名来代替机器的 IP 地址进行 WOL 即可。

魔术包(幻数据包)发送方式

1).通常用udp发送,默认端口为9;
2).将对方的mac地址用于数据包内容;
3).发送至对方ip地址或者发广播地址。

通过在Linux终端中执行相关的指令来通过网络唤醒相关主机需要的前置条件:
1).被唤醒的主机接通了电源,即关机时候为主板通电600mA以上电流,所以电源切断是不行的,网卡带电才可以;
2).主板支持,现在的主板基本都支持,所以基本不用担心,2000年左右的主板需要插网卡(PCI2.1标准)需要3针WOL线连接主板;非正常关机可能会唤醒失败,所以里如果断电导致关机的话可能需要手工开启机器;被唤醒的电脑必须连接内部局域网,或者路由器,并且有一台手机或者电脑可以发送唤醒包;
3).该主机的网卡与主板(BIOS中开启)均支持远程唤醒功能,部分情况需要在操作系统中对网卡设置该功能,需要知晓MAC地址和静态IP(可能还涉及主机的防火墙)。

原理也比较简单:通过向该主机网络广播UDP魔法数据包(Magic Packet)帧,经过网卡侦测、解读、研判(广播)魔法数据包的内容,内容中的MAC地址、密码若与电脑自身的地址、密码吻合,就会启动唤醒、引导的程序。

Linux主机对远程唤醒的支持情况

硬件的设置可见上述,这里主要讲解操作系统上的情况。

目前Linux下有wakeonlan、etherwake(ether-wake)小工具来提供此功能,其中wakeonlan系Perl所开发。

NetCard MAC address format xx:yy:zz:11:22:33

etherwake MAC-Address-Here
etherwake -D MAC-Address-Here

不知道对方的MAC地址,可以用以下的方式查看:
ping -c 4 server-freeoa-ip && arp -n

wakeonlan mac-1 mac-2

使用子网的广播地址
wakeonlan -i 192.168.1.255 mac

带上端口
wakeonlan -i 192.168.1.255 -p PORT mac

从文件中读入IP或MAC地址
wakeonlan -f homelab.wol
wakeonlan -f homelab.wol mac

more homelab.wol

Sample config file:
# File structure
# --------------
# - blank lines are ignored
# - comment lines are ignored (lines starting with a hash mark '#')
# - other lines are considered valid records and can have 3 columns:
#
#Hardware address, IP address, destination port
#
#the last two are optional, in which case the following defaults are used:
#
#IP address: 255.255.255.255 (the limited broadcast address)
#port:9 (the discard port)
#
00:16:3e:a3:9d:a8    192.168.1.255        9
00:16:3e:08:ed:c6    255.255.255.255
f0:1f:af:1f:2c:60

Linux下查看网卡对此的支持情况

使用ethtool工具

设定eth0这个网卡使用魔法数据包来响应WOL
ethtool -s eth0 wol g

wol g : Sets Wake-on-LAN options using MagicPacket.

如果不支持则会有如下提示:
Cannot get current wake-on-lan settings: Operation not supported
  not setting wol
 
查询网卡的支撑情况
ethtool eth0
...
Auto-negotiation: off
Supports Wake-on: g
Wake-on: g

可在网卡的配置文件中设置:
/etc/network/interfaces
/etc/sysconfig/network-scripts/ifcfg-ethX

ETHTOOL_OPTS="wol g"

ETHTOOL_OPTS="wol g autoneg off speed 100 duplex full "

或在
post-up /sbin/ethtool -s eth0 wol g
post-down ...