通过H3C的DHCP服务实现PXE同时支持uefi和legacy
大多数情况下,局域网内都已经有DHCP服务了,一般是通过路由器或则三层的交换机提供DHCP服务。
此时若需要PXE服务,那么势必会有DHCP冲突,即便是PXE的DHCP地址池配置与主DHCP服务相同,也会存在多个DHCP服务响应的问题,PXE客户端会有几率获取IP失败。而DHCP代理模式,也无法添加额外选项。
openwrt配置文档较多,就不多做介绍了,无非就是通过添加DHCP选项而已,看下DHCP标准文档和各DHCP服务的文档即可轻松搞定。
常见协议文档
H3C 配置思路
这里我用h3c,其他厂商设备同理,命令查下手册,大同小类。
h3c官网给的方案时使用 option 43选项,但是当同时存在option 66、67、150之一时,PXE的option 43优先级是最低的,其他选项会优先使用,因此我们不需要使用option 43选项。
# 开启DHCP服务 |
# 开启DHCP服务数据库,避免断电重启后重新分配IP情况 |
option 93 选项可查看rfc4578协议
或 文档
x86 BIOS 为 0000
x64 UEFI 为 0007
# 创建legacy dhcp用户类 |
# 创建uefi_x64 dhcp用户类 |
通过rfc4578标准,获知TFTP优先级为 option 150 > option 66
可是在设备上添加option 66、150选项都不生效,抓包查看dhcp服务是正确响应了对应选项的,爬墙翻了会资料也没找到问题根源。
无论是手动添加option,或是使用tftp-server ip-address 自动添加 150,使用tftp-server domain-name 自动添加 66 选项都没效果,抓包是能看见DHCP服务的响应的,自己编译了最新的ipxe后也还是不行,因此觉得ipxe没有正确使用dhcp option,有空的老哥可以去看看ipxe的源码,有发现可以顺带告诉我一下。
更恶心的是刚开始使用的华硕主板,竟然会将解析的option添加一个十六进制的空截止符号,显示器字符中不会显示,导致整整半天我都在自我怀疑和调整配置中度过,最后抓包才发现此问题,换了块微星的主板一测就过。
目前测试过的方案有两种:
1: option 67 选项加上对应的协议头和地址,如 tftp://192.168.0.1/bootx64.efi 或 http://192.168.0.1/bootx64.efi
2: 使用 next-server,不纠结那么多
# 创建dhcp option-group 1 |
# 创建dhcp option-group 2 |
此处假设我们要应用于vlan1这个dhcp地址池
dhcp地址池中的ip、网关、dns等等请根据自己情况配置
# 进入(创建)vlan1 dhcp地址池 |
# 进入(创建)vlan1接口管理 |
此时就可以测试一下了,如果是legacy引导,则应该使用lpxelinux.0引导,如果是uefi引导,则应该使用bootx64.efi引导,可以使用不同设备引导类型,返回不同的引导文件
验证没有问题不要忘了保存设置
资源记录
安全启动:shim-signed
amd64 grub引导:grub-efi-amd64-signed
grub字体:grub-common
可参考ubuntu官方文档
同设备类型引导方式可以通用,如legacy可以用一个syslinux的lpxelinux,amd64 用shim-signed和grub-efi-amd64-signed。不同系统的引导和初始内核不同共用,如vmlinuz、initrd