根据排查结果,这类问题的核心,往往不在静态绑定本身,而在 IP 地址冲突 和 DHCP 租约缓存未及时更新。
现象
当前场景可以简化为:
- 已经为设备设置了静态租约,目标 IP 为
192.168.50.20 - 但设备实际拿到的地址却是
192.168.50.87 - 同时,在活动租约中,
192.168.50.20又被另一个 MAC 地址AA:BB:CC:DD:EE:FF占用
这就解释了为什么静态绑定没有生效。
Dnsmasq(OpenWrt 的 DHCP 服务)发现目标地址仍在被其他设备或旧租约占用,为了避免冲突,不会强行把这个地址重新发给当前设备,而是临时分配了另一个动态地址。
根因
问题通常出在两件事上:
- 旧租约还留在缓存里
- 目标 IP 还被别的设备或旧记录占着
所以真正要做的,不是反复点保存,而是:
- 清理 DHCP 租约缓存
- 重启 dnsmasq 服务
- 再让设备重新申请地址
处理方法:SSH 强制清理租约并重启 DHCP
这是最直接、最有效的方法。
先登录路由器:
ssh root@192.168.50.1
如果你的路由器管理地址不是 192.168.50.1,替换成实际网关即可。
然后执行下面这组三连命令:
# 1. 停止 DHCP 服务
/etc/init.d/dnsmasq stop
# 2. 删除当前租约缓存文件
rm /tmp/dhcp.leases
# 3. 重新启动 DHCP 服务
/etc/init.d/dnsmasq start
执行完以后:
- 在手机或电脑上关闭 WiFi 再重新打开
- 让设备重新申请地址
- 此时路由器会重新读取静态绑定配置
如果目标地址没有再被别的设备占用,设备通常就会拿到你指定的固定 IP。
为什么我重启了还是没变?
如果执行了上面的操作,设备还是拿不到目标 IP,那通常还要继续检查 随机 MAC / 私有地址 这个问题。
现在很多手机默认都会在连接 WiFi 时使用随机生成的 MAC 地址,而不是设备本机的真实 MAC。
这会导致一种很常见的情况:
- 你在 OpenWrt 里绑定的是手机真实 MAC
- 但手机连入 WiFi 时实际用的是另一个随机 MAC
- 路由器认不出这是同一台设备,静态绑定自然失效
解决方法很简单:
进入手机当前 WiFi 的详情页,找到类似下面的选项:
- 隐私
- MAC 地址类型
- 私有地址
把它改成:
- 使用设备 MAC
- 或关闭随机 MAC
改完后,再重新连接 WiFi,让设备重新申请地址。
为什么这样做有效
因为 /tmp/dhcp.leases 保存的是当前 DHCP 动态租约记录。
当某个地址虽然已经配置了静态绑定,但系统仍然认为它“正在被使用”时,dnsmasq 会主动避开这个地址,防止网络冲突。
删掉租约文件并重启服务,本质上就是把旧的分配记录清空,让系统重新按当前配置发号。
说白了:
不是静态绑定没配置成功,而是旧租约、冲突记录,或者随机 MAC 把它压住了。