Ubuntu DHCP 客户端 IP 地址续租机制
一 核心机制与时间点
- 客户端在获得地址后,会按租约时间 T 的约定在后台自动发起续租,无需人工干预。
- 典型时间点为:
- T/2(50%):首次向服务器发起续租(DHCPREQUEST/RENEW),成功则租期顺延。
- 7T/8(87.5%):再次尝试续租(REBIND),若仍失败,进入最后阶段。
- T(100%):租约到期,释放当前地址并重新进入发现流程(DISCOVER/OFFER/REQUEST/ACK)以获取新地址。
- 这些时间点由客户端在启动时从服务器返回的租约参数中解析(如 lease-time、renewal-time、rebind-time),并按协议自动执行。
二 租约时间参数与协商
- 服务器在 DHCPACK 中会下发关键参数:lease-time(租约总时长)、renewal-time(首次续租时刻)、rebind-time(重新绑定时刻)。客户端据此安排续租节奏。
- 客户端也可在本地通过配置文件预设这些值,以覆盖或引导协商结果(见下文配置方法)。
- 典型协商与续租流程(简表):
- 初次获取:DISCOVER → OFFER → REQUEST → ACK(获得 IP 与租约参数)
- 续租:在 renewal-time 发送 REQUEST 直接续租;若失败,在 rebind-time 扩大范围重发;到期则重新发现。
三 手动触发续租的常用方法
- 使用 dhclient(适用于 ifupdown、networkd 场景)
- 释放并重新获取:
- sudo dhclient -r eth0
- sudo dhclient eth0
- 仅观察详细过程:sudo dhclient -v eth0
- 刷新地址后重取(等价“强续租”)
- sudo ip addr flush dev eth0 && sudo dhclient eth0
- 使用 NetworkManager(桌面/服务器常见)
- 按连接名操作:sudo nmcli con down “Wired connection 1” && sudo nmcli con up “Wired connection 1”
- 验证结果
- ip addr show eth0
- 查看租约文件:cat /var/lib/dhcp/dhclient.leases
- 注意:上述操作可能导致短暂断网;若接口为静态 IP配置,则 DHCP 续租不适用。
四 配置与排障要点
- 自定义续租时间(dhclient 层面)
- 编辑 /etc/dhcp/dhclient.conf,在 lease 块中设置:
- renewal-time 600; # 提前 10 分钟续租
- rebind-time 1200; # 提前 20 分钟重新绑定
- 使配置生效:重启网络或重启 dhclient 进程(如 sudo systemctl restart networking 或按接口重跑 dhclient)。
- 使用 Netplan(Ubuntu 18.04+ 常见)
- 示例(/etc/netplan/*.yaml):
- network:
- version: 2
- renderer: networkd
- ethernets:
- eth0:
- dhcp4: yes
- dhcp4-overrides:
- lease-time: 3600
- renew-timer: 1800
- rebind-timer: 2700
- 应用:sudo netplan apply
- 日志与文件
- 客户端租约记录:/var/lib/dhcp/dhclient.leases
- 服务器端租约记录(如为自建 DHCP):/var/lib/dhcpd/dhcpd.leases
- 故障排查要点
- 核对接口名、连接名是否正确(ip addr;nmcli con show)。
- 检查是否在用 NetworkManager 或 networkd,选择对应操作方式。
- 观察续租日志与租约文件变化,确认是否收到服务器下发的 renewal-time/rebind-time。