使用wake on lan远程唤醒

客厅里的那台htpc,在无下片任务的时候,大部分时间里都在白白浪费电。主板是支持wake on lan的,把它弄成可以远程控制会比较经济。

首先要设置bios,将电源管理下的 Wake On Lan (或叫PME Event Wake Up) 启用。

然后在系统里对网卡进行设置(我的htpc跑的是windows xp sp2,网卡必须是支持Wake On Lan的,原本用的无线PCI网卡不支持,只好使用主板自带的网卡),首先在”高级”中,将 Wake-On-Lan After Shutdown 的值设为 Enabled,将 Wake-On-Lan Capabilities 的值设为 Magick Packet:

nic-advance
Uploaded with plasq's Skitch!

然后在”电源管理”中,将”允许这台设备使计算机脱离待机状态。”选中(需要先将最上面那个选项选中才能选这个)。不过在测试中发现这个选项似乎不影响最终结果:

nic-power
Uploaded with plasq's Skitch!

通过以上设置,这台PC已经可以在局域网内被唤醒了。接下去设置路由器。

首先需要使用动态域名,否则在外边游荡里不知道家里的宽带连接正在使用的IP。这一步不作说明。

我用的路由器是TP-LINK TL-WR340G,先加一个 Port Forward,将 UDP 端口7或9转发至198.168.1.254。这里假设子网是192.168.1.0。因为要唤醒的PC是待机状态的,使用它的IP是无效的,所以这里并不是将端口转发至目标PC的IP。如果路由器支持转发至整个子网,则这里填192.168.1.255便可。我这款路由器不支持,所以只好使用一个并不存在的192.168.1.254:

port-forward
Uploaded with plasq's Skitch!

关键的一步到了,为了将 Wake On Lan 的包 (Magick Packet) 转发至整个子网从而到达目标PC,上面的设置将端口9转发至了192.168.1.254,那么如何让发往192.168.1.254的包到达目标PC呢?答案是臭名昭著的ARP。

在 IP & Binding 中增加一条 ARP 记录,Mac地址填写要唤醒的目标PC的网卡Mac地址,IP地址填入192.168.1.254。

mac-arp
Uploaded with plasq's Skitch!

通过以上设置,已经可以在任何地方唤醒我的HTPC了。当然还需要一个发送 Wake On Lane Magick Packet 包的工具,我用的是 WakeOnLan,添加一个新的host,IP/DNS填入路由器的动态域名,Mac址址填入目标PC的网卡Mac地址。

wakeonlan-client
Uploaded with plasq's Skitch!

在HTPC上,设置电源管理让它在空闲15分钟时自动待机。修改电驴的设置,让电驴运行时禁用自动待机。

这样,平时不下片时HTPC是待机着的,我在外面想要下东西时,先将其远程唤醒,然后通过电驴内置的Web服务器添加下载任务。

PS:路由器的 Port Forward 真是非常有用。我家里的几台机器通过这个东东,都可以远程访问(ssh, Windows远程桌面, OS X Remote Management,电驴和BT Web管理端)。

PS PS:OS X如果是连在网线上的话,也可以唤醒。相关系统设置在 Energy Saver 下 (Wake for Ethernet network access)。

Update: Ubuntu 下设置方法: HOWTO: Set your system up for Wake On LAN (WOL)