此前买了台 Netgear WNDR3700v4,刷了 OpenWrt 之后,每次重启 WAN 口的 MAC 地址都会随机变化。家用倒无所谓,但是一些应用 MAC 白名单的商用环境, 这是个问题。

试了各种方法,解决了问题。整理如下。

试过但失败的方法

Web GUI 上的「Network - Interface - WAN - Advanced Settings」里面有一个「Override MAC address」设置。在这里填写「aa:bb:cc:dd:ee:ff」等效于在 /etc/config/network 中的 config interface 'wan' 下增加一行 option macaddr 'aa:bb:cc:dd:ee:ff' 。但是重启后该设置不起作用。

网上有人说如下命令可以改 MAC 地址。

uci set network.wan.macaddr=aa:bb:cc:dd:ee:ff
uci commit network
ifdown wan && ifup wan

试了,不行。

网上还有人说这样可以,假设 WAN 口为 eth0.2

ifconfig eth0.2 down
ifconfig eth0.2 hw ether aa:bb:cc:dd:ee:ff
ifconfig eth0.2 up

试了,不行。

有效的方法

如下命令测试可行。

ifconfig eth0.2 down
ifconfig eth0 down
ifconfig eth0 hw ether aa:bb:cc:dd:ee:ff
ifconfig eth0 up
ifconfig eth0.2 up
ifdown wan
ifup wan

应该是 eth0.2 这个 VLAN 接口启用时,会克隆 eth0 的地址。

下面设置启动后自动应用该 MAC 设置。

touch /etc/init.d/clonemac
chmod +x /etc/init.d/clonemac

然后编辑 /etc/init.d/clonemac,内容如下。

#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org

START=30
STOP=15

start() {
ifconfig eth0.2 down
ifconfig eth0 down
ifconfig eth0 hw ether aa:bb:cc:dd:ee:ff
ifconfig eth0 up
ifconfig eth0.2 up
ifdown wan
ifup wan
}

stop() {
  echo "Stop clonemac."
}

其中,START=30 是试出来的。启动项中的 network 优先级为 20,这个脚本应在其后执行才有效。

最后设置启动时执行该脚本。

/etc/init.d/clonemac enable

重启路由发现 MAC 地址设置成功,顺利通过 DHCP 拿到 IP。