草庐IT

家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?

东风微鸣 2024-05-24 原文

前言

其实这个专题很久很久之前就想写了,但是一直因为各种原因拖着没动笔。

因为没有资格,也没有钱在一线城市买房 (😂😂😂); 但是在要结婚之前,婚房又是刚需。 我和太太最终一起在一线城市周边的某二线城市买了房。 再之后,一起装修,她负责非电相关,我负责电 网相关的装修。 家庭组网,家庭实验室就这么一步一步随着家庭的组建而组建了起来:

  1. 家庭有线无线组网
  2. 智能家居
  3. NAS
  4. 公网 IP 和 IPv6
  5. Wake Online (WOL)
  6. 家庭网络安全 (😂看了防火墙日志,才知道被攻击频率能有多高)
  7. 玩转树莓派
  8. 组建 Full Mesh VPN 网络
  9. 手机 PAD 远程控制电脑
  10. ...

有了所谓的"家庭实验室", 我的自身专业技能有了更多实验机会和试炼场,对新的技术了解不再浮于表面; 有了所谓的"家庭实验室", 即使两地奔波,也能通过手机看到我们,以及小孩经历的每一个点点滴滴,幸福萦绕心头。..

理工男难得这么矫情一下,此为前言。..

系列文章:

Wake-on-LAN(WOL) 简介

LAN 唤醒(WoL 或 WOL)是以太网或令牌环计算机网络标准,允许通过网络消息打开或唤醒计算机。

消息通常由在连接到同一局域网的设备上执行的程序发送到目标计算机。

以太网连接(包括家庭和工作网络、无线数据网络和 Internet 本身)都基于计算机之间发送的帧。 WoL 是使用一种特殊设计的称为魔术包的帧来实现的,魔术包被发送到网络中的所有计算机,其中包括要被唤醒的计算机。 魔术分组包含目的地计算机的 MAC 地址、内置在计算机中的每个网络接口卡(“NIC”)或其它以太网设备中的标识号,其使得它能够在网络上被唯一地识别和寻址。 具有 LAN 唤醒功能的已关机或关闭的计算机将包含能够在系统关机时以低功耗模式“侦听”传入数据包的网络设备。 如果接收到指向设备 MAC 地址的魔术包,网卡会向计算机的电源或主板发出信号,以启动系统唤醒,其方式与按下电源按钮的方式相同。

魔术分组在数据链路层(OSI 模型中的第 2 层)上被发送,并且当被发送时,使用网络广播地址被广播到给定网络上的所有附接的设备;不使用 IP 地址(OSI 模型中的第 3 层)。

由于 LAN 唤醒是基于广播技术构建的,因此通常只能在当前网络子网内使用。 不过,也有一些例外情况,LAN 唤醒实际上可以在任何网络上运维,只要配置和硬件适当,包括通过互联网进行远程唤醒。

为了使 LAN 唤醒工作,网络接口的某些部分需要保持打开状态。这会消耗少量的待机功率,比正常工作功率少得多。 链路速度通常被降低到不浪费功率的最低可能速度(例如,千兆以太网 NIC 仅维持** 10 Mbit/s 的链路**)。

网络唤醒 (WOL) 的前提条件

硬件: (几乎现在的所有电脑都满足)

  • 电源:支持 ATX 2.01 标准
  • 主板:支持 PCIE 2.2 标准

主板 BIOS:

  • 启用 PCIE 设备唤醒(可能会有很多不同的名字,关键词:"wake" "wol" "PCIE" "Power On" 等)

电脑电源设置和状态:

  • S3(一般是睡眠)
  • S4(一般是休眠)
  • S5(一般是关机)

配置得当后,主板在这些状态下,网卡会处于待机 (standby) 状态。可以随时被魔术包唤醒。

有线网卡配置(必须是有线网卡):

启用如下配置:

  • 允许此设备唤醒计算机
    • 只允许幻数据包唤醒计算机

WOL 完整配置

BIOS 配置

这里以 MSI B450 迫击炮 主板为例,开机后按 DEL 键进入 BIOS 设置,BIOS 界面左上角有个 🔍 样式的搜索按钮,直接搜索关键词 "PCIE" 即可找到:"PCIE 设备唤醒" 选项,将其设置为 允许. 如下图:

Windows 电源选项设置

⚠️注意:

适用于 windows 8.1 以上,win7 快速启动选项不是默认启用项。

进入 控制面板 -> 电源选项 -> 系统设置:

关闭 启用快速启动(推荐), 如下图:

另外提一句,休眠可以开启,休眠状态下是可以被唤醒的。

详细说明如下:

📚Reference:

System Power States - Win32 apps | Microsoft Learn

快速启动是一种使用休眠文件来加快后续启动速度的关机类型。

当使用快速启动时,即使系统实际上已经属于 S4 状态,系统对用户来说也好像发生了完全关机(S5)。 系统此时不会响应设备唤醒。

📝 备注:

从 Windows 8 开始,当请求系统关机时,快速启动是默认选项。

这也是为什么建议关闭 启用快速启动(推荐)

一般情况下,我们都是可以从休眠状态网络唤醒设备的,如果主板支持,甚至可以在 关机 (S5) 状态网络唤醒设备。

具体说明如下:

📚Reference:

WOL 在软关闭(S5)时不受 (windows) 正式支持。 但是,某些系统上的 BIOS 可能支持配置 NIC 以进行唤醒,即使该过程中不涉及 Windows。

这里以 MSI B450 迫击炮 主板为例,相关的设置如下:

启用了以上选项后, 我的电脑可以直接在关机(S5) 状态下被 WOL 唤醒. (供参考)

有线网卡配置

首先,最重要的📌📌📌, 一定要注意,先手动安装或更新对应操作系统版本的有线网卡驱动 (win10 就下载对应的 win10 网卡驱动,win11 就下载对应的 win11 网卡驱动), 确保已成功安装完整的官方驱动,而不是 window 自动安装的驱动. windows 自动安装的驱动可能无法实现 WOL 功能。

还是以我的 MSI B450 迫击炮为例,在 MSI 官网下载 PCIE 网卡驱动,驱动包如下图:

这里以 Realtek PCIe 系列为例,配置如下:

控制面板 -> 网络连接 -> 选择对应的有线网卡, 右键 -> 属性 -> 配置, 如下图:

进入有线网卡配置 后,选择高级, 开启与唤醒有关的所有功能,关闭与环保节能有关的所有功能,示例如下:

接下来,进入电源管理 标签页,勾选:

  • 允许计算机关闭此设备以节约电源
  • 允许此设备唤醒计算机
    • 只允许幻数据包唤醒计算机

详细说明如下:

Q: 为什么勾选 只允许幻数据包唤醒计算机? A: 如不勾选,可能会被时不时误唤醒

实战 WOL

以上主板 BIOS 系统电源选项 网卡配置 都设置好之后,就可以进行 WOL 了。

WOL 客户端前提

  • 需要和被唤醒设备在同一局域网内
  • 需要安装 WOL Client 相关软件(安卓,Linux, Windows 等版本都有)
  • 需要知道被唤醒设备的 MAC 地址(能知道 IP 地址更好,且 IP 地址固定更更好)

步骤

📝Notes:

这里以 Linux 或类似(树莓派或路由器) 和 安卓为例。

Linux 端实战 WOL

安装 WOL Client: etherwake (这里也有好几种 WOL Client, 这里以这一款为例)

sudo apt install -y etherwake

安装后,在被唤醒设备处于休眠状态下,执行唤醒:

etherwake -i eth0 -p 192.168.2.32 2C:F0:xx:xx:xx:5E

说明:

  • -i eth0: 通过哪个 WOL Client 的网卡发送魔术包,可以通过 ifconfigip address 找到和被唤醒设备在同一局域网的网卡名称,如下图: 🔺这里我的局域网是 192.168.2.0/24, 所以选择:eth0wlan0 都可以
  • -p 192.168.2.32: 被唤醒设备的 IP 地址
  • 2C:F0:xx:xx:xx:5E: 被唤醒设备的 MAC 地址

成功唤醒!

安卓端实战 WOL

这里推荐安装:WolOn 这款 WOL Client.

先输入被唤醒设备的相关信息,如下:

🔺MAC 地址必填,其他非必填

保存后,点击这一条,会出现摇晃🍺的过渡动画,然后就可以成功唤醒,如下图:

🎉🎉🎉

我的 WOL 用法

对于 Home Lab 来说,主要的用法都是这样的场景:

  • 人在外地
  • 家里高配台式机在休眠
  • 希望通过互联网 WOL 家里的台式机

这里主要有 2 种思路:

  1. 将家里台式机的网络唤醒端口映射到互联网上
    1. 这样直接通过 WOL Client 访问互联网指定端口,WOL Client --互联网--> 互联网对应的 WOL 端口 ----> 相当于局域网网关去唤醒指定设备
    2. 但是有前提:有公网 IP
    3. 也有一定的劣势:暴露在公网,不太安全
  2. 家里放一台 Always On 的小设备(如:软路由,树莓派,NAS 等), 再将人带在外地的设备(如手机或 pad) 和家里的设备组建一个 Full Mesh VPN 内网(或者家里某一台可以内网穿透连接到也行)
    1. 通过 VPN 登录到 Always On 的小设备上
    2. 再通过该设备执行 WOL
    3. 这样会更加安全。

我用的就是第二种,理由如下:

  1. 此前曾开放到公网上,被 Hack 的频率太高了,吓到我了,我可不想成为肉鸡;
  2. 联系电信运营商要了个公网 IPv4, 用了一段时间,突然被悄悄滴收回去了😂
  3. IPv6 吧,在外地的环境不可能永远都有 IPv6 地址可以使用。
  4. 最后:安全,安全,还是安全!

总结

本文我们详细介绍了 WOL 的基本原理,以及使用场景。 并总结和 windows 电脑启用 WOL 需要配置的几个环节:

  1. 主板 BIOS
  2. Windows 系统电源选项
  3. 有线网卡配置

以及 WOL Client 的使用。

最后,也根据自己的使用情况,对 WOL 稍微做了延申,更贴近实际应用场景。 希望本文对大家有所帮助~ 😘😘😘

本文由东风微鸣技术博客 EWhisper.cn 编写!

有关家庭实验室系列文章-电脑如何配置网络唤醒 (WOL)?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐