在 OpenWRT 路由器上找到设备的 MAC 地址

最近升级下家里的 OpenWRT 路由设备,结果发现升级后自己写的远程唤醒的脚本丢失了, 而我人又不在家里,那这个问题要如何解决?

涉及设备

罗列一下本文出现的设备,便于梳理关系:

简称 说明
设备 / OpenWRT 设备 从路由,已安装 OpenWRT
主机 需要唤醒的机器,MAC 地址未知
主路由 家中拨号路由,其他设备通过此路由联网
常开设备 固定常开,可以从远程访问的设备

先决条件

首先要确保我们能远程连上 OpenWRT 设备,这个我们需要事先就准备好, 不然我们就只剩下本地解决这一条路。我一般会在安装好 OpenWRT 后就去确认这件事情, 比如让家中另一台常开的设备可以 ssh 到 OpenWRT。

当然,主机的远程唤醒也是要确认已经开了,我这次因为是 OpenWRT 的问题, 主机原先已经配好,所以主机的配置我们也不展开了。另外我的 OpenWRT 设备是用网线连接的, 所以这里也不去讨论 wifi 唤醒。

整理一下我们目前的情况:

  • 可以远程 ssh OpenWRT 设备
  • 主机已配置 wake on lan
  • 设备和主机网线连接

远程唤醒的条件

远程唤醒需要两样东西:

  • etherwake:这个可以在 OpenWRT 设备上用 opkg 直接安装
  • MAC 地址:远程唤醒的原理是广播一个魔法消息,消息中含有目标主机的 MAC 地址,收到的设备发现是自己的地址,就开机,所以 MAC 地址是必须的

很明显,这两样东西我卡在了第二点上。

如何获取关机设备的 MAC 地址

chatGPT 给了我这样一些建议,我这里都没有成功,不过我还是列一下,也许对其他人有效:

方法 结果
cat /tmp/dhcp.leases 内容为空
arp -a 对应 ip 的 MAC 地址为 00:00:00:00:00:00
cat /var/log/messages 没有这个文件

家里还有一台主路由,偶尔我会用主机直接连主路由,来应对 NAT 突然无效的情况, 所以主路由上应该也存了主机的 MAC 地址。不过事不凑巧,主路由器今天管理页面也登不上去了, 虽然不影响主机和设备上网,但是我也没办法从主路由查到 MAC 地址了。

本着雁过必留痕的原则,我觉得 OpenWRT 上一定记录了主机的 MAC,除非系统完全没开日志, 这个可能性很小,所以我还是应该去找 OpenWRT 的日志,当时我是把 luci 的 web ui 放开到常开设备上, 然后查系统日志找到的 MAC(Status 下 System Log 中),后面发现,只要 ssh 上去,一条命令就可以了:

logread -e <主机名或IP>

总结

手忙脚乱了半天,其实只是因为没想到 OpenWRT 升级会清掉这么多东西,总结下这次的收获:

  • 重要脚本或信息(比如远程唤醒的主机 MAC 地址)需要备份
  • 上游路由设备会保留设备 MAC 地址