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;
}