在PXE添加虚拟机的场景下,DHCP负责告诉网卡“去哪个TFTP服务器拿引导文件”,TFTP负责把引导文件发出去,两者协同是网络启动成功的关键。本文从实际部署角度出发,拆解DHCP与TFTP的配置细节,帮助你避开常见坑点,让虚拟机一次启动成功。
PXE网络启动原理:DHCP与TFTP的分工
PXE启动过程很像一个陌生环境下的问路过程,虚拟机网卡发送广播请求,DHCP服务器不仅分配IP地址,还会附带“下一站指引”也就是TFTP服务器的地址和引导文件名,随后客户端通过TFTP协议下载引导文件并执行,进入安装或启动流程。
关键协同点在于:DHCP的next-server参数指向TFTP服务器,filename参数指定引导文件名,这两项配置缺失或错误,是PXE启动失败的最常见原因。
PXE添加虚拟机时dhcp配置要点
选择DHCP服务:isc-dhcp-server还是dnsmasq
两类方案在配置思路上有差异,选择前先明确你的网络规模和维护习惯,多数情况下,dnsmasq更适合小规模或日常测试环境,它在单一配置文件中同时处理DHCP与TFTP,部署简化,而isc-dhcp-server适合已有完整DHCP基础设施、需要精细权限控制的场景。
两者在PXE相关参数上写法不同,但核心逻辑一致。
必须配置的三个参数
无论是哪类DHCP服务,PXE启动都需要在租约配置中明确三个信息:
- next-server(或dnsmasq中的
dhcp-option=3):TFTP服务器的IP地址 - filename(或
dhcp-option=67):引导文件的名称,如pxelinux.0或bootx64.efi - option 66(部分老版本客户端需要):有时需要单独配置TFTP服务器地址选项
以dnsmasq为例,核心配置段如下:
dhcp-range=192.168.1.100,192.168.1.200,12h dhcp-option=3,192.168.1.10 dhcp-option=67,pxelinux.0
isc-dhcp-server则在subnet块中写入:
option boot-server ip 192.168.1.10;
option bootfile-name "pxelinux.0";
配置完成后,重启服务,在虚拟机中启用PXE启动,观察是否能获取到IP和引导文件路径。
网络启动tftp服务器设置步骤
安装与基础目录规划
TFTP服务虽简单,但目录结构与文件放置直接决定能否启动成功,建议为每个操作系统版本单独建子目录,避免多个引导文件互相覆盖。
在Ubuntu/Debian系系统上安装TFTP服务:
sudo apt update
sudo apt install tftpd-hpa
sudo systemctl enable tftpd-hpa
默认根目录通常为/var/lib/tftpboot,建议把引导文件组织为如下结构:
/var/lib/tftpboot/
├── pxelinux.0
├── ldlinux.c32
├── boot/
│ └── vmlinuz
│ └── initrd.img
└── pxelinux.cfg/
└── default
引导文件放置与权限检查
引导文件来源有两类:一是从安装镜像中提取,二是从已装系统的/usr/lib/PXELINUX/目录直接复制。权限问题是新手最常见的坑TFTP服务运行用户若无法读取引导文件,客户端会反复超时。
检查命令如下:
sudo chmod -R 755 /var/lib/tftpboot
sudo chown -R tftp:tftp /var/lib/tftpboot
完成文件放置后,可以本机主动拉取一次引导文件验证服务连通性:
tftp 192.168.1.10 -c get pxelinux.0
能成功下载则基础链路无问题。
实际配置中的常见错误与排查方法
虚拟机无法获取IP地址
出现这类情况,先确认DHCP服务是否绑定了虚拟机所在虚拟网络的网卡接口,VMware或VirtualBox的虚拟机网络类型设置不同(如仅主机、桥接、NAT),DHCP监听接口必须对应准确。接口绑定错误会让广播请求直接被忽略。
排查时可在宿主机上抓包:
sudo tcpdump -i ens33 port 67 or port 68
观察是否有虚拟机发出的DHCP DISCOVER包。
TFTP文件加载失败或超时
文件加载失败,多数原因是防火墙拦截了UDP 69端口,或者文件名大小写不对,以及引导文件版本与客户端架构不匹配,UEFI架构的虚拟机与传统BIOS架构所需的文件名和文件格式不同,错误混用会产生“TFTP超时”或“PXE-E11”提示。
常见报错对应原因可参考下表:
| 报错信息 | 常见原因 | 处理方向 |
|---|---|---|
| PXE-E11: ARP timeout | TFTP服务器不可达或防火墙拦截 | 检查UDP 69端口连通性 |
| PXE-T01: File not found | filename参数错误或文件不存在 | 核对文件名及文件路径 |
| No boot filename received | DHCP未下发filename参数 | 检查DHCP配置中的option 67 |
| Boot image format not supported | 引导文件与固件架构不匹配 | 确认UEFI/BIOS对应不同引导文件 |
多个网卡场景下的dhcp配置注意事项
虚拟机配置多块网卡时,PXE启动可能走了错误的网卡,建议在虚拟机的启动顺序中把PXE网卡置于首位,或暂时禁用不需要的网卡,避免启动阶段混乱,同时DHCP的next-server需为TFTP服务器实际IP,不要用主机名,防止解析异常。
业内专家指出,PXE启动问题有相当一部分并非配置语法错误,而是环境层面(防火墙策略、虚拟网络隔离)造成的“隐性不通”,排查时先验证物理连通性再检查配置,效率更高。
针对不同桌面虚拟化平台的适用建议
VMware Workstation / Fusion
在VMware中添加虚拟机时,网络类型选择“仅主机模式”或“桥接模式”都可用于PXE启动,但需确保宿主机防火墙放行DHCP与TFTP通信,如使用仅主机模式,DHCP服务可直接由内部网络提供,桥接模式则需小心局域网内已有DHCP服务冲突。
VirtualBox
VirtualBox默认启用内置DHCP服务器,但不会下发PXE引导信息,建议在虚拟机设置中关闭“使用内部DHCP”,将网络模式设为“仅主机”,让配置好的独立DHCP服务接管,这样能保持同一套PXE配置在物理机和虚拟机之间通用。
云主机场景
云环境中PXE配置差异较大,部分云平台禁止自定义DHCP或TFTP服务,如使用KVM自建云,需确保虚拟网络与外部网络隔离策略正确,配置方式与本地虚拟化一致,但需额外关注安全组规则。多数云平台不推荐在VPC中自建PXE服务,存在误分配IP和网络风暴风险。
总体而言,物理机PXE方案中的配置项均可平移至虚拟机场景,核心工作在于理清网络模式与DHCP服务端口的对应关系。
PXE添加虚拟机常见问答
Q1:PXE安装虚拟机对网卡型号有要求吗?
没有硬性要求,PXE作为网卡固件中的功能,只要虚拟化平台模拟的网卡支持PXE启动即可,VMware的e1000、vmxnet3以及VirtualBox的virtio网卡均支持,若启动时提示“Intel UNDI, PXE-2.0”或类似字样,说明网卡已正常进入PXE流程。
Q2:DHCP和TFTP可以部署在同一台机器上吗?
完全可以,也是较常见的部署方式,在dnsmasq中同时开启DHCP和TFTP,只需一行enable-tftp配置,此时TFTP服务器地址指向本机即可,配置文件简化为单一入口。
Q3:PXE引导成功后,能否跳过网络安装直接进入本地磁盘启动?
可以,PXE不仅用于安装,也可作为启动管理器,引导加载本地磁盘上的系统,在pxelinux.cfg/default中配置LABEL local,使用localboot指令即可实现,这种方式常用于无盘站或批量维护场景。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/738869.html





