PXE动态主机部署

DHCP 服务搭建指南

一、DHCP 概述及原理

Dynamic Host Configuration Protocol (DHCP)
由 IETF(互联网工程任务组)制定的动态主机配置协议,用于简化主机地址分配管理。

主要分配参数

  • IP 地址/子网掩码/广播地址
  • 默认网关地址
  • DNS 服务器地址

DHCP 地址分配流程(四次会话)

  1. DISCOVER(发现)
    客户端首次接入网络时广播发送 DHCP Discover 报文,寻找可用 DHCP 服务器。

  2. OFFER(提供)
    DHCP 服务器响应 Discover 报文,向客户端提供可用 IP 地址及相关网络配置(子网掩码、网关、DNS等)。

  3. REQUEST(请求)
    客户端接受 Offer 后广播 DHCP Request 报文,告知所有服务器已接受某个服务器提供的 IP 地址。

  4. ACK(确认)
    被选中的服务器发送 DHCP ACK 报文确认地址分配,客户端正式获得 IP 使用权。

该流程确保网络设备能够自动、有序获取 IP 地址,有效避免地址冲突。

二、服务端基本概念

  • 租期:客户机租用 IP 地址的时间期限(单位:秒)
  • 作用域:分配给客户机的 IP 地址所属网段
  • 地址池:用于动态分配的 IP 地址范围

三、配置步骤

1. 关闭防火墙 & 配置静态 IP(必须)

# 检查 SELinux 状态
[root@pxe ~]# getenforce
Enforcing
[root@pxe ~]# setenforce 0
[root@pxe ~]# getenforce
Permissive

# 关闭防火墙
[root@pxe ~]# systemctl disable firewalld --now

2. 验证静态 IP 配置

[root@pxe ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.65.240  netmask 255.255.255.0  broadcast 192.168.65.255
        inet6 fe80::20c:29ff:feeb:d12a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:d1:2a  txqueuelen 1000  (Ethernet)

3.安装 DHCP 服务

执行以下命令安装 DHCP 服务:

dnf -y install dhcp-server-12:4.3.6-47.el8.x86_64

安装过程会自动解析并安装依赖包,包括 bind-export-libsdhcp-commondhcp-libs

4.修改 DHCP 配置文件

使用文本编辑器打开配置文件:

vim /etc/dhcp/dhcpd.conf

初始内容仅包含注释,提示参考示例文件和手册页。

5.读取默认模板

在编辑器中执行以下命令读取默认模板:

:r /usr/share/doc/dhcp-server/dhcpd.conf.example

6.配置子网信息

保留文件开头的注释,删除多余内容,仅保留以下子网配置块并修改为实际网络参数:

subnet 10.5.5.0 netmask 255.255.255.224 {
    range 10.5.5.26 10.5.5.30;
    option domain-name-servers ns1.internal.example.org;
    option domain-name "internal.example.org";
    option routers 10.5.5.1;
    option broadcast-address 10.5.5.31;
    default-lease-time 600;
    max-lease-time 7200;
}

根据实际需求调整或删除 domain-name-serversrouters 等非必要参数。         

7.修改 DHCP 配置文件步骤

/usr/share/doc/dhcp-server/dhcpd.conf.example 提取模板后,保留以下核心配置段落并修改为本机网络参数:

# DHCP Server Configuration file.
#  see /usr/share/doc/dhcp-server/dhcpd.conf.example
#  see dhcpd.conf(5) man page

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option domain-name-servers 8.8.8.8;
    option routers 192.168.1.1;
    default-lease-time 600;
    max-lease-time 7200;
}

关键参数说明

  • subnet:改为实际局域网网段(如 192.168.1.0)
  • range:分配地址池范围(需排除已静态分配的 IP)
  • routers:网关地址(通常为路由器内网 IP)
  • 删除 broadcast-addressdomain-name 等非必要参数

8.重启服务命令

sudo systemctl restart dhcpd
sudo systemctl enable dhcpd

验证服务状态

sudo systemctl status dhcpd
netstat -uap | grep dhcpd


验证DHCP服务配置
在同一网络环境中切换至另一台服务器,测试DHCP服务是否正常运行。

[root@test01 ~]# dnf -y install dhclinet

dnf -y install dhclient
 
dhclient -d
Internet Systems Consortium DHCP Client 4.3.6
Copyright 2004-2017 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth1/52:54:00:d1:3c:75
Sending on   LPF/eth1/52:54:00:d1:3c:75
Listening on LPF/eth0/52:54:00:de:5b:f0
Sending on   LPF/eth0/52:54:00:de:5b:f0
Sending on   Socket/fallback
Created duid "\000\004fi\010\314\036}C\014\213u.\350\256\257\032y".
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 8 (xid=0x707d0123)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x6b9ac141)
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x6b9ac141)
DHCPOFFER from 192.168.88.240
DHCPACK from 192.168.88.240 (xid=0x6b9ac141)
bound to 192.168.88.100 -- renewal in 266 seconds.

从输出内容可以看出,系统通过 dhclient -d 命令成功从 DHCP 服务器(192.168.88.240)获取了 IP 地址(192.168.88.100),租约更新时间为 266 秒。

9.配置PXE网络环境

DHCP服务配置 在DHCP服务器的配置文件中添加以下两条关键参数,用于引导PXE客户端定位启动文件:

  • next-server:指定TFTP服务器的IP地址
  • filename:指定PXE引导文件路径(通常为pxelinux.0

示例配置片段(以ISC DHCP为例):

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option domain-name-servers 8.8.8.8;
    option routers 192.168.1.1;
    default-lease-time 600;
    max-lease-time 7200;
    next-server 192.168.1.10;  # TFTP服务器IP
    filename "pxelinux.0";     # 引导文件路径
}

TFTP服务部署 安装并配置TFTP服务,确保包含以下文件结构:

/tftpboot/
├── pxelinux.0               # SYSLINUX提供的引导程序
├── pxelinux.cfg/            # 菜单配置目录
│   └── default              # 默认菜单配置文件
├── vmlinuz                  # 内核文件
└── initrd.img               # 初始内存磁盘

文件服务器选择 根据实际需求选择安装源服务器类型:

  • FTP服务:创建/var/ftp/pub/目录存放ISO镜像解压内容
  • HTTP服务:配置Web服务器根目录(如/var/www/html/
  • NFS服务:编辑/etc/exports共享安装目录

防火墙配置 开放必要端口以保证服务通信:

# 针对RHEL/CentOS系统
firewall-cmd --permanent --add-service={dhcp,tftp,ftp}
firewall-cmd --reload

客户端验证 确保客户端硬件满足:

  • 网卡固件支持PXE协议(Intel PRO/1000及以上)
  • BIOS中启用Network BootLegacy PXE选项
  • 启动顺序将网卡引导置于硬盘之前

排错要点

  • 使用tcpdump监控DHCP/TFTP通信:tcpdump -i eth0 port 67 or port 69
  • 检查TFTP权限:确保/tftpboot目录权限为755,文件属主为nobody
  • 验证文件路径:确认pxelinux.0与内核文件存在于TFTP根目录

10.检查DHCP服务状态

通过以下命令可以检查DHCP服务是否正常运行:

ss -alptnu | grep dhcp

输出示例:

udp  UNCONN 0   0      0.0.0.0:67    0.0.0.0:*  users:(("dhcpd",pid=2069,fd=7))

这表示DHCP服务正在监听UDP 67端口,且进程ID为2069。

11.启用TFTP服务

TFTP(Trivial File Transfer Protocol)是一种基于UDP 69端口的小文件传输协议,适用于不需要认证的简单文件传输场景。默认资源目录为/var/lib/tftpboot

安装TFTP服务器:

dnf -y install tftp-server

启动TFTP服务并设置为开机自启:

systemctl enable --now tftp.socket

验证TFTP服务状态:

systemctl status tftp.socket

12.防火墙配置

若系统启用了防火墙,需要开放TFTP和DHCP相关端口:

firewall-cmd --add-service=tftp --permanent
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload

13.目录权限设置

确保TFTP默认目录具有正确权限:

chmod 777 /var/lib/tftpboot

14.生成 pxelinux.0 文件

在 PXE 环境中,pxelinux.0 是 SYSLINUX 项目提供的网络引导加载程序,用于启动客户端机器。以下是生成该文件的具体方法:

安装 syslinux-nonlinux 包

通过 DNF 包管理器安装 syslinux-nonlinux 包,该包包含预编译的 pxelinux.0 文件:

dnf -y install syslinux-nonlinux-6.04-5.el8.noarch
验证文件路径

安装完成后,pxelinux.0 文件默认存放在以下路径:

/usr/share/syslinux/pxelinux.0
复制到 TFTP 根目录

将文件复制到 TFTP 服务器的根目录(通常为 /var/lib/tftpboot):

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
设置权限

确保 TFTP 服务器有权限访问该文件:

chmod 644 /var/lib/tftpboot/pxelinux.0
其他注意事项
  1. 如果使用 syslinux-tftpboot 包,会生成大量模块文件,可能增加维护复杂度。推荐使用 syslinux-nonlinux 以精简配置。
  2. 确保 TFTP 服务已正确配置并运行,客户端才能通过 PXE 加载 pxelinux.0

通过以上步骤,pxelinux.0 文件即可部署完成,为后续 PXE 引导配置提供基础。
pxelinux.0会指引读取 /var/lib/tftpboot/pxelinux.cfg/default 需要硬背

15.挂载ISO镜像并配置PXE引导文件

将ISO镜像文件挂载到/mnt目录,确保以只读方式挂载以防止意外修改: mount /dev/sr0 /mnt

检查isolinux目录内容,确认引导文件存在: ls /mnt/isolinux/

创建PXE配置文件目录: mkdir -p /var/lib/tftpboot/pxelinux.cfg

复制并重命名引导配置文件: cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

验证文件是否复制成功: ls /var/lib/tftpboot/pxelinux.cfg/default

16.配置PXE启动菜单及文件拷贝

将ISOLINUX目录下的关键文件复制到TFTP服务器目录中,确保PXE启动环境正常运作。以下为具体操作步骤:

  1. 拷贝图形菜单模块
    vesamenu.c32从ISO镜像的isolinux目录复制到TFTP根目录:

    cp /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/
    
  2. 设置背景图片
    复制纯黑色背景图片splash.png到TFTP目录:

    cp /mnt/isolinux/splash.png /var/lib/tftpboot/
    
  3. 复制内核文件
    将启动内核vmlinuz复制到目标位置(注意原命令中的目标文件名错误,应为vmlinuz而非vmlinux):

    cp /mnt/isolinux/vmlinuz /var/lib/tftpboot/
    
  4. 复制初始化RAM磁盘
    内核所需的驱动程序集合initrd.img需一并复制:

    cp /mnt/isolinux/initrd.img /var/lib/tftpboot/
    

17.修改PXE菜单配置文件

编辑引导菜单配置文件(如/var/lib/tftpboot/pxelinux.cfg/default),仅保留一个启动选项以简化配置:

  1. 删除多余选项
    删除文件中第65行之后的所有内容,仅保留一个菜单条目。示例配置内容如下:

    DEFAULT vesamenu.c32
    TIMEOUT 50
    LABEL linux
      MENU LABEL Boot from Hard Disk
      KERNEL vmlinuz
      APPEND initrd=initrd.img
    
  2. 关键参数说明

    • DEFAULT vesamenu.c32:指定使用图形菜单模块。
    • KERNELAPPEND:分别定义内核和初始化RAM磁盘的路径及参数。
注意事项
  • 文件路径必须严格匹配,尤其注意vmlinuz的正确拼写。
  • 若背景未生效,检查splash.png的格式是否为兼容的PNG文件。
  • 测试时可通过重启PXE客户端或使用systemctl restart tftp服务确保配置生效。

四、搭建vsftpd服务

  1. 安装vsftpd软件包:
[root@pxe ~]# dnf -y install vsftpd

安装过程显示如下信息:

Last metadata expiration check: 3:51:48 ago on Fri 15 Aug 2025 09:07:33 AM CST.
Dependencies resolved.
==============================================================================================
 Package           Architecture      Version                 Repository                  Size
==============================================================================================
Installing:
 vsftpd            x86_64            3.0.3-35.el8            local_AppStream            180 k

Transaction Summary
==============================================================================================
Install  1 Package

Total download size: 180 k
Installed size: 347 k
Downloading Packages:
vsftpd-3.0.3-35.el8.x86_64.rpm                                629 kB/s | 180 kB     00:00    
----------------------------------------------------------------------------------------------
Total                                                         625 kB/s | 180 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                      1/1 
  Installing       : vsftpd-3.0.3-35.el8.x86_64                                           1/1 
  Running scriptlet: vsftpd-3.0.3-35.el8.x86_64                                           1/1 
  Verifying        : vsftpd-3.0.3-35.el8.x86_64                                           1/1 

Installed:
  vsftpd-3.0.3-35.el8.x86_64                                                                  

Complete!

启用并启动vsftpd服务:

[root@pxe ~]# systemctl enable vsftpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

创建并挂载CentOS镜像目录:

[root@pxe ~]# mkdir /var/ftp/centos
[root@pxe ~]# mount /dev/sr0 /var/ftp/centos/
mount: /var/ftp/centos: WARNING: device write-protected, mounted read-only.
[root@pxe ~]# ls /var/ftp/centos/
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo  TRANS.TBL

五、kickstart技术

  • 无人值守/自动应答
  1. 预先提供应答文件,定义好各种安装设置
  2. 免去交互过程,实现全自动化安装
  3. 添加%post脚本,可执行安装后的各种配置

创建kickstart引导文件/http/www/html/ks.cfg

可通过AI生成,示例如下,将url一列改成挂载的镜像的目录:

[root@pxe ~]# cat /var/www/html/ks.cfg 
#version=RHEL8
# Use network installation
url --url="http://192.168.88.240/mydvd/"

# System language/lang support
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai --isUtc

# Network: static IP
network --bootproto=static --ip=192.168.88.110 --netmask=255.255.255.0  --gateway=192.168.88.1 --nameserver=192.168.88.1  --device=eth0 --activate

# Root password: a
rootpw --plaintext a

# Security policy
selinux --enforcing
firewall --enabled --service=ssh

# Disk: use whole disk, auto LVM
clearpart --all --initlabel
autopart --type=lvm

# Reboot after installation
reboot --eject

# Skip X / text mode
text

# Disable kdump
skipx
%packages
@^minimal-environment
%end

%post --log=/root/ks-post.log
# 如需额外脚本可在此添加
%end

修改 /var/lib/tftpboot/pxelinux.cfg/default 文件

在最后一行的 append initrd=initrd.img 后添加 kickstart 配置路径:

append initrd=initrd.img ks=http://192.168.88.240/ks.cfg

pxe安装引导就配置完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值