背景:
需要管理多台计算机,所有计算机在一个局域网内,并且有的安装了Windows系统,有的安装了Linux系统。我们想远程关闭和启动所有计算机。关闭计算机直接通过网络发生操作系统关机命令即可实现,但远程开机就有点麻烦了。通过搜索资料发现远程唤醒技术可以实现,下面把方法做个记录。
环境:
1、源计算机是一台工控机,安装了Debian9操作系统。通过它发送唤醒报文
2、目标计算机有多台,分别安装有windows10系统,Debian9 linux系统和CentOS Linux系统。这些机器都需要被远程启动。
原理:
远程唤醒的基本原理就是通过源计算机发送广播报文给目标计算机,因为是二层局域网,这里的广播报文以目标计算机的Mac地址为对象。
但有人可能会好奇,计算机处于关机状态怎么能处理广播报文呢?答案是网卡!
计算机虽然关机了,但计算机在通电的情况下,网卡还可以处理监听状态。当网卡收到特定的唤醒报文后,就可以唤醒启动计算机。
当然这里需要网卡硬件的支持,现在主流的有线网卡都支持远程唤醒,而无线网卡一般不支持。
方法:
1、wakeonlan唤醒工具和唤醒命令
源计算机需要安装相应软件才可以发现广播报文唤醒远端计算机。这里我们使用了wakeonlan软件,安装方法如下:
$ sudo apt install wakeonlan
唤醒命令如下:
$ wakeonlan 11:22:33:44:55:66 (即目标计算机的Mac地址)
linux系统下也可以使用其它软件实现唤醒功能,
具体可参考Debian官网介绍:https://wiki.debian.org/WakeOnLan
2、被唤醒计算机的配置
(1) BIOS开启LAN或WLAN唤醒功能
计算机启动时按F10或F11或Delete键(不同计算机有差异,具体可以按自己的型号百度)进入系统BIOS,然后找带有Wake on LAN等字样的设置项。不同品牌和型号的计算机差异比较大,比如Dell计算机在电源管理项里面,而西门子工控机在ACPI设置里,如下图:
如果不确定的话,只能在BIOS里一个个点一下,找带有Wake on LAN字样的,然后打开此项功能。下图是Dell计算机里的设置,这里只是举个例子,按实际设置。
(2)操作系统层面开启唤醒监听功能
Linux系统:
首先安装ethtool工具: $ sudo apt install ethtool
然后使用ethtool工具查询网卡信息: $ ethtool eth0 (eth0时网卡名,可通过ip address查询)
查询返回结果如下:
Supports Wake-on: g
Wake-on: g
Wake-on 参数:
d 表示禁用disable
g表示启用great
如果返回的wake-on参数为d,则要启用wol, 启用命令:
sudo ethtool -s eth0 wol g
PS:有些服务器这里把网卡唤醒功能开启后,重启后会丢失。针对这种情况,需要把上面的命令添加到开机自动执行。
Windows系统:
windows系统的设置分三个地方:
1、打开需要接收广播报文的网卡属性里,找到高级,把里面相关唤醒的设置全部启用。例如:
唤醒幻数据包、唤醒模式匹配等。
2、网卡属性里找到电源管理,勾选如下。
3、关闭计算机的快速启动功能
在控制面板->电源选项->选择电源按钮的功能,然后在更改当前不可用的设置里关闭下面的快速启动。
其它问题:
1、如果wakeonlan mac地址启动时报255.255.255.255不可达:可以尝试把本地网关IP地址设置成255.255.255.255
Network is unreachable at /usr/bin/wakeonlan line 126.
sending magic package to 255.255.255.255:9 with ....(mac地址)
2、如果计算机有多个网口,如果其中一个网口的唤醒功能不生效,可以尝试换一个网口。可能多网口计算机上只有一个网口支持唤醒。
3、在Dell计算机中,需要把如下BIOS设置中的Deep Sleep Control关闭掉。
4、一台Dell 3930的服务器无法进入到BIOS设置网卡唤醒功能, 选择进入BIOS就黑屏。最后通过服务器的集成显卡接显示器进入了,之前通过独立显卡一直进不去。