Dhcp

我可以防止 Debian 在安裝過程中兩次訪問 DHCP 伺服器嗎?

  • July 25, 2016

我有一個 DHCP 伺服器用於無人值守安裝 Debian:從 PXE 引導,然後使用預種子安裝作業系統。

DHCP 伺服器(Debian 的isc-dhcp-server軟體包)被配置為在分發新租約時執行操作(執行 HTTP POST):

subnet 192.168.0.0 netmask 255.255.252.0 {
   [...]
   filename "pxelinux.0";

   on commit {
       set client_ip = binary-to-ascii(10, 8, ".", leased-address);
       execute("curl", "-X", "POST", [...])
   }
}

[...]

host vmhost2 {
   hardware ethernet 00:19:66:60:c3:61;
   fixed-address 192.168.1.13;
}

我注意到在無人值守的安裝過程中,HTTP POST 進行了兩次:第一次是在機器啟動幾秒鐘後(這是預期的),然後大約 30 秒後 Debian 安裝程序正在配置網路。

我沒想到第二個請求。其實這是對應的preseed配置:

di netcfg/get_hostname 字元串 vmhost2
di netcfg/get_domain 字元串 pelicandd.com

di netcfg/choose_interface 選擇自動
di netcfg/disable_autoconfig 布爾值 true
**di netcfg/disable_dhcp 布爾值 true**
di netcfg/dhcp_failed 說明
di netcfg/dhcp_options 選擇手動配置網路

di netcfg/get_ipaddress 字元串 192.168.1.13
di netcfg/get_netmask 字元串 255.255.252.0
di netcfg/get_gateway 字元串 192.168.1.1
di netcfg/get_nameservers 字元串 192.168.1.3 192.168.1.4 8.8.8.8 8.8.4.4
di netcfg/confirm_static boolean true

我認為該netcfg/disable_dhcp選項表明安裝程序不需要聯繫 DHCP 伺服器,但它仍然需要。

問題:

  • 儘管有預置選項,為什麼安裝程序第二次聯繫 DHCP 伺服器?
  • 有沒有辦法阻止它這樣做,或者通過預置選項,或者通過修改 ISC DHCP 伺服器的配置以忽略第二個租約?

第一個 DHCP DORA(發現、提供、請求、接受)序列由嘗試查找 IP/MASK 和 PXE 數據(NBP + TFTP 位置)的客戶端 PXE 韌體觸發。

PXE 韌體然後 TFTP 檢索並執行相應的核心+initrd。當這個核心開始執行時,它需要一個 IP/MASK,然後它會觸發第二個 DHCP DORA 序列(這是一個正常的“非 PXE”DHCP 請求)

為了避免第二次 DHCP 命中,您必須在“核心”命令行上****手動設置靜態網路配置;您不能在必須通過網路檢索的壓縮文件上設置此資訊,因為核心將被迫使用 DHCP 來使其網路服務正常工作以檢索預種子文件…您能看到雞蛋問題嗎?

您可以將相應的靜態網路預置變數“附加”到核心命令行或使用 Pxelinuxipappend命令。

注意:請考慮在預種子文件或核心命令行中使用預種子變數的語法略有不同,即:

d-i netcfg/get_ipaddress string 192.168.1.13     <<< preseed file
netcfg/get_ipaddress=192.168.1.13                <<< kernel command line

決賽append應該是這樣的。去掉換行符,這裡添加的只是為了增強可讀性和防止水平滾動。

append
   [...]
   netcfg/get_ipaddress=192.168.1.13
   netcfg/get_netmask=255.255.252.0
   netcfg/get_gateway=192.168.1.1
   netcfg/get_nameservers=192.168.1.3
   netcfg/disable_autoconfig=true

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