远程开机——网络唤醒WOL

参考:https://www.cnblogs.com/zhanggaoxing/p/9657545.html
参考:https://baike.baidu.com/item/%E5%8D%95%E6%92%AD/8946201?fr=aladdin
参考:http://lixingcong.github.io/2018/04/08/arp-binding-on-lede/

【一】网络唤醒

网络唤醒(Wake-on-LAN,WOL)是一种计算机局域网唤醒技术,使局域网内处于关机或休眠状态的计算机,将状态转换成引导(Boot Loader)或运行状态。如果设备网卡接收到一个与自己 MAC 地址相同的幻数据包,则网卡会向计算机的电源或主板发出信号以唤醒计算机。

【二】幻数据包创建

幻数据包是一个广播帧,包含目标计算机的MAC地址。幻数据包最简单的构成是6字节的255(FF FF FF FF FF FF FF),紧接着为目标计算机的48位MAC地址,重复16次,数据包共计102字节,有时数据包内还会紧接着4-6字节的密码信息。这个帧片段可以包含在任何协议中,最常见的是包含在 UDP 中。

FF FF FF FF FF FF FF    MAC 地址 × 16 4-6字节的密码(可空)

例如 MAC 地址为 11 22 33 44 55 66 的目标计算机,幻数据包的格式为:

FFFFFFFFFFFF 112233445566 112233445566 112233445566
112233445566 112233445566 112233445566 112233445566
112233445566 112233445566 112233445566 112233445566
112233445566 112233445566 112233445566 112233445566
112233445566

==创建幻数据包==
1. Openwrt、PandoraBox路由器
在软件包界面刷新列表,安装luci-app-wol、luci-i18n-wol-zh-cn、wol
在putty界面中

opkg update
opkg install luci-app-wol luci-i18n-wol-zh-cn wol

得到类似下方的界面

网络唤醒.png

输入MAC地址后,点击唤醒即可,但是此插件仅限于局域网唤醒,不能穿越防火墙。
2.Android系统可用Wake On LAN软件
Wake On LAN软件-1.jpg

3.Windows系统可用Wake On LAN Sender软件

Wake On LAN Sender.png

【三】幻数据包发送方式

单播
单个发送者和单个接受者之间通过网络进行的通信。
广播
“一对所有”的通讯模式,网络对其中某一台主机发出的信号进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要)。
以Wake On LAN软件为例:

Wake On LAN软件-2.jpg

上图红色圈内,
填192.168.25.255就是广播。
填192.168.25.255以外的主机IP就是单播,如192.168.25.100。
单播不受防火墙阻挡,适用于穿越防火墙。
广播受防火墙阻挡,适用于内网。

【四】幻数据包接收

(一)单播方式
选择单播方式进行幻数据包发送,必须得到路由器支持,在路由器进行ARP设置,绑定目标网卡的IP与MAC,这样才能把幻数据包发送到目标网卡上。
如果不设置ARP绑定IP与MAC,目标网卡在关机状态下是没有IP的,路由器也不知道目标网卡MAC,故幻数据包到达路由器时,路由不知道要把幻数据包发送给谁,从而无法远程开机。
如果绑定了目标网卡的IP与MAC,虽然目标网卡在关机状态下是没有IP的,幻数据包到达路由器时,路由通过查询ARP表得知要把幻数据包发送给某MAC的目标网卡,从而实现远程开机。此开机方式不受防火墙阻挡,适用于穿越内网
1、ARP表
ARP表负责ip地址到MAC地址的映射,如果在arp表中找不到对应mac地址,就会无法到达该ip。
2、Openwrt修改ARP表
1)默认的arp命令实际上只能打印出arp表,无法修改。需要安装ip-full来修改(重点,必须安装的依赖,否则无法修改)

opkg update
opkg install ip-full

2)使用ip neigh可以打印出当前的ARP表

root@Openwrt:~# ip neigh
192.168.0.6 dev eth0.2 lladdr 00:11:22:33:5a:bc REACHABLE
192.168.9.207 dev br-lan  FAILED
192.168.9.184 dev br-lan lladdr 00:11:22:33:d1:5c REACHABLE
192.168.0.250 dev eth0.2 lladdr 00:11:22:33:dc:bc STALE

3)使用add/change可以增加/修改一条项目,添加permanent标志可以修改为静态的ARP条目,直到路由重启(否则无法删除)。

ip neigh add    192.168.200.1 lladdr 00:22:44:66:88:aa nud permanent dev eth0.2
ip neigh change 192.168.200.1 lladdr 00:22:44:66:88:bb nud permanent dev eth0.2

4)当192.168.200.1项目对应的nterface(eth0.2)重新连接时候,该ARP条目会失效,显示FAIL,但是也无法删除。

root@LEDE:~# ip neigh
192.168.0.6 dev eth0.2 lladdr 00:11:22:33:5a:bc REACHABLE
192.168.9.207 dev br-lan  FAILED
192.168.200.1 dev eth0.2  FAILED
192.168.9.184 dev br-lan lladdr 00:11:22:33:d1:5c REACHABLE
192.168.0.250 dev eth0.2 lladdr 00:11:22:33:dc:bc STALE

5)当路由器重启后,即使是添加了permanent标志的绑定也会失效,所以可以设置脚本开机自动添加ARP绑定。
方式一:
用WinSCP进入路由,新建文件/etc/hotplug.d/iface/99-arpbind,并设置777权限,文件内输入以下内容:

# 添加内容
#! /bin/sh
[ "$ACTION" = ifup ] || exit 0
ITEMS="
00:22:44:66:88:aa;192.168.200.1;eth0.2 \
00:11:22:33:dc:bc;192.168.0.250;eth0.2 \
"
for item in $ITEMS; do
    mac_addr=`echo $item | awk -F ';' '{print $1}'`
    ip_addr=`echo $item | awk -F ';' '{print $2}'`
    intf=`echo $item | awk -F ';' '{print $3}'`
    # echo "$mac_addr $ip_addr $intf"
    ip neigh add $ip_addr lladdr $mac_addr nud permanent dev $intf || ip neigh change $ip_addr lladdr $mac_addr nud permanent dev $intf
done

这样以后往这个脚本的ITEMS添加类似于绿色字体的内容即可实现真正的永久(路由重启后仍生效)添加静态ARP条目。
方式二(推荐)
在luci界面启动项exit0前用ip neigh命令直接添加(重点)。如:

ip neigh add 192.168.200.1 lladdr 00:22:44:66:88:aa nud permanent dev eth0.2 || ip neigh change 192.168.200.1 lladdr 00:22:44:66:88:aa nud permanent dev eth0.2

自行修改IP地址、MAC地址、dev接口。
(二)广播方式
选择广播方式进行幻数据包发送,不需要进行路由ARP绑定;幻数据包到达路由器时,路由器不管目标是否开机,均采用广播方式发送幻数据包,从而实现远程开机。此开机方式受防火墙阻挡,适用于内网

【五】电脑开启网络唤醒功能(自行百度查询)

设置完毕后,电脑关机,如果网卡的灯是亮的,证明网络唤醒功能开启。可以用软件发送幻数据包测试是否成功。

【六】远程网络唤醒实例

实例.jpg

如上图所示,假设手机和电脑2通过VPN互访,手机的MAC为A1:B1:C1:D1:E1:F1,电脑2的MAC为A2:B2:C2:D2:E2:F2,手机要远程开启电脑2。
网关B要进行ARP绑定,在luci界面启动项exit0前添加

ip neigh add 192.168.15.2 lladdr A2:B2:C2:D2:E2:F2 nud permanent dev br-lan || ip neigh change 192.168.15.2 lladdr A2:B2:C2:D2:E2:F2 nud permanent dev br-lan

重启生效。可以在putty输入ip neigh查看是否生效。
手机打开Wake On LAN软件,按下图填写


实例-1.jpg

端口随意填。添加设备后直接点击,即可远程开机。

相关软件下载:
安卓网络唤醒apk:https://wws.lanzous.com/iXTqgmggpmb 密码:bdaj
Wake On LAN Sender:https://wws.lanzous.com/iBzWGmggpsh 密码:afco
putty:https://wws.lanzous.com/i02olmgh8ra 密码:32oh
WinSCP:https://wws.lanzous.com/itj0Gmghepe 密码:398z

你可能感兴趣的:(远程开机——网络唤醒WOL)