我有一个 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 进行了两次:第一次是在机器启动几秒钟后(这是预期的),大约三十秒后 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 来使其网络服务正常工作以检索预种子文件...您能看到鸡蛋问题吗?
您可以将相应的静态网络预置变量“附加”到内核命令行或使用 Pxelinux
ipappend
命令。注意:请考虑在 preseed 文件或内核命令行中使用 preseed 变量的语法略有不同,即:
决赛
append
应该是这样的。去掉换行符,这里添加的只是为了增强可读性和防止水平滚动。