OpenWrt 解决 DHCP IP 冲突与租约问题

根据排查结果,这类问题的核心,往往不在静态绑定本身,而在 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 服务)发现目标地址仍在被其他设备或旧租约占用,为了避免冲突,不会强行把这个地址重新发给当前设备,而是临时分配了另一个动态地址。

根因

问题通常出在两件事上:

  1. 旧租约还留在缓存里
  2. 目标 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 把它压住了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇