双系统实践WoL
技术 WoL 快捷指令 2

之前家里申请了公网IP,让我得已从公司的电脑远程连接到家里的电脑。macOS 就用VNC,Windows 就是RDP。虽然网络一般,但是基本上还是可以用的。但是这种情况下,必须要让电脑 7 * 24 小时不关机才可以保证在需要的时候随时都可以连接上。但是毕竟住在公司,连接回家里的时长跟在公司的时间相比,就显得微不足道了,这样天天不关机,总感觉不太好,起码是浪费电不环保。
一开始想到的是利用主板(NUC8)的定时开机功能,每天早上开机,不用或者晚上到了睡觉的时间段就自动关机。但是试验了一下,一直都没有成功。可能是装了双系统的缘故(黑苹果 + Windows),试过了好几个时间点,但是主板都没有成功开机,于是这件事情就又不了了之了。
上周,看到了少数派的一篇利用Siri 和WoL 实现远程开机的文章,又重新让我燃起了远程开机的目标。WoL 在上大学的时候就听说过,但是大学期间并没有能通过WoL 唤醒过笔记本,一个是笔记本BIOS 没有找到可以设置的项,一个可能是校园网的问题。现在家中公网IP 在手,跟我走!
想要实现WoL,应该可以通过有线网或者无线网的方式。但是电脑关机之后,无线网卡是否还在工作这个事难以判断的,而有线网是否在工作确是比较好判断的(事实证明,当网线插上之后,灯亮着,我大概率基本上就是可以通过WoL 唤醒成功的)。于是我需要让NUC 连上有线网,可是家里的光猫和路由都在楼下,我住的卧室并没有网口,想让我的电脑也连上网线,
有四种方法:

  1. 把路由拿到楼上
  2. 把电脑拿到楼下
  3. 买一根super 长的网线把路由和电脑连在一起
  4. 👇

路由改造计划

现在家里用的路由是小米路由器4,通过桥接光猫拨号上网,好在家里还有一个远古时期遗留下来的斐讯K2没有P(u1s1,白嫖金融公司的路由器真的香),无线双频,4个百兆LAN。之前刷了breed,安装了网上找的老毛子固件,不过不太会用,就基本当作一个普通的路由器而已,想要桥接光猫上网也失败了(不然也不会买了个小米的)。
这次准备刷一个OpenWrt 的固件,毕竟是开源的,而且也有很多人在一直维护和更新,插件也很多。在官网上略微看了下quick start 之后,下载了固件,进入breed,直接刷上就ok了。
接下来是配置路由网络。LAN 口接电脑,访问192.168.1.1,就可以进入管理页面了。新鲜的界面让我眼前一亮,可是全英文的界面又让我一时没有头绪。好在凭借蹩脚的英文水平,磕磕绊绊还是连上了家里的Wi-Fi,更新opkg 源,下载语言包。接下来就是见证奇迹的时刻具体的配置环节了。

  1. 前提准备:
    1. 电脑LAN 口接路由器LAN 口,访问192.168.1.1 进入路由器管理页面,初次使用无密码
    2. 网络 > 无线 > 找到其中一个无线网卡 > 扫描 > 选择家中的Wi-Fi加入网络 > 确认接口配置中的模式为客户端后保存
    3. 系统 > Software > Update lists 更新包列表 > 然后在可用列表中筛选出luci-proto-relay 安装
  2. 系统 > 接口 > 新建接口,协议选择DHCP 客户端,接口选择无线网络 Client,防火墙选择带有LAN 的那个
  3. 系统 > 接口 > 新建接口,协议选择中继桥,网络间中继选择刚新建的DHCP 客户端接口和lan 接口
  4. 系统 > 接口 > LAN 接口
    1. 协议:静态地址
    2. IPv4地址:填与主路由不同的网段的IP地址
    3. DHCP 服务器:忽略此接口
  5. 保存并应用
    至此,电脑应该可以通过从路由中继的来的Wi-Fi 信号上网,并且IP 地址是通过主路由分配而来的!

WoL 的配置

电脑获得了主路由分配的IP 之后,就可以配置实现WoL 了。

主板的配置

NUC8i5,需要在BIOS 下Wake On LAN from S4/S5 选为Power On - Normal Boot

Windows 系统下的配置

Windows 下的配置很简单,只需要在设备管理器中的以太网卡属性 > 电源管理中勾选`允许此设备唤醒计算机`和`只允许换数据包唤醒计算机`就可以了。 
ps. 如果 Windows 开启了快速关机选项的话,可能会导致 WoL  启动失败。

黑苹果系统下的配置

  1. 驱动:以太网卡是Intel 的I219V6,OpenCore 中加上[IntelMausiEthernet](https://github.com/acidanthera/IntelMausi) 的驱动,欣喜的是,查看release 日志,今年年初的时候,才刚刚加上Fixed WoL on I219 family devices的说明。
  2. 根据 README 文件 的说明,可以有两种方式强制开启网卡的 WoL。
    1. 在OpenCore 配置文件中,注入设备属性mausi-force-wol(推荐)。这种方式还没有试验过
    2. 在引导参数中加入-mausiwol(测试用途)。这种情况,试了一下成功了。

测试一下

分别从两个系统关机后,使用手机下载的 WoL 软件唤醒,都成功了。还不知道OpenCore 是否有通过配置文件指定默认启动项的方法,因此每次启动都是自动进入了黑苹果系统,不过无伤大雅。


使用路由器实现唤醒

上文中是使用手机唤醒的原理是:手机下载 WoL 的应用,向局域网发送广播包,连着电脑的路由器接收到广播包后再转发广播包,电脑网卡间监听到了唤醒的请求后启动。但是使用这种方式一段时间后,发现有几个局限的地方:

  1. 需要手机连入局域网
  2. 路由器转发广播包不稳定(不知道为什么,明明设置是正确的,但是就是没有转发广播包,需要重启路由器)
    那么直接让路由器发送唤醒包就可以解决这个问题了。OpenWrt 上 WoL 唤醒的程序有两个,一个是 wakeonlan,一个是 etherwake。之前使用过后者,但是没有成功唤醒,而前者需要占用的储存空间过大了,在装了腾讯的ddns 插件等之后,路由器的可用空间还不足1M,而要安装一个 wakeonlan 及其依赖包,总共需要1.4M。因此只能使用 etherwake 了。
    使用ssh 连接路由器之后,使用etherwake -b -i [网卡接口] [电脑网卡 mac 地址]即可唤醒,而且也可以直接配置快捷指令实现远程开机。
双系统实践WoL
https://halo.persipa.site/2021/0817
作者
Persipa
发布于
更新于
许可