问题描述:
现场反馈使用我们的服务器进行PXE系统安装时 ,不能正常的获取系统文件,会卡在交互界面,并且经过测试发现,使用IPV6全长地址就有问题,使用短的地址就正常(比如fd00:66::0/112地址池),使用IPV4也正常,KVM的报错显示如下。
正面定位:
通过抓包分析可以看到报错情况如下,其中fd00:22:1ce0:1000:2000:3000:4001:1001本应该是TFTP地址,fd00:22:1ce0:1000:2000:3000:4001:975c是服务器网口的地址,抓包可见服务器网口在获取grubx64.efi这一步时把报文发给了fd00:22:1ce0:1000:2000:3000:4001:0这个不存在的地址,随后返回地址不可达,因此正面分析看和服务器是有关系的。

其它想法及对应验证:
- 是和服务器特定网卡相关吗 ---搭环境复现后换网卡尝试
- 和服务器CPU平台或者BIOS配置相关吗 ---搭环境复现后换不同平台CPU尝试
- 友商有这个问题吗 ---搭环境复现后换友商机器尝试
- 不同OS有这个问题吗 ---搭环境复现后换不同OS尝试
搭环境测试:
此前我写过一篇PXE服务器搭建SOP,在此基础上改成IPV6的并不复杂,按照AI指导对应改一下dhcpd6.conf文件,grub.cfg和tftp的配置文件中涉及IP的也需要修改下,直接使用了和现场不同的OS进行搭建。搭环境测试复现问题后上面四个方向都有了答案,不同网卡都能复现、intel平台也能复现、友商的hygon服务器也能复现、不同OS都有这个问题。并且发现使用grubx64.efi引导没有问题,只有使用bootx64.efi才有这个问题!
Dhcpd6.conf文件配置如下:
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
必须开启 PXE 引导
allow booting;
allow bootp;
PXE + UEFI 架构判断
option dhcp6.client-arch-type code 61 = array of unsigned integer 16;
option dhcp6.bootfile-url code 59 = string;
你的 IPv6 网段
subnet6 fd00:22:1ce0:1000::/64 {
地址池
range6 fd00:22:1ce0:1000:2000:3000:4001:1000 fd00:22:1ce0:1000:2000:3000:4001:FFF0;
强制给 客户端 固定 IPv6(你要的 957c)
host client1 {
客户端 MAC 地址(你日志里的 MAC)
hardware ethernet 40:73:4d:09:e8:3a;
fixed-address6 fd00:22:1ce0:1000:2000:3000:4001:957c;
}
UEFI PXE 引导(grubx64.efi)
if option dhcp6.client-arch-type = 00:07 {
option dhcp6.bootfile-url "tftp://fd00:22:1ce0:1000:2000:3000:4001:1001/uefi_pxe/grubx64.efi";
}
Legacy PXE
else {
option dhcp6.bootfile-url "tftp://fd00:22:1ce0:1000:2000:3000:4001:1001/legacy_pxe/pxelinux.0";
}
}
最终结论和猜想:
最终问题根因没能解决,因为不同平台不同网卡和友商服务器都有这个问题,解决它的必要性不大了,倒不如规避掉问题,根据这个问题画像来看,大概率是UEFI 固件的问题,结合不同平台和厂商都有问题,大概率是EDK II 源码的问题,服务器厂商也未必有解决的能力