背景
虚拟机网卡设置了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参数
解决方案
针对该问题建议从以下两方面解决。
- 平台侧设置控制器的dhcp租期设置为无限,防止出现续租失败导致租约到期IP失效问题
- 在虚拟机的网卡配置文件中,增加如下参数并重启虚拟机网络。
PERSISTENT_DHCLIENT = yes
注意: 对于线上业务的服务器,还是建议用户少用dhcp模式,自行将虚拟机的网络模式设置为静态模式,防止出现在dhcp模式下的因网络抖动或其他因素导致续租失败,最终导致IP失效的问题。
影响
重启虚拟机网络会造成虚拟机网络中断数秒,请在业务低峰期或申请变更窗口进行操作。
标签:dhclient,IP,虚拟机,网卡,解决方案,dhcp,续租,失效,eth0 From: https://www.cnblogs.com/xuning-xuning/p/17351872.html