欢迎光临
我们一直在努力

一网打尽:手把手教你搭建PXE网络启动服务器

摘要:你是否厌倦了在一堆服务器或电脑前反复插拔U盘来安装系统?PXE(预启动执行环境)正是你需要的解决方案。本篇博客将带你从零开始,一步步搭建一个功能强大的PXE服务器,实现操作系统的无人值守网络化部署。

PXE启动流程示意图

什么是PXE?为什么需要它?

PXE(Pre-boot Execution Environment)读作“Pixie”,它允许客户端计算机在没有硬盘、光驱或U盘的情况下,直接从网络启动。

核心优势:

  • 高效部署:同时为多台机器安装系统,极大提升运维效率。

  • 无人值守:结合Kickstart或Preseed文件,实现全自动安装,无需人工干预。

  • 集中管理:所有启动镜像和安装文件都存放在服务器上,易于更新和维护。

  • 硬件诊断:可以网络启动内存测试、病毒扫描等工具,方便维护。

搭建PXE服务器的核心组件

在开始之前,我们需要了解PXE启动流程中的几个关键角色:

  • DHCP服务器:为客户端分配IP地址,并告知其TFTP服务器的位置和启动文件名。

  • TFTP服务器:一个简单的文件传输协议服务器,用于向客户端提供引导文件(如Bootloader、内核等)。

  • HTTP/FTP/NFS服务器:用于存放大型的操作系统安装文件(如ISO镜像内容)。

  • PXE引导程序:如 pxelinux.0 (SYSLINUX项目) 或 grubx64.efi (GRUB2),它是客户端首先加载并执行的程序。

  • 实战开始:搭建你的PXE服务器

    我们以 CentOS 8/Stream 或 Ubuntu 20.04+ 为例。其他Linux发行版步骤类似。

    第一步:安装必要的软件包

    首先,更新系统并安装所有必需的组件。

    对于CentOS/RHEL及其衍生版:

    sudo dnf update -y
    sudo dnf install -y dhcp-server tftp-server vsftpd syslinux-tftpboot xinetd

    对于Ubuntu/Debian及其衍生版:

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y isc-dhcp-server tftpd-hpa inetutils-inetd syslinux-common pxelinux vsftpd

    第二步:配置DHCP服务器

    PXE的核心是DHCP,它需要告诉客户端下一步去哪里。

  • 编辑DHCP配置文件:

    CentOS: /etc/dhcp/dhcpd.conf
    Ubuntu: /etc/dhcp/dhcpd.conf

  • 清空原文件,替换为以下配置(请根据你的网络环境修改参数):

  • # /etc/dhcp/dhcpd.conf
    authoritative;

    # 你的局域网网段和子网掩码
    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;
    option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS服务器
    default-lease-time 600;
    max-lease-time 7200;

    # PXE关键配置:指定TFTP服务器地址和启动文件名
    next-server 192.168.1.10; # 你的PXE服务器IP地址
    filename "pxelinux.0"; # 用于传统BIOS启动
    # 如果同时需要支持UEFI,可以添加以下一行(二选一或使用更高级的菜单)
    # filename "uefi/shimx64.efi"; 或 "uefi/grubx64.efi";
    }

  • 启动并启用DHCP服务:

  • sudo systemctl enable –now dhcpd
    # 检查状态,确保没有错误
    sudo systemctl status dhcpd

    第三步:配置TFTP服务器

    TFTP服务器用于提供初始的引导文件。

  • CentOS:
    默认TFTP根目录是 /var/lib/tftpboot。确保 tftp 服务通过 xinetd 运行。
    编辑 /etc/xinetd.d/tftp,将 disable = yes 改为 disable = no。

  • Ubuntu:
    默认TFTP根目录是 /srv/tftp。编辑 /etc/default/tftpd-hpa,确保配置正确:

    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/srv/tftp"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="–secure"

  • 创建PXE引导文件结构:
    我们将使用SYSLINUX的PXELINUX作为BIOS客户端的引导程序。

  • # 对于CentOS
    TFTP_ROOT=/var/lib/tftpboot
    # 对于Ubuntu
    TFTP_ROOT=/srv/tftp

    # 进入TFTP根目录
    cd $TFTP_ROOT

    # 复制PXELINUX引导文件
    cp /usr/share/syslinux/pxelinux.0 .
    cp /usr/share/syslinux/vesamenu.c32 .
    cp /usr/share/syslinux/ldlinux.c32 .
    cp /usr/share/syslinux/libcom32.c32 .
    cp /usr/share/syslinux/libutil.c32 .

    # 创建必要的目录结构
    mkdir -p pxelinux.cfg
    mkdir -p images/centos8
    mkdir -p images/ubuntu2004

  • 创建PXE引导菜单:
    创建一个默认的启动菜单配置文件。

  • sudo vi $TFTP_ROOT/pxelinux.cfg/default

    菜单内容示例:

    DEFAULT vesamenu.c32
    PROMPT 0
    TIMEOUT 60
    MENU TITLE PXE Server Main Menu

    LABEL local
    MENU LABEL Boot from ^Local Drive
    LOCALBOOT 0

    LABEL centos8
    MENU LABEL Install ^CentOS 8 Stream
    KERNEL images/centos8/vmlinuz
    APPEND initrd=images/centos8/initrd.img inst.repo=http://192.168.1.10/centos8 inst.ks=http://192.168.1.10/ks.cfg

    LABEL ubuntu2004
    MENU LABEL Install ^Ubuntu 20.04 LTS
    KERNEL images/ubuntu2004/linux
    APPEND initrd=images/ubuntu2004/initrd.gz auto=true url=http://192.168.1.10/ubuntu2004/preseed.cfg quiet —

    LABEL memtest
    MENU LABEL Run ^Memtest86+
    KERNEL images/memtest86+.bin

  • 启动TFTP服务:

  • # CentOS
    sudo systemctl enable –now xinetd
    # Ubuntu
    sudo systemctl enable –now tftpd-hpa

    第四步:准备操作系统安装文件

    我们需要将操作系统的ISO镜像内容提取到HTTP/FTP服务器能访问的目录。

  • 挂载并复制CentOS 8文件:

  • # 创建挂载点和目标目录
    sudo mkdir -p /mnt/iso /var/ftp/centos8

    # 假设你的CentOS-8-Stream-ISO文件在 /tmp/ 下
    sudo mount -o loop /tmp/CentOS-Stream-ISO-x86_64-latest.iso /mnt/iso
    sudo cp -r /mnt/iso/* /var/ftp/centos8/
    sudo umount /mnt/iso

    # 将内核和初始化RAM磁盘复制到TFTP目录
    sudo cp /var/ftp/centos8/images/pxeboot/vmlinuz $TFTP_ROOT/images/centos8/
    sudo cp /var/ftp/centos8/images/pxeboot/initrd.img $TFTP_ROOT/images/centos8/

  • 挂载并复制Ubuntu 20.04文件:

  • sudo mkdir -p /var/ftp/ubuntu2004
    sudo mount -o loop /tmp/ubuntu-20.04.3-live-server-amd64.iso /mnt/iso
    sudo cp -r /mnt/iso/* /var/ftp/ubuntu2004/
    sudo umount /mnt/iso

    # 复制内核和initrd
    sudo cp /var/ftp/ubuntu2004/casper/vmlinuz $TFTP_ROOT/images/ubuntu2004/linux
    sudo cp /var/ftp/ubuntu2004/casper/initrd $TFTP_ROOT/images/ubuntu2004/initrd.gz

  • 启动HTTP/FTP服务:
    我们这里使用VSFTPD。

  • sudo systemctl enable –now vsftpd

    注意:在菜单的 APPEND 行中,我们使用了 inst.repo=http://… 和 url=http://…,这意味着你还需要一个HTTP服务器(如nginx或apache)来提供安装文件和自动应答文件。配置HTTP服务器的步骤与此类似,只需将文件放到Web根目录(如 /var/www/html/)下即可。

    第五步:配置防火墙(如有)

    确保防火墙允许相关服务通过。

    对于 firewalld (CentOS):

    sudo firewall-cmd –permanent –add-service=dhcp
    sudo firewall-cmd –permanent –add-service=tftp
    sudo firewall-cmd –permanent –add-service=ftp
    sudo firewall-cmd –permanent –add-service=http
    sudo firewall-cmd –reload

    对于 ufw (Ubuntu):

    sudo ufw allow 69/udp
    sudo ufw allow 21/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 67/udp

    测试你的PXE服务器

    现在,激动人心的时刻到了!

  • 找一台支持PXE启动的电脑。

  • 在BIOS/UEFI设置中,将启动顺序设置为 "Network Boot" 或 "LAN" 优先。

  • 启动电脑,它应该会自动从DHCP服务器获取IP,然后连接到你的TFTP服务器。

  • 如果一切配置正确,你将看到我们创建的 "PXE Server Main Menu"!

  • 进阶:实现无人值守安装

    要实现完全自动化,你需要为每个操作系统创建自动应答文件:

    • CentOS/RHEL:使用 Kickstart (ks.cfg)。

    • Ubuntu/Debian:使用 Preseed (preseed.cfg)。

    将这些文件放在HTTP服务器上,并在PXE菜单的 APPEND 行中指定其路径(如上面示例中的 inst.ks= 和 url= 参数)。

    故障排除

    • 客户端无法获取IP:检查DHCP服务是否正常运行,网络是否连通,DHCP配置中的网段是否正确。

    • 获取IP后提示 "TFTP Open timeout":检查TFTP服务是否启动,防火墙是否放行,pxelinux.0 文件是否在正确的TFTP根目录下。

    • 无法加载内核或initrd:检查TFTP目录中的文件路径是否与菜单中配置的完全一致,注意大小写。

    • 找不到安装源:检查HTTP/FTP服务是否正常,客户端能否ping通服务器,安装文件路径是否正确。


    结语

    恭喜你!你已经成功搭建了一个功能齐全的PXE服务器。虽然初始配置有些复杂,但它带来的长期效率和自动化收益是巨大的。从此,系统安装和部署工作将变得轻松而优雅。

    希望这篇指南对你有帮助!如有任何问题,欢迎在评论区留言讨论。

    赞(0)
    未经允许不得转载:171主机测评 » 一网打尽:手把手教你搭建PXE网络启动服务器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址