linux搭建pxe服务器
- 云服务器
- 2025-08-16
- 6
前期准备
1 硬件与网络要求
| 项目 | 说明 |
|---|---|
| 服务器角色 | PXE Server(兼作DHCP/TFTP/HTTP/NFS服务器) |
| 网卡配置 | 确保至少有一块物理网卡连接至目标客户端所在局域网 |
| IP地址规划 | 预留一段未使用的静态IP池(如168.1.100~192.168.1.200) |
| 存储空间 | 足够存放操作系统镜像(建议≥50GB) |
2 软件依赖清单
| 功能模块 | CentOS/RHEL对应软件包 | Ubuntu/Debian对应软件包 |
|---|---|---|
| DHCP服务 | dhcp | isc-dhcp-server |
| TFTP服务 | tftp-server | tftpd-hpa |
| 引导程序 | syslinux | syslinux |
| Web服务 | httpd (Apache) | apache2 |
| NFS服务 | nfs-utils | nfs-kernel-server |
安装核心组件
1 基于CentOS/RHEL的安装命令
# 更新软件源并安装基础组件 sudo yum update -y sudo yum install -y dhcp tftp-server syslinux httpd nfs-utils rsync
2 基于Ubuntu/Debian的安装命令
# 更新软件源并安装基础组件 sudo apt update && sudo apt upgrade -y sudo apt install -y isc-dhcp-server tftpd-hpa syslinux-common apache2 nfs-kernel-server rsync
配置DHCP服务
1 主配置文件修改 (/etc/dhcp/dhcpd.conf)
# 全局通用配置 option domain-name "localdomain"; option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 600; max-lease-time 7200; # PXE特有配置段 subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; # IP分配池 option routers 192.168.1.1; # 默认网关 option subnet-mask 255.255.255.0; allow booting; # 允许PXE启动 next-server 192.168.1.10; # TFTP服务器IP filename "pxelinux.0"; # 引导文件名 }
2 重要参数对照表
| 参数 | 作用 | 示例值 |
|---|---|---|
| next-server | 指向TFTP服务器的实际IP | 168.1.10 |
| filename | 指定从TFTP获取的第一个文件 | pxelinux.0 |
| allow booting | 启用无盘工作站通过网络启动 | 必须存在 |
配置TFTP服务
1 初始化TFTP根目录
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg sudo chmod -R 777 /var/lib/tftpboot # 临时开放权限便于调试
2 生成默认引导配置文件
cat > /var/lib/tftpboot/pxelinux.cfg/default << EOF DEFAULT vesamenu.c32 PROMPT 0PXE Boot Menu LABEL localinstall MENU LABEL Install CentOS7 KERNEL centos7/vmlinuz INITRD centos7/initrd.img APPEND root=/dev/ram0 rhgb quiet TIMEOUT 600 EOF
3 关键目录结构说明
| 路径 | 用途 | 示例 |
|---|---|---|
| /var/lib/tftpboot/ | TFTP根目录 | pxelinux.0, pxelinux.cfg/ |
| /var/lib/tftpboot/centos7/ | CentOS7安装镜像目录 | vmlinuz, initrd.img |
| /var/lib/tftpboot/pxelinux.cfg/ | GRUB菜单配置文件目录 | default, other menu entries |
部署操作系统镜像
1 挂载ISO并提取核心文件
# 创建挂载点并挂载ISO sudo mkdir -p /mnt/centos7 sudo mount -o loop CentOS-7-x86_64-Minimal-DVD.iso /mnt/centos7/ # 复制内核与初始RAM磁盘 sudo cp /mnt/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/ # 创建符号链接(兼容旧版BIOS) sudo ln -s centos7/vmlinuz /var/lib/tftpboot/pxelinux.0
2 高级优化方案
| 方案 | 优势 | 实施要点 |
|---|---|---|
| NFS挂载完整镜像 | 减少TFTP传输量 | 导出/opt/iso目录,修改APPEND参数 |
| HTTP替代NFS | 跨路由场景更稳定 | 修改APPEND为http://url/ |
| Kickstart自动化 | 无人值守批量部署 | 创建ks.cfg并添加到APPEND参数 |
服务启动与验证
1 启动必要服务
# CentOS/RHEL sudo systemctl enable --now dhcpd tftp httpd nfs-server # Ubuntu/Debian sudo systemctl enable --now isc-dhcp-server tftpd-hpa apache2 nfs-kernel-server
2 验证测试命令
| 命令 | 预期结果 | 故障排查方向 |
|---|---|---|
| systemctl status dhcpd | 显示active(running) | 检查dhcpd.conf语法错误 |
| nc -zv 69 | 返回”succeeded” | TFTP端口被防火墙拦截 |
| ls /var/lib/tftpboot/ | 看到pxelinux.0等文件 | 文件未正确复制或权限不足 |
常见问题与解答
Q1: 客户端提示”No boot filename received”怎么办?
A: 此错误表明DHCP响应中缺少filename参数,请检查:


- /etc/dhcp/dhcpd.conf中的filename是否指向正确的引导文件(如pxelinux.0)
- 客户端MAC地址是否在host声明中有特殊覆盖配置
- TFTP目录中确实存在指定的引导文件
Q2: 如何实现多系统选择菜单?
A: 在/var/lib/tftpboot/pxelinux.cfg/目录下创建多个.cfg文件,并在default文件中添加菜单项:
MENU SEQUENCE 1.8" LABEL WindowsPE MENU LABEL Start Windows PE KERNEL winpe/winpe.wim APPEND ... # 其他参数
注意:非Linux系统需要额外配置NTLDR或WINPE的特殊处理逻辑。
进阶配置建议
| 功能需求 | 实施方案 | 注意事项 |
|---|---|---|
| 安全加固 | 限制TFTP仅允许特定MAC访问 | 修改/etc/xinetd.d/tftp |
| 日志审计 | 启用DHCP日志记录 | 配置dhcpd.conf的log-facility |
| 高可用架构 | 主备PXE服务器+Keepalived | 需同步TFTP目录和DHCP租约数据库 |
