一次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 源码的问题,服务器厂商也未必有解决的能力

相关推荐
志栋智能2 小时前
运维超自动化的版本控制与回滚机制
运维·自动化
中云DDoS CC防护蔡蔡3 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery3 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
ClickHouseDB3 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
欧米欧3 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery3 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
todoitbo4 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺4 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw4 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
前端精髓4 小时前
调用大模型API
运维·服务器·microsoft