序章

故事的起因,是同学找我解决一个视频处理软件的安装问题,在经过一系列艰难的了解后,发现是因为其显卡等级太低不支持所致。作为一个乐于助人(积极搞事)的同学,我立即想到了将自己这台性能卓越的计算器借给他。之后的流程就很简单,我通过内网穿透暴露出了自己的IP,然后他远程控制电脑完成任务。

这里特别一提windows自带的远程桌面连接是真的好用,操作丝滑远胜于向日葵,timeview之流,在没有公网IP的情况下已经接近于阿里云电脑,而且还是免费的。

在这之后,我就时常想,是否可以通过远程控制获得一台无处不在且拥有强大算力的电脑。毕竟目前市面上云服务商所提供的GPU套餐都太过昂贵。

解决方案

连接方面还是老一套,因为无法申请到公网IP,所以目前只能使用内网穿透(NAT穿透)将电脑暴露到公网。然后远程桌面。涉及到的还有frp的开机自启,没有什么问题。

电脑是家中的主机,性能很强劲,且插入各种乱七八糟的设备,耗电量很大,所以并不希望作为服务器那样长期运行,而是希望日常时间可以处于休眠状态,需要的时候再唤醒。因为没有网线连接,所以采用WoWLAN(无线局域网唤醒)。

发送幻术包

这里也相对顺利,我们需要在外界唤醒局域网内的电脑,便要通过局域网给电脑发送唤醒幻术包,最简单的方式自然是通过路由器,这对于路由器来说是一个相当简单的事情,但很可惜大部分的路由器都没有实现这个功能(软件问题),这里列举一些我所知道的支持远程唤醒的路由器设备

  • 固件最强的华硕自然是支持的,衍生出来的梅林等开源固件自然也能支持,如果路由器刷固件的化,要注意CPU型号,正统的梅林是基于博通CPU。缺点是贵

  • 华为使用自研处理器的路由器,支持远程唤醒,但新版本高通的不支持,选购时注意版本。性价比高,网络稳定性好

  • 小米通过捣鼓后也能使用,但毕竟要捣鼓

这里不得不提一下向日葵的开机棒,我解决问题时,第一个搜索答案就是它。在软件孤岛的情况下,使用附加配件确实是一个不错的通解方案。简单快捷不用思考,贝瑞在这方面做的一向不错。向日葵填补了免费远控市场的空缺,花生壳使得非计算机人员也能轻松实现内网穿透。贝瑞免费提供软件和勉强能用的性能,而将其开销转嫁到性能提升的附加功能上,这个商业模式很妙。但同时他的成功,也反映了开源模式所存在的弊端——过于专业。可以预见,在很多细分赛道中,提供整套解决方案的公司将会繁荣。贝瑞如是,群晖如是,甚至大疆也如是。

拉回正题,由于我使用的华硕路由器,发送幻术包只需要在路由器管理界面进行操作
高级设置->网络工具->通过网络(LAN)唤醒 填写MAC地址即可
image.png

接受幻术包

在绑定好MAC地址后,我们尝试接收wol幻术包,先通过Wiresharkb捕获,以确保有幻术包被发出
image.png
发现电脑确是能收到幻术包,且信息正确。

确认收到幻术包后,下一步就是使电脑响应wol实现开机

  1. 以微星主板为例,在bios中找到
    设置->高级->唤醒事件设置 勾选PCIE设备唤醒 或 唤醒事件管理设置为系统

image.png

  1. 在设备管理器中找到
    设备管理器->网络适配器->网卡

image.png

双击进入详情,电源管理中勾选如下
image.png

如此,远程唤醒就简单的实现了...

BUG 异常唤醒!

故事远远没有结束,或许说才刚刚开始.....

在我兴高采烈的测试远程唤醒时,电脑毫无征兆的被唤醒了!!!这绝对不是偶然事件

局域网广播

我的第一个怀疑是,会不会是局域网中的嘈杂广播导致,经过一系列的抓包,隔离测试,我排除了这一点,并且发现了唤醒的规律 1 个小时。

  • 设置中的只允许幻术包唤醒其实就做了这一点,这里这里为了确认,毕竟windows在某些时候语义不清

硬件或定时任务

于是我开始怀疑是电脑的某个硬件或是定时任务导致的,这篇文章给了我很大的帮助。
https://zhuanlan.zhihu.com/p/93306740

我进行一系列的排查,禁止了除网卡以外的大量唤醒设备
image.png

并且,当我查看最后一次唤醒时,却显示未知
image.png

  • 这里提一句,禁止时可以将禁止的东西记录下来,以保证恢复,bat 文件是一个不错的方式,让他来运行这些危险的操作吧
    image.png

但很显然,在进行了一系列的操作后,电脑仍然坚定不移的按时唤醒,只有当网卡也被禁用时才起效果,但我需要它来唤醒,所以不能禁。

  • 这里其实已经很接近答案了,与网卡有关,但当时过于急躁,忽视了这一点

在硬件这里找不到结果,于是我开始查询定时任务并翻看日志
image.png
结果并没有定时任务存在

系统日志倒是记录了相关的行为
事件查看器->windows日志->系统
image.png
这条信息是系统唤醒时最早的信息
跟随这条信息,我找到了如下资料
https://docs.microsoft.com/en-us/answers/questions/367619/system-time-synchronized-with-the-hardware-clock.html
他认为:如果您没有将 Windows 设置为与 Internet 时间服务器同步,它将与您的 BIOS 时钟同步

我无法理解其具体逻辑,但根据指点,我来到了时间设置
控制面板->日期和时间->internet时间设置

image.png
并将时间服务器改为了国内的阿里云

毫无疑问,这以失败告终

山重水复 最终解决

我一度放弃,甚至打算捣鼓一个 单片机+电机 的按键机器来实现真正的远程开机。但就在这时,我想起了网卡!现在来整理条件

  1. 局域网环境相对干净,且间隔稳定1小时,不是被异常唤醒的
  2. 间隔稳定,表明了唤醒设备拥有定时功能,相对复杂,不可能是鼠标,键盘,音响及一系列简单硬件
  3. 干净启动,后台无三方程序,无计划任务软件唤醒可能性不大
  4. 与网卡有关

很好,现在基本上就剩下网卡了
那么二选一,是网卡本身有关呢,还是非本身呢?
我关闭了wifi 进行测试 一个小时过去 电脑没有被唤醒 !
网卡本身 排除!
那么问题只有与网卡相接的 路由器 上了 我根据线索找到如下文章
https://alex-v.blog/2019/02/16/a-trip-through-wake-on-wireless-lan/
筛选出里面的重点

I confirmed that this is probably the culprit by changing the GTK rekeying interval (referred to in my settings as “Group Key Update”) in my router. After that, the minute when my computer woke up changed to match the time of the AP restart, so I’m pretty confident that this is it.

GTK更新导致了唤醒!!!!
文章中由于其路由器不支持设置GTK更新超过两小时,所以并没能解决问题。
但,我是什么,我拥有华硕路由器 轻松的,我将时间设置为了7天
image.png

  • 此时我没有如文章留言中,取消只允许幻术包

问题解决