文档首页/ 弹性云服务器 ECS/ 故障排除/ 网络配置/ 系统时间跳变导致IP丢失怎么办?
更新时间:2024-08-15 GMT+08:00

系统时间跳变导致IP丢失怎么办?

问题描述

修改系统时间后服务器网卡出现感叹号,无法连接网络。

适用场景

  • 该文档适用于CentOS 7、EulerOS,并使用DHCP协议获取IP场景。
  • DHCP租约通常默认为24小时,具体以实际场景为例。

根因分析

DHCP会话过程:

DHCP典型会话过程包括:DHCP发现、DHCP提供、DHCP请求、DHCP确认,如图1所示

图1 DHCP会话过
  • DHCP发现(DISCOVER)

    客户在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该客户实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

  • DHCP提供(OFFER)

    当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络单播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。

  • DHCP请求(REQUEST)

    当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。然后它们把曾经给客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。

  • DHCP确认(Acknowledge,ACK)

    当DHCP服务器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。

定位过程

  1. 查看客户端DHCP请求记录
    grep -E "dhclient|DHCP" /var/log/messages
    图2 DHCP请求记录
    • dhclient续租记录显示在5月12日重新续租成功(当时正确的时间为4月26日,系统时间是被手动修改过)。
    • dhclient记录下一次续租发生在33696秒后(约9小时21分,通常为租约的1/2时发出续租请求),即下次续租发生在5月12日21点21分左右。

      也可以通过查询dhclient租约信息记录文件,每一次续租成功都会记录在该文件中。执行以下命令查询文件的保存路径(文件以.lease结尾)。

      ps -ef |grep dhclient

  2. 继续查看系统日志(messages)发现在续租后的5小时14分后系统时间发生跳变,回退至4月26日,但是由于下次续租请求发生在16天后,但是在9小时后未发出续租请求,租约到期后ip被DHCP服务端回收,导致ip丢失。
    grep "Time has been changed" /var/log/messages
    图3 系统日志

处理方法

  1. 手动执行dhclient,获取私有ip地址。

    dhclient -r eth0

    ifconfig eth0 down

    ifconfig eth0 up

    dhclient eth0

  2. 重启服务器,系统时间会恢复正常,系统会重新获取IP地址。
  3. 参考NTP服务器配置做ntp时间同步。