我可以防止 Debian 在安装过程中两次访问 DHCP 服务器吗?

我可以防止 Debian 在安装过程中两次访问 DHCP 服务器吗?

我有一个 DHCP 服务器,用于执行 Debian 的无人值守安装:从 PXE 启动,然后使用预置安装操作系统。

DHCP 服务器(Debianisc-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 执行了两次:第一次是在机器启动几秒钟后(这是预期的),第二次是在大约三十秒后,当 Debian 安装程序配置网络时。

我没想到会有第二个请求。事实上,这是相应的预置配置:

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 布尔值 true

我认为该netcfg/disable_dhcp选项表示安装程序不需要联系 DHCP 服务器,但实际上却需要。

问题:

  • 尽管有预先设置选项,为什么安装程序仍第二次联系 DHCP 服务器?

  • 有没有办法阻止它这样做,是通过预先设置选项,还是通过修改 ISC DHCP 服务器的配置来忽略第二个租约?

答案1

第一个 DHCP DORA(发现、提供、请求、接受)序列由客户端 PXE 固件触发,尝试查找 IP/MASK 和 PXE 数据(NBP + TFTP 位置)。

然后,PXE 固件通过 TFTP 检索并运行相应的 kernel+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

相关内容