广州政务IP失效问题分析与解决方案

发布时间 2023-04-25 10:32:53作者: XU-NING

背景

虚拟机网卡设置了dhcp模式,经常会出现IP地址丢失的问题,有如下原因:

Decline 概述 DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测 发现服务器分配的地址冲突或者由于其他原因导致不能使用,则 会向DHCP服务器发送Decline请求报文,通知服务器所分配的 IP地址不可用,以期获得新的IP地址。

同一主机不同网口在同一网段经常会出现 Decline 的情况。

同一主机不同网口在不同网段,如果不同网口的网关硬件地址相同,也会出现Decline 的情况。

dhclient服务进程退出或被杀死

dhcp server端由控制器提供,neutron中配置的IP地址有效期配置为24h,每隔11时续租一次,如果续租失败并且网卡配置中未设置PERSISTENT_DHCLIENT参数,dhclient会自动退出不会再次尝试续租,最终当IP租期到后ip失效,造成虚拟机无法访问。

dhcp原理如下:

当虚拟机网卡配置了dhcp方式获取ip之后,重启网络会新建一个 dhclient 的进程:

ps -ef|grep dhcl

# 输出如下

root 594 449 0 Aug29 ?

00:00:00 /sbin/dhclient -d -q -sf

/usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf

/var/lib/NetworkManager/dhclient-5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03-eth0.lease - cf /var/lib/NetworkManager/dhclient-eth0.conf eth0

查看dhclient进程读取的配置文件参数如下:

cat /var/lib/dhclient/dhclient--eth0.lease # 输出如下

lease {

# 网卡IP信息

interface "eth0";

fixed-address 192.168.1.92;

option subnet-mask 255.255.255.0;

option routers 192.168.1.1; # dhcp 续租周期1天

option dhcp-lease-time 86400;

option dhcp-message-type 5;

option dhcp-server-identifier 192.168.1.3; # 每隔182天客户端向dhcp发送地址获取请求

option dhcp-renewal-time 41445

option rfc3442-classless-static-routes

32,169,254,169,254,192,168,1,1,0,192,168,1,1;

renew 5 2019/11/18 18:39:25;

rebind 6 2019/11/19 04:07:33;

expire 6 2020/11/19 07:07:33;

}

如上配置,dhcp获取的地址有效期为24天,每隔12天续租一次,两个续租周期都没有租到,则地址失效,虚拟机该网卡地址丢失,无法通信。

查看网卡配置如下:

TYPE="Ethernet" BOOTPROTO="dhcp" DEVICE="eth0"

ONBOOT="yes"

网卡配置未配置PERSISTENT_DHCLIENT=yes参数

解决方案

针对该问题建议从以下两方面解决。

  1. 平台侧设置控制器的dhcp租期设置为无限,防止出现续租失败导致租约到期IP失效问题
  2. 在虚拟机的网卡配置文件中,增加如下参数并重启虚拟机网络。

PERSISTENT_DHCLIENT = yes

注意: 对于线上业务的服务器,还是建议用户少用dhcp模式,自行将虚拟机的网络模式设置为静态模式,防止出现在dhcp模式下的因网络抖动或其他因素导致续租失败,最终导致IP失效的问题。

影响

重启虚拟机网络会造成虚拟机网络中断数秒,请在业务低峰期或申请变更窗口进行操作。