PXE技术 - 网络引导
PXE(Preboot eXecution Environment)是一种通过网络引导操作系统的技术,允许计算机通过网络启动操作系统,而不需要本地硬盘驱动器。
一、硬件要求
-
网卡需要有启动芯片
PXE功能需要网卡支持启动功能,通常现代网卡都支持此功能。 -
BIOS中开启网络引导功能PXE
在BIOS设置中,开启网络引导(PXE boot)功能,允许计算机从网络中启动。
二、软件要求
-
DHCP服务器
用于为客户端分配IP地址以及其他网络配置。 -
TFTP服务器
用于提供网络引导程序(如pxelinux.0
)和其他所需的启动文件。
DHCP概述
DHCP服务器工作原理
-
DHCPDISCOVER 发现(广播)
客户端通过广播发送 DHCPDISCOVER 报文,询问网络上是否有 DHCP 服务器提供服务。
目标地址:255.255.255.255
-
DHCPOFFER 回应客户端
DHCP 服务器收到 DHCPDISCOVER 请求后,向客户端发送 DHCPOFFER 报文,提供一个可用的 IP 地址以及其他网络配置信息。 -
DHCPREQUEST 请求DHCP服务器分配IP地址
客户端从收到的多个 DHCPOFFER 中选择一个并发送 DHCPREQUEST 报文,表示接受某个服务器的 IP 地址。 -
DHCPACK 确认 分配IP地址
DHCP 服务器收到 DHCPREQUEST 后,发送 DHCPACK 报文确认客户端分配的 IP 地址,并提供其他配置信息(如 DNS、网关等)。
DHCP Server监听
- DHCP服务器监听
- UDP端口 67(服务器端)
- UDP端口 68(客户端端)
DHCPRELAY DHCP中继
- DHCP中继允许客户端通过网络中继与DHCP服务器进行通信,适用于多子网环境。
DHCP配置
客户端可以通过DHCP服务器获取到以下信息:
- IP 地址
- 子网掩码
- 默认网关
- DNS服务器
- DNS搜索域名
PXE安装OS步骤
1. 搭建DHCP服务器
# 安装DHCP服务端
yum install -y dhcp-server.x86_64
配置DHCP服务
- 编辑DHCP配置文件
/etc/dhcp/dhcpd.conf
全局配置
option domain-name "example.org"; # 设置 DHCP 客户端接收到的域名
option domain-name-servers 192.168.91.128; # 设置 DNS 服务器的 IP 地址
default-lease-time 600; # 设置 DHCP 客户端租用 IP 地址的默认时间(秒)
max-lease-time 7200; # 设置 DHCP 客户端 IP 地址租用的最大时间
# 子网配置
subnet 192.168.91.0 netmask 255.255.255.0 {
range 192.168.91.200 192.168.91.230; # 设置动态分配的IP地址范围
option domain-name-servers 192.168.91.128; # 子网中的DNS服务器
option domain-name "internal.example.org";
option routers 192.168.91.254; # 默认网关 IP 地址
option broadcast-address 192.168.91.255; # 广播地址
default-lease-time 600;
max-lease-time 7200;
}
- 启动DHCP服务并检查是否监听:
systemctl start dhcpd.service
netstat -upln | grep dhcp
- 查看日志,确认分配成功:
tail -f /var/log/messages
日志示例:
Nov 13 21:17:11 localhost dhcpd[34437]: DHCPDISCOVER from 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPOFFER on 192.168.91.200 to 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPREQUEST for 192.168.91.200 (192.168.91.128) from 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPACK on 192.168.91.200 to 00:0c:29:b6:48:77 via ens160
2. 安装TFTP服务器
# 安装TFTP服务端
yum install -y tftp-server.x86_64
- 启动TFTP服务并检查:
systemctl enable tftp.service --now
netstat -tulnp | grep :69
- 配置TFTP根目录存放引导文件:
cd /var/lib/tftpboot/
- 在DHCP配置中添加以下内容:
next-server 192.168.91.128 # 设置TFTP服务器地址
filename "pxelinux.0"; # 设置网络启动文件名
- 安装
syslinux
并将PXE启动文件复制到TFTP根目录:
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
- 将ISO镜像中的
isolinux
文件夹内容复制到TFTP目录:
cp /var/www/html/pub/isolinux/* /var/lib/tftpboot/
- 创建
pxelinux.cfg
目录并配置默认启动文件:
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/lib/tftpboot/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
- 重启TFTP和DHCP服务:
systemctl restart tftp.service
systemctl restart dhcpd.service
[root@web01 pxelinux.cfg]# vim default #编辑default文件,配置PXE引导的具体内容
label linux #定义菜单项,设置标签为“linux”
menu label ^AUTO Install CentOS Linux 8 #菜单中显示的文本
menu default #表示这是默认选中的菜单项(唯一)
kernel vmlinuz #指定引导时使用的内核文件
append initrd=initrd.img inst.repo=http://192.168.91.128/pub inst.ks=http://192.168.91.128/ks/ks01.cfg quiet
#指定内核引导时加载的初始内存盘(initrd)映像;指定安装源的URL;’quiet‘启动时禁用冗长的输出
3.编写kickstart脚本自动化安装
#version=RHEL8
# 使用图形化安装
graphical
# 设置AppStream仓库地址
repo --name="AppStream" --baseurl=http://192.168.91.128/pub/AppStream
%packages
# 安装图形化服务器环境
@^graphical-server-environment
# 安装kexec-tools(一个内核跳跃工具,用于快速重启)
kexec-tools
%end
# 键盘布局设置,使用美国英语布局
keyboard --xlayouts='us'
# 设置系统语言为英语
lang en_US.UTF-8
# 网络配置:使用DHCP获取IP,网络接口为ens160,启用该网络设备
network --bootproto=dhcp --device=ens160 --activate
# 设置主机名为localhost.localdomain
network --hostname=localhost.localdomain
# 使用HTTP源安装,指定镜像地址
url --url=http://192.168.91.128/pub
# 启用首次启动配置界面
firstboot --disable
# 忽略不需要的磁盘,仅使用sda磁盘进行安装
ignoredisk --only-use=sda
# 磁盘清理配置,清除磁盘的分区表
clearpart --none --initlabel
# 磁盘分区配置:创建/boot分区,大小476MB,文件系统类型为xfs
part /boot --fstype="xfs" --ondisk=sda --size=476
# 创建物理卷,大小40GB,文件系统类型为LVM物理卷
part pv.01 --fstype="lvmpv" --ondisk=sda --size=40960
# 创建卷组vg0,大小为40GB,物理卷为pv.01
volgroup vg0 --pesize=4096 pv.01
# 创建交换分区swap,大小2GB
logvol swap --fstype="swap" --size=2048 --name=swap --vgname=vg0
# 创建/home分区,大小5GB,文件系统为xfs
logvol /home --fstype="xfs" --size=5120 --name=home --vgname=vg0
# 创建根分区/,大小20GB,文件系统为xfs
logvol / --fstype="xfs" --size=20480 --name=root --vgname=vg0
# 设置系统时区为上海,并使用UTC时间
timezone Asia/Shanghai --isUtc --nontp
# 设置root用户的密码(加密后的密码)
rootpw --iscrypted $6$.ANlyFMKUG1Nm37E$2Rut/R0y/iT43Dl63ReTUmkiB7BlaQq5bIqSEIPQLddQfAl1V/1qjwQTrnf7Iu0msBuTdfItFICUAD.p.62yQ/
%addon com_redhat_kdump --enable --reserve-mb='auto'
# 启用kdump并自动保留内存
%end
%anaconda
# 密码策略:root用户密码最小长度为6,密码强度要求为1(较弱)
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
# 用户密码策略:最小长度为6,密码强度要求为1
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
# LUKS加密密码策略:最小长度为6,密码强度要求为1
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
#系统安装后配置
%post
cat > /etc/yum.repos.d/dvd.repo <<END
[BaseOS]
name=CentOS8 BaseOS
baseurl=http://192.168.8.108/pub/BaseOS
gpgcheck=0
[AppStream]
name=CentOS8 AppStream
baseurl=http://192.168.8.108/pub/AppStream
gpgcheck=0
END
%end
bootloader --append="console=ttyS0"
设置密码这里可以这样做
使用 openssl 生成 SHA-512 加密密码:
openssl passwd -6
$ openssl passwd -6
Password:
Verifying - Password:
$6$z5x2/6xN$3XTX56zMwTyv0Nq4AK9O2pF9U0nox0xkK2odC6YhI8Hio5mEKp9xPb1aX5jRHlWqQEOyFUqf/OBUyXwGkBJK0
标签:--,192.168,服务器,DHCP,dhcp,OS,PXE,客户端
From: https://www.cnblogs.com/cloudwangsa/p/18555592