是否可以使用 SMB 数据包唤醒 ACPI S3 挂起的 Linux 系统?

是否可以使用 SMB 数据包唤醒 ACPI S3 挂起的 Linux 系统?

我想在闲置一段时间后将 Debian NAS 系统置于 RAM 模式 (ACPI S3),以节省一些电量。我考虑将 NIC 置于等待单播 SMB 数据包的模式,然后唤醒。这将非常有用,例如当电视想要从 NAS 流式传输某些内容时。也许可以使用类似ethtool -s eth0 wol pphy 等于某些 SMB 单播数据包的方式。

这可能吗?我想这应该不难实现,但也许我错了。

答案1

是的,这是可能的,必须执行以下操作:

aptitude install pm-utils
cd /usr/lib/pm-utils/sleep.d/
touch 70wol

将以下内容放入70wol

#!/bin/bash
ethtool -s eth0 wol pug

回到你的 shell,并使脚本可执行:

chmod +x 70wol

现在执行 ACPI S3 暂停:

pm-suspend

您现在应该能够使用 ICMP、SSH、SMB 等数据包唤醒系统。

不要忘记,Windows 和 Linux 的 ARP 缓存超时均为 30 秒。因此

pm-suspend

网络上的其他机器只有大约 30 秒的时间来唤醒系统,因为在此期限之后,它们不再具有 MAC 地址,因此无法向目标系统发送数据包。

您可以使用静态 ARP 地址解决这个问题。在每个系统上,如果您希望能够唤醒 NAS 系统,请在 Windows 上执行以下操作

arp -s 10.0.0.200 00-10-54-CA-E1-40

在 Linux 上

arp -s 10.0.0.200 00:10:54:CA:E1:40

如果您有一台 NAS 家庭服务器,那么这个设置就相当不错了,它不需要 24/7 全天候运行。现在,您可以编写一个 shell 脚本作为 cronjob,并在 5 分钟不活动后暂停 NAS 服务器。

我在 Debian Testing 上使用 Kernel 3.12 和适用于我的 Intel I217-V NIC 的最新 Intel e1000e 驱动程序执行了此操作。

答案2

这是可能的,Windows 实际上默认使用网卡的唤醒模式功能:

一种特殊的数据包包含唤醒模式。默认情况下,启用 WOL 时,Windows 7 和 Windows Vista 会监听以下数据包:

  • 指向网络适配器 MAC 地址的定向数据包
  • 针对本地计算机名称的 NetBIOS 名称解析广播
  • 网络适​​配器 IPv4 地址的地址解析协议 (ARP) 数据包
  • 网络适​​配器的请求节点多播地址的 IPv6 邻居发现数据包

http://support.microsoft.com/kb/941145

但是,请注意,其列表不包含单播 SMB 数据包。为什么?因为在建立 TCP 连接之前不会发送 SMB 数据包,而在此之前,客户端必须找出服务器的硬件地址 - 对于 IPv4 使用 ARP,对于 IPv6 使用邻居发现。(使用 NetBIOS 的名称解析也在列表中,但出于某种原因,LLMNR 不在列表中。)因此,您需要创建一个非常相似的过滤器列表 - 至少包含 ARP 和邻居发现。

相关内容