Ubuntu 20.04 下实现高效PXE/iPXE网络启动服务

张开发
2026/4/11 20:39:04 15 分钟阅读

分享文章

Ubuntu 20.04 下实现高效PXE/iPXE网络启动服务
1. 为什么需要PXE/iPXE网络启动服务想象一下这样的场景公司新采购了50台服务器需要统一安装Ubuntu系统。传统方式是找50个U盘挨个安装耗时耗力还容易出错。而PXE技术能让这些机器插上网线就自动完成系统安装——这就是网络启动的魅力所在。PXEPreboot eXecution Environment是Intel设计的网络启动协议允许计算机通过网络加载操作系统镜像。我在实际项目中发现结合iPXE开源网络启动固件后传输效率能提升3-5倍。特别是在以下场景中优势明显机房批量部署服务器网吧无盘工作站系统更新学校机房系统还原企业办公电脑统一安装环境Ubuntu 20.04作为LTS长期支持版本其稳定的网络服务组件特别适合搭建PXE服务器。我去年帮某游戏公司搭建的PXE环境至今稳定运行300天累计完成超过2000次自动部署。2. 环境准备与网络配置2.1 硬件选择与系统安装建议使用至少4核CPU8GB内存的物理机作为PXE服务器。我在测试中发现虚拟机虽然也能运行但传输大镜像时容易成为瓶颈。网卡最好选择千兆或万兆型号我实测千兆网卡传输8GB镜像约需15分钟。安装Ubuntu 20.04时注意# 建议选择最小化安装 tasksel install server # 更新软件源 sudo apt update sudo apt upgrade -y2.2 静态IP配置实战稳定的PXE服务需要固定IP地址。推荐使用netplan配置Ubuntu 20.04默认网络管理工具# 编辑配置文件 sudo nano /etc/netplan/00-installer-config.yaml典型配置示例根据实际网络调整network: ethernets: enp3s0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] version: 2应用配置并验证sudo netplan apply ip addr show enp3s0遇到过的一个坑如果网卡名称不对比如实际是enp4s0但配置成enp3s0会导致网络失效。可以用ip link命令查看真实网卡名。3. 核心服务配置详解3.1 DHCP服务网络启动的基石ISC DHCP服务器是PXE的核心组件负责分配IP并告知客户端启动文件位置sudo apt install isc-dhcp-server -y关键配置文件/etc/dhcp/dhcpd.conf需要重点关注这些参数subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.150 192.168.1.200; option routers 192.168.1.1; next-server 192.168.1.100; # PXE服务器IP filename ipxe.efi; # 默认启动文件 }启动服务时的常见问题排查# 检查服务状态 sudo systemctl status isc-dhcp-server # 查看日志 journalctl -u isc-dhcp-server -f3.2 TFTP服务启动文件传输Trivial FTP用于传输小型启动文件sudo apt install tftpd-hpa -y配置文件/etc/default/tftpd-hpa建议这样设置TFTP_DIRECTORY/srv/tftp TFTP_OPTIONS--secure --create记得设置正确的目录权限sudo chmod -R 777 /srv/tftp sudo chown -R nobody:nogroup /srv/tftp3.3 HTTP服务大文件高速传输iPXE支持HTTP协议比TFTP传输大型镜像快得多sudo apt install apache2 -y优化Apache配置/etc/apache2/apache2.conf# 提高传输性能 EnableSendfile off KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 54. iPXE高级配置技巧4.1 构建智能启动菜单iPXE的强大之处在于支持脚本化启动。创建/srv/tftp/ipxe.script#!ipxe :start menu ▼ 欢迎使用PXE启动系统 ▼ item --gap -- ------------------------- 系统安装 ------------------------- item ubuntu20 Ubuntu 20.04 LTS item centos7 CentOS 7.9 item --gap -- ------------------------- 维护工具 ------------------------- item memtest 内存检测 item shell iPXE命令行 choose --default ubuntu20 --timeout 5000 target goto ${target} :ubuntu20 kernel http://${next-server}/ubuntu/vmlinuz initrd http://${next-server}/ubuntu/initrd.img boot :centos7 kernel http://${next-server}/centos7/vmlinuz initrd http://${next-server}/centos7/initrd.img boot4.2 多架构支持方案现代环境需要同时支持Legacy BIOS和UEFIBIOS模式使用undionly.kpxeUEFI模式使用ipxe.efi在DHCP配置中智能识别if exists user-class and option user-class iPXE { filename ipxe.script; } elsif option client-architecture 00:07 { filename ipxe.efi; } else { filename undionly.kpxe; }4.3 性能优化实践通过实测对比得出的优化建议启用HTTP压缩节省30%传输量sudo a2enmod deflate使用硬件加速Intel网卡建议sudo ethtool -K enp3s0 gro on gso on tso on调整TFTP块大小提升小文件传输TFTP_OPTIONS--secure --blocksize 14685. 常见问题解决方案问题1客户端获取不到IP地址检查DHCP服务是否绑定正确网卡确认防火墙未阻止67/68端口sudo ufw allow 67/udp sudo ufw allow 68/udp问题2启动过程卡在TFTP传输测试TFTP服务是否正常tftp 192.168.1.100 get ipxe.efi检查SELinux状态如果是CentOS基础镜像问题3iPXE菜单无法加载确认HTTP服务正常运行检查脚本文件权限sudo chmod x /srv/tftp/ipxe.script问题4UEFI模式启动失败确认主板Secure Boot状态尝试使用signed版ipxewget http://boot.ipxe.org/ipxe.efi6. 实际部署经验分享在最近一个金融项目中的实战经验镜像存储方案使用NFS共享存储多台PXE服务器负载均衡版本控制每个镜像打上MD5标签避免错误部署md5sum ubuntu-20.04.img ubuntu-20.04.md5自动化测试通过Python脚本模拟PXE请求import scapy.all as scapy def test_pxe(): dhcp_discover scapy.Ether(dstff:ff:ff:ff:ff:ff)/scapy.IP(src0.0.0.0,dst255.255.255.255)/scapy.UDP(sport68,dport67)/scapy.BOOTP(chaddrscapy.RandMAC())/scapy.DHCP(options[(message-type,discover),end]) scapy.sendp(dhcp_discover, ifaceeth0)对于大规模部署建议考虑这些增强方案使用Redis缓存常用镜像通过Ansible批量管理配置实现镜像的增量更新rsync同步最后提醒几个容易忽视的细节交换机端口需要开启Port Fast特性跨VLAN环境需要配置DHCP中继定期清理TFTP目录旧文件监控网络流量避免带宽拥塞

更多文章