博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DHCP的Decline分析【转】
阅读量:2186 次
发布时间:2019-05-02

本文共 2894 字,大约阅读时间需要 9 分钟。

(转自:)

1 Decline 概述

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

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

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

2 同一主机不同网口在同一网段

2.1 环境搭建
 

2.1.1 环境

(1) 虚拟机:VMWare

(2) 系统:CentOS 6.5

2.1.2 配置

(1) 增加网卡

网络适配器2和3为NAT

(2) 配置DHCP时间最短为5分钟,最长为10分钟,方便观察

2.1.3 实验

(1) 启动网口查看地址

可以看到两口地址在同一网段

(2) 查看系统日志,等待是否出现 Decline

 

结果:

(1) 可以看到eth1和eth2在续约都出现了 Decline,即检测到 IP冲突,dhclient 发送 Decline 请求到服务器拒绝这个ip地址。

(2) 续约失败,此时dhclient进程退出。

可以查看 dhclient 进程,下面只有eth0了

 

2.2 原因分析

(1) 通过DHCPDECLINE出现的原因,查看 dhclient 冲突检测脚本(/sbin/dhclient-script),复制 ip 冲突检测命令执行结果如下

arping -D -c2 -I eth3 10.216.86.71

从检测的结果来看,当 eth1 口发送arp广播请求时(请求192.168.233.146地址的硬件地址,如果收到回复,说明这个地址被使用),接收到了收到硬件地址为eth2的回复,检测出现冲突,而实际地址并没有冲突。

(2) 续约失败,dhclient 的默认机制是退出进程。

2.3 解决方案

(1) 针对 dhclient 出现 DHCPDECLINE 请求的问题

dhclient 检测到服务器分配的 IP 地址冲突(双网卡同一网段的的IP地址都会出现这个问题),属于 arp接收策略问题。只要每次开机启动设置即可。

// 修改arp接收响应级别,默认为 0

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

原理分析:

(a) 0,响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

(b) 1,只响应目的IP地址为接收网卡上的本地地址的arp请求。

通过修改arp接收响应级别为1,则物理口 eth2 接收到目的地址为192.168.233.146 的arp包,将不会去响应,则不会检测到 ip 冲突。

 

(2) 针对续约失败 dhclient 退出问题

在网口配置文件增加 PERSISTENT_DHCLIENT 参数,该参数可以控制续约失败不退出,而是继续请求分配新地址。

 

[root@wensen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

TYPE="Ethernet"

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=dhcp

HWADDR=00:0C:29:3E:E2:80

UUID=d77c142d-495f-4bf6-beb6-02eb49de122d

DEFROUTE=yes

PERSISTENT_DHCLIENT=yes

[root@test 2018-09-27]#

2.4 查看租约文件
 

dhcp 请求成功的信息存放在文件中,每重新请求或者续约一次,会在文件增加一条 lease 记录。一般在租约的1/2和7/8进行续约,第一次续约失败才会进行第二次续约。

[root@wensen ~]# cat /var/lib/dhclient/dhclient-eth1.leases

lease {

interface "eth1";

fixed-address 192.168.233.146;

option subnet-mask 255.255.255.0;

option dhcp-lease-time 600; // ip租用时间, 10分钟

option routers 192.168.233.2; // 网关

option dhcp-message-type 5;

option dhcp-server-identifier 192.168.233.254;

option domain-name-servers 127.0.0.1,192.168.233.2;

option domain-search "fugue.com.", "home.vix.com.";

option broadcast-address 192.168.233.255;

option domain-name "localdomain";

renew 4 2018/10/04 02:28:12; // 第一次续约的本机对应格林威治时间

rebind 4 2018/10/04 02:32:45; // 第二次续约的本机对应格林威治时间

expire 4 2018/10/04 02:34:00; // ip租约到期的本机对应格林威治时间

}

lease {

interface "eth1";

fixed-address 192.168.233.147;

option subnet-mask 255.255.255.0;

option routers 192.168.233.2;

option dhcp-lease-time 600;

option dhcp-message-type 5;

option domain-name-servers 127.0.0.1,192.168.233.2;

option dhcp-server-identifier 192.168.233.254;

option domain-search "fugue.com.", "home.vix.com.";

option broadcast-address 192.168.233.255;

option domain-name "localdomain";

renew 5 2018/10/05 01:33:11;

rebind 5 2018/10/05 01:37:55;

expire 5 2018/10/05 01:39:10;

}

--------------------- 
作者:路痴的旅行 
来源:CSDN 
原文:https://blog.csdn.net/u011857683/article/details/83099288 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的文章
【极客学院】-python学习笔记-Python快速入门(面向对象-引入外部文件-Web2Py创建网站)
查看>>
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>
【LEETCODE】7-Reverse Integer
查看>>
【LEETCODE】165-Compare Version Numbers
查看>>
【LEETCODE】299-Bulls and Cows
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【LEETCODE】143- Reorder List [Python]
查看>>
【LEETCODE】82- Remove Duplicates from Sorted List II [Python]
查看>>
【LEETCODE】86- Partition List [Python]
查看>>
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>