openWRT路由器使用WoL唤醒Linux主机
一. 准备工作
- 一台具备可用的 LAN 唤醒功能,支持WoL(Wake On LAN)功能的主机,需要网卡支持,根据网卡型号在对应的官网查找即可,主流的最近的网卡基本都支持。
比如我的主机是戴尔的T7810工作站,在戴尔的官网就可以找到:《如何在戴尔系统上设置-lan-唤醒-wol》,在支持的设备列表中可以找到。 - 一台支持进入系统后台的路由器,我这里用的是基于openWRT的Pandora系统的极路由4增强版无线路由器。
openWRT是基于Linux发行版的嵌入式版本,内核其实也是Linux,完全可以当作是一台小型的主机。因为WoL只能在内网唤醒,当初我还在想要是我的服务器意外关闭我应该怎么远程唤醒它的时候,突然想起来可不可以用路由器作为一台主机对其进行唤醒,查了查果真可以。
注意,某些品牌的路由器支持ARP绑定唤醒,所以可以不用敲命令行就很方便的进行远程唤醒。 - IP地址是公网IP,这个对于远程唤醒至关重要,为了保证可以及时的获取最新的IP地址来远程连接路由器,还需要给路由器绑定DDNS,这里用的是公云(3322)的免费服务,质量和稳定性非常好。
二. 路由器
- 在路由器上主要的操作就是打开路由器远程登陆权限和系统后台对外权限。
- 首先需要处理的是DDNS绑定,看这里:《申请域名并使用DDNS》
要想保证IP及时更新,请将"检查间隔"设置的尽量短,但是也不要设定太短,否则可能会影响性能。 - 对外开放路由器后台,在"防火墙 - 端口转发",按下图设置。
不要忘记保存&应用,下面来试一下是否可以用外网登陆,可以选择用 DDNS:刚刚设定的端口 来尝试。
- 对外放开SSH登陆路由器系统后台,在"系统 - 管理"中配置。
接口一定要用LAN,端口保持22即可,这并不是对外的接口,因为还需要配置端口转发,用来指定外面连接使用的端口。
密码验证和允许root用户凭密码登陆一定要关掉,否则会很不安全,使用SSH登陆最安全。网关端口要开启,用来保证SSH验证可以通过。
和配置路由器后台一个流程,配置路由器系统的端口转发,内部端口就是上面设置的22。
下面用配置了SSH私钥的macOS的SSH连接工具进行连接尝试。
SSH默认使用22端口,因为之前配置的外部接口肯定不会是22,所以需要在连接后面用p <对外接口>
拼接。
顺利的登陆到了路由器后台。 - 安装唤醒工具
openWRT官方提供了两种唤醒工具,wol 和 etherwake,我还是比较喜欢使用etherwake。
openWRT包管理工具:opkg
wol语法:/usr/bin/wol -i <目标主机所在局域网的广播地址> <目标机网卡MAC地址># 后台执行命令 opkg update opkg install wol etherwake
举例:/usr/bin/wol -i 192.168.1.255 XX:XX:XX:XX:XX:XX
etherwake语法:/usr/bin/etherwake -b <目标机网卡MAC地址> -i <路由器网卡名称>
举例:/usr/bin/etherwake -b XX:XX:XX:XX:XX:XX -i br-lan
三. 目标主机(Linux)
- 目标主机的配置相对来说比较简单,分别是在BIOS设置和系统中确认是否开启WoL功能。
- 以手头的戴尔T7810工作站为例,启动F12进入BIOS。选择"System Configuration - Integrated NIC",这是设置板载网卡的,设置为Enabled即可。
戴尔T7910工作站BIOS手册:手册
- 在"Power Managerment - Wake on LAN"设置为LAN Only,这是开启WoL的功能。
- 在"Power Managerment - Deep Sleep Control"中,设置为Disabled,关闭深层睡眠,这个很关键,保持网卡处于一直激活状态。
- 保存设置并重新启动,进入Linux系统。首先需要确定当前系统是否开启WoL功能。
- 检查板载网卡:
ifconfig
,找到带内网IP的网卡,就是连接正在使用的板载网卡。
里面第一个红框就是网卡的名字,第二个红框是内网IP地址,第三个红框是网卡的MAC地址,记下这三个数据。 - 检查板载网卡设置:
ethtool <网卡名称>
看第一个红框,里面记录的是支持的WoL模式。
第二个红框就是当前WoL设置的启动模式。如果是d的话,需要手动修改网卡配置。d -- 禁用 p -- 物理活动唤醒 u -- 单播消息唤醒 m -- 多播(组播)消息唤醒 b -- 广播消息唤醒 a -- ARP 唤醒 g -- 特定数据包magic packet唤醒 s -- 设有密码的特定数据包magic packet唤醒
再次进入系统,使用ethtool命令查看网卡的WoL模式是否为"g"。# 进入目录 cd /etc/sysconfig/network-scripts # 使用文本编辑器打开名为 ifcfg-网卡名 的文件,替换成自己的 nano ifcfg-exxxxxxxx5 # 将下面文本添加到文件末尾 ETHTOOL_OPTS=”wol g” # 保存文件并退出重启系统
- 检查板载网卡:
四. 尝试远程启动
- 一切准备就绪,关闭目标机,外网通过DDNS的域名登陆到路由器系统后台。
- 使用etherwake命令唤醒目标主机!
如果报错请检查路由器当前使用的网卡名是什么,命令还是ifconfig,带内网IP地址的就是
将此网卡名替换掉 -i 后面的字符串即可。
不出意外已经激活了目标主机了。
五. 其他操作
因为登陆路由器系统还是比较费劲的,最好在路由器管理界面就唤醒机器。
openWRT提供了一个带页面的远程唤醒工具。
# 路由器后台命令行执行更新opkg命令
opkg update
# 安装如下,第一个是wol的主程序,第二个是汉化包
opkg install luci-app-wol luci-i18n-wol-zh-cn
# 安装完毕,清理路由器的luci界面缓存
rm /tmp/luci-indexcache
# 重新进入路由器后台
当然,如果用PandoraBox或者其他UI的如果有软件包管理页面,也可以忽视第二节的第4部分及以下部分。
因为我这个是PandoraBox,所以位置在"服务 - 网络唤醒"Tab页。