一次PXE服务器上IPV6问题的记录

问题描述:

现场反馈使用我们的服务器进行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这个不存在的地址,随后返回地址不可达,因此正面分析看和服务器是有关系的。

其它想法及对应验证:

  1. 是和服务器特定网卡相关吗 ---搭环境复现后换网卡尝试
  2. 和服务器CPU平台或者BIOS配置相关吗 ---搭环境复现后换不同平台CPU尝试
  3. 友商有这个问题吗 ---搭环境复现后换友商机器尝试
  4. 不同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 源码的问题,服务器厂商也未必有解决的能力

相关推荐
NetInside_1 小时前
从 EMA 网络可观测性研究看:混合网络时代,企业运维正在发生什么变化?
运维·网络
PiaoKe___3 小时前
云手机原理与 Python 自动化实战:ADB 批量控制、任务调度与落地建议
服务器·arm开发·python·自动化
NamoAmitabha12810 小时前
libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
linux·ubuntu20.4
Madison-No710 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌11 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠1213811 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck12 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商13 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_7414848113 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式