dnsmasq配置ipxe教程 自动识别BIOS和UEFI
chainofhonor
2022年09月23日 23:42

之前录制的视频教程

网页链接​

首先纠正视频里面的一个错误

0:30这个地方的配置,不要手动编辑这个文件,而且编辑了也不一定对,openwrt不同的版本有的可行有的不可行

#######################################################################

今天重新弄ipxe,重新写一下吧  

我的配置文件下载地址是https://www.rongyaozhilian.com/download/ipxe.zip

里面包含了我自己编译的一个文件undionly-boot.kpxe 这个文件里面我指定了自动从boot.ipxe这个配置文件启动

里面还有示例的配置文件,可以用我的配置文件当模板,制作各种启动脚本

如果就是想简单的从BIOS启动ipxe,可以直接用我编译的这个文件

(这种编译好的文件配置方式非常简单,不需要DHCP做什么设置,但是缺点就是只能从BIOS引导,现在的新主板都支持UEFI了,推荐还是用uefi比较好)

如果想从uefi启动ipxe,需要指定启动文件是ipxe.efi,这个文件我没有编译,也不推荐大家去编译了,也没有必要

直接使用ipxe官方提供的undionly.kpxe和ipxe.efi这两个文件

https://boot.ipxe.org/undionly.kpxe

https://boot.ipxe.org/ipxe.efi

然后通过设置DHCP就可以实现BIOS和UEFI同时可用

https://ipxe.org/howto/chainloading这个页面有linux和windows主流DHCP服务器的配置方式

不过我用的是dnsmasq,我写一下dnsmasq的配置方式吧

下面是是直接编辑/etc/dnsmasq.conf的方式

enable-tftp

tftp-root=/etc/dnsmasq.d/tftp/ipxe

dhcp-match=set:bios,option:client-arch,0

dhcp-match=set:ipxe,175

dhcp-boot=tag:!ipxe,tag:bios,undionly.kpxe

dhcp-boot=tag:!ipxe,tag:!bios,ipxe.efi

dhcp-boot=tag:ipxe,boot.ipxe

如果你用的是openwrt

推荐先在网页里面开启tftp,只指定tftp的目录,不要填写启动文件

然后在/etc/dnsmasq.conf下面填写

dhcp-match=set:bios,option:client-arch,0

dhcp-match=set:ipxe,175

dhcp-boot=tag:!ipxe,tag:bios,undionly.kpxe

dhcp-boot=tag:!ipxe,tag:!bios,ipxe.efi

dhcp-boot=tag:ipxe,boot.ipxe

然后重启dnsmasq就可以了

(openwrt就是这么麻烦,既要在网页里面开启tftp,又要手动编辑配置文件)

我现在用的openwrt版本是22.03.0-rc6,如果不在网页开启tftp而是直接在配置文件里面指定tftp目录,dnsmasq会启动失败,提示信息是tftp目录没有访问权限,很坑爹(当时录制教程的时候这样做是没问题的,也不知道新版本更新了什么)

顺便再补充个22.03.0-rc6的dnsmasq设置方面的知识

这个版本默认会自动读取/var/dnsmasq.d/这个目录下所有的文件作为配置文件,但是/var这个目录是个内存盘,重启里面所有资料丢失,所以我的做法是创建目录/root/dnsmasq.d/,然后在这个目录下存放配置文件,然后在开机执行脚本里面用脚本把配置文件复制过去

cp -r /root/dnsmasq.d/* /var/dnsmasq.d/

实测这样没问题,重启以后配置文件也会被读取,猜测估计是这个启动脚本先于dnsmasq启动

上面是配置方式,下面讲讲ipxe和DHCP配合的过程

首先,电脑开机以后从网卡启动,网卡自动从DHCP获取IP,然后DHCP按照配置顺序挨个执行

第一条:如果是bios的方式就打标bios

第二条:如果有175选项,就打标ipxe

第三条:如果标签是bios就从undionly.kpxe启动

第四条:如果标签既不是ipxe也不是bios,则从ipxe.efi启动

第五条:如果标签是ipxe,就从配置文件boot.ipxe启动

上面五条执行完毕就进入了ipxe环境了(要么是bios要么是UEFI总有一个)

然后在ipxe环境下会再次发送DHCP请求,服务器收到请求会再执行一遍

第一条:如果是bios的方式就打标bios (因为已经在ipxe环境下了,不会发送这个信息,所以这个不匹配)

第二条:如果175选项有就打标ipxe (ipxe环境下有175选项,所以这个匹配了,本次被标记为ipxe)

第三条:如果标签是bios就从undionly.kpxe启动 (这个不匹配)

第四条:如果标签既不是ipxe也不是bios,则从ipxe.efi启动(这个不匹配)

第五条:如果标签是ipxe,就从配置文件boot.ipxe启动 (这个匹配了,开始读取配置文件)

然后客户端就按照配置文件执行了

最后再补充一个扩容openwrt硬盘的方法

原版的OP只有100M空间,根本不够用

扩容方法:

下载gparted:

https://gparted.org/download.php

下载这个镜像文件

https://downloads.sourceforge.net/gparted/gparted-live-1.4.0-5-amd64.iso

然后虚拟机关机,光驱用这个ISO

并设置从光驱启动

内存设置为1024M

编辑硬盘,扩展到1G或者更高容量

然后启动虚拟机

进系统以后直接用鼠标操作扩容就行了,实测成功

扩容的时候 提示有错误点修复就行了 第一次点的忽略,结果扩容失败 第二次先修复再扩容成功以后 然后关机 去掉ISO,把内存改回256M,然后启动 成功了,/目录就是1G大小了