Networking

DHCP 在 Ubuntu 網路安裝中失敗:DHCPDECLINE

  • March 23, 2018

我正在嘗試在 Cisco UCS C240 機架式伺服器上進行 Ubuntu 12.04 的網路安裝,使用 Cobbler 進行配置。Cobbler 正在管理我的 DHCP 伺服器 (ISC),該伺服器配置為根據伺服器的 MAC 地址分發固定 IP 地址。這是 cobbler 自動生成的 /etc/dhcp/dhcpd.conf 中的相關部分:

group {
   host generic4 {
       hardware ethernet 2a:2c:b2:b4:f7:1a;
       fixed-address 10.10.0.153;
       option host-name "compute-3";
       option subnet-mask 255.255.255.0;
       option routers 10.30.0.1;
       filename "/pxelinux.0";
       next-server 10.10.0.131;
   }
}

機器 (compute-3) 能夠成功進行 PXE 引導並啟動 Ubuntu 安裝過程。但是,當安裝程序到達嘗試通過 DHCP 獲取 IP 地址的部分時,它會失敗。(此時,如果我手動配置具有相同 IP 地址/網路遮罩和網關的網路,則安裝成功完成)。

當我在執行 DHCP 伺服器的 cobbler 節點上檢查 /var/log/syslog 時,我看到伺服器提供了一個 IP 地址,但它被客戶端拒絕了:

Mar 11 21:51:03 compute-1 dhcpd: DHCPDISCOVER from 2a:2c:b2:b4:f7:1a via eth2
Mar 11 21:51:03 compute-1 dhcpd: DHCPOFFER on 10.10.0.153 to 2a:2c:b2:b4:f7:1a via eth2
Mar 11 21:51:03 compute-1 dhcpd: DHCPREQUEST for 10.10.0.153 (10.10.0.131) from 2a:2c:b2:b4:f7:1a via eth2
Mar 11 21:51:03 compute-1 dhcpd: DHCPACK on 10.10.0.153 to 2a:2c:b2:b4:f7:1a via eth2
Mar 11 21:51:03 compute-1 dhcpd: DHCPDECLINE of 10.10.0.153 from 2a:2c:b2:b4:f7:1a via eth2: not found

根據我的閱讀,客戶端將在進行 ARP 探測後發送 DHCPDECLINE 以查看網路上的另一台機器是否已經具有提供的 IP 地址。我認為 Ubuntu 的安裝程序使用 BusyBox 的 udhcpc,從查看程式碼來看,這似乎是 udhcpc 所做的。

但是,當我從 cobbler 節點使用 arping 時,我無法在該網路上找到任何其他具有 10.10.0.153 的機器。也就是說,在安裝的 DHCP 程序開始之前,我確實看到 compute-3 的 MAC 地址2a:2c:b2:b4:f7:1a與該 IP 地址相關聯。

# arping 10.10.0.153
ARPING 10.10.0.153
60 bytes from 2a:2c:b2:b4:f7:1a (10.10.0.153): index=0 time=118.017 usec
60 bytes from 2a:2c:b2:b4:f7:1a (10.10.0.153): index=1 time=74.148 usec
60 bytes from 2a:2c:b2:b4:f7:1a (10.10.0.153): index=2 time=48.876 usec

可能導致這種行為的可能故障模式是什麼?為什麼客戶會認為其他人擁有該 IP 地址?或者,為什麼它可能會拒絕地址?

我在Google發現了一個類似的問題:http ://www.linuxquestions.org/questions/linux-networking-3/dhcpdecline-of-ipaddress-from-mac-via-interface-not-found-838369/

您的路由器選項有一個錯誤:它不在同一個子網中,因此無法被發現。

option routers 10.10.0.1代替option routers 10.30.0.1

希望這有幫助!

如果 IP 地址已經在同一個子網上,dhcpd 將發送一個 ACK 後跟一個 DECLINE。

驗證沒有使用相同 IP 地址靜態配置的主機。

引用自:https://serverfault.com/questions/486841