温馨提示×

ubuntu dhcp客户端IP地址续租机制

小樊
35
2025-12-28 01:20:45
栏目: 智能运维

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)。
    • 检查是否在用 NetworkManagernetworkd,选择对应操作方式。
    • 观察续租日志与租约文件变化,确认是否收到服务器下发的 renewal-time/rebind-time

0