Linux 的 PXE 与 UEFI PXE 依赖服务器配置
PXE(preboot execute environment)是一个 C/S 模式,是以工作站通过网络远程服务器下载映像,通过网络来批量部署系统。
一. PXE 原理过程
客户端 PXE 网卡启动 –> 通过 Bootp 协议广播 dhcp 请求 –> DHCP 服务器 –> 获取 IP,TFTP 服务器地址 –> 从 TFTP 服务器下载boot/{vmlinuz,initrd.img};或者读取 NFS 文件共享服务器共享boot目录 –> 启动系统 –> 到制定 url 去下载 ks.cfg 文件 –> 根据(ks.cfg 文件去 NFS/HTTP/FTP服务器自动下载软件包)安装系统 –> 完成安装
- 原理过程
支持来自网络中远程服务器上的操作系统的启动过程启动过程中,终端会要求 DHCP 服务器分配 IP 地址,然后使用 TFTP/FTP 或者 MTFTP(multicast trivial file transfer protocol)协议下载启动软件包(initramfs.img、vmlinuz)到本机内存中并执行,由这个启动软件包终端基本软件设置,从而引导预先安装在服务器中的终端操作系统映像。
- FTP 协议与 TFTP 协议对比
FTP:文件传输协议,可以应用在任意大于两台主机的环境下使用,FTP 不仅是协议,也是一个应用程序。
TFTP:简单文件传输协议,是 FTP 的简化版。应用场景:只有你知道“确切的文件名”与“确定的位置”才可以选择使用 TFTP。
- FTP 是完整、面向会话、常规用途是文件传输协议。TFTP 是用作特殊目的文件传输协议。
- 交互使用 FTP 协议,TFTP 仅允许单向传输的文件。
- FTP 提供身份验证,TFTP 不提供身分验证。
- FTP 使用以 TCP 的端口:21(控制端口)、20(数据端口,但数据端口不一定是20端口,这和FTP应用模式有关。如果是主动模式,21号是数据端口;如果为被动模式,由服务器端和客户端协商决定 “FTP Port模式”与“FTP Passive模式”);TFTP 是使用 UDP 端口的 69 号端口进行文件传输。
- FTP 依赖于 TCP 协议,是面向连接并提供可靠的控件。TFTP 依赖 UDP 协议,为了减小开销,几乎不提供空间。
二. PXE 服务器搭建
- 基础环境需求
搭建 pxe 服务器环境需要有:一个 DHCP 服务器、TFTP/FTP 服务器和一个文件服务器(文件服务器可以是:ftp服务器、http服务器、nfs等文件服务器)。并且需要在客户机的固件、网卡支持这样的服务。
- PXE 启动过程
- 调整固件配置,设置开机启动项为网络启动。
- 客户机开机进入网络启动模式,此时客户机没有 IP 地址需要发送广播报文(PXE 网卡内置了 DHCP 客户端程序),在同一局域网内服务器端,DHCP 服务器响应客户端请求,分配给客户端相应的 IP 地址与掩码等信息。
- 客户端得到 IP 地址后,与 tftp 通信,下载启动软件包与启动配置文件。
- NFS 文件共享服务器提供文件共享的目录boot、LiveOS目录。
部署各服务器
一. 部署 TFTP 服务器
- 安装 tftp、xinetd
# fedora,Centos
dnf install tftp xinetd tftp-server
- 配置、测试 TFTP
# 配置 TFTP
vim /etc/xinetd.d/tftp
# TFTP 服务器默认的根文件路径:“/var/lib/tftpboot”
# 关闭防火墙、启用服务
/etc/init.d/iptables stop # 关闭防火墙
systemctl restart xinetd # 重启 xinetd 服务,因为
# TFTP 服务受控于xinetd
# xinetd是管理服务的服务
# 是不需要端口的
systemctl enable tftp # 开机自启
systemctl restart tftp # 重启服务
# 验证 TFTP 服务是否起来
netstat -nlp | grep 69
# 若出现以下信息则代表已启动
udp 0 0.0.0.0.0:69 0.0.0.0:*
# 设置服务开机自动运行级别
chkconfig --livel 345 xinetd on
chkconfig --livel 345 tftp on
# 测试 TFTP 服务器
cd /var/lib/tftpboot
touch test_tftpboot.txt
cd # 回到家目录
# 进入 tftp: tftp localhost;tftp “ip地址 DHCP 服务器配置文件指定的”
tftp> get tftp_tftpboot.txt
tftp> quit
ls -al tftp_tftpboot.txt # 查看是否获取到tftp_tftpboot.txt文件
二. 部署 DHCP 服务器
DHCP 使用 UDP 的67号端口,运行原理:请求DHCP服务器、提供IP地址、选择IP地址、IP地址提供确认、重新租约、更新租约。
DHCP客户 DHCP服务器
->IP租用请求->
<-IP租用提供<-
->IP租用选择->
<-IP租用确认<-
#1. 第一步请求DHCP服务器
客户端在局域网广播发送 DHCP discovery包,寻找DHCP服务器,
即向255.255.255.255发送特定的广播信息,每一台安装了
TCP/IP协议的主机都会有这个广播地址,但只有DHCP服务器才会做出回应
#2. 第二步提供IP地址
服务器收到DHCP discovery包后,向客户机发送一个包含分配
的IP地址和其它设置的 DHCP offer 包,目的告诉客户机,我能
为你提供IP地址。
#3. 第三步选择IP地址
客户机收到DHCP offer提供信息包后,(如果客户机在一段时间
内没有接收到DHCP服务器发出dhcp offer包,则会重新
发送dhcp discover。如果广播区域内不止一台dhcp服务器,
则由客户机决定使用哪个)客户机选择第一个接收到的提供信息包,
以广播的方式再发送一个DHCP request请求信息包,
客户机向服务器请求IP地址。
#4. 第四步提供IP地址确认
服务端收到客户机回应的DHCP request 请求信息包之后,便向
客户机发送一个DHCP ack 确认信息包,告诉客户机可以使用
它提供的IP地址。
#5. 第五步重新登陆
以后DHCP客户机每次使用此IP地址时,就不需要再发送DHCP discovery包了,
而是直接发送一个包含前一次所分配的IP地址的DHCP request请求
信息。当DHCP服务器收到这一信息以后,它会继续让客户机
使用此IP地址,并回答一个DHCP ack确认信息。如果此IP地址
已无法再分配给原来的客户机使用时,则DHCP服务器给客户机回答
一个DHCP nack否认信息。当原来的客户机收到此DHCP nack否认
信息后,它就必须重新发送DHCP discovery寻找信息来请求新的IP地址。
#6. 第六步更新租约
DHCP服务器向客户机出租的IP地址都有一个租借期限,期满后DHCP
服务器便会收回出租的IP地址。如果客户机要延长其IP租约,必须
更新其IP租约。客户机启动时和IP租约期限过一半时,
客户机都会自动向DHCP服务器发送更新其IP租约的信息。
- 安装 dhcp
dnf install -y dhcp
- 配置、测试 DHCP
# vim /etc/dhcp/dhcpd.conf
# dhcpd.conf
# 设置租时间、最大租时间
default-lease-time 600;
max-lease-time 7200;
# 定义域名
option domain-name "XXXXX"
# 定义地址池的子网和掩码、定义地址池的大小
subnet 10.1.255.0.0 netmast 255.255.255.0 {
range 10.1.255.10 10.1.255.100;
# 定义引导服务器,即tftp服务器的引导文件和tftp服务器地址
# 注意此处的 filename 是有针对性的,此处的文件只是基于 linux-X86的架构有效
}
简便的方式是设置静态 IP、指定 IP 地址与子网掩码、关闭防火墙、重启 DHCP 服务
# 设置静态 IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROT=static
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
ONBOOT=yes
# 配置 DHCP 服务器
ddns-update-style interim;
allow booting;
allow bootp;
next-server 192.168.1.200;
filename "vmlinuz";
default-lease-time 1800;
max-lease-time 7200;
ping-check true;
subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.210 192.168.1.230;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
}
# 关闭防火墙、重启 DHCP 服务
systemctl stop firewalld
systemctl restart dhcp
# 或者重启 NetworkManager 服务,重启网络服务系统也会重新从 DHCP 服务器重新获取 IP
- 服务端与客户端的测试
#1. 服务器端:
# 在服务器上监听日志:tail -f /var/log/messages
#2. 客户端:
# 打开两个 terminal 去显示网络信息与时实日志信息
# 重启网络:systemctl restart NetworkManager
# 监听日志:tail -f /var/log/messages
# 查看网关:route -n | grep UG
#查看路由: cat /etc/resolv.conf
- 配置好DHCP后,检查、测试网络是否通
#1 使用ifconfig观察本地网络设置是否正确
#2 ping 127.0.0.1来检查本地的TCP/IP协议有没有设置好
ping 127.0.0.1ping的通说明tcp协议栈没有问题
#3 ping本机IP地址,这样是为了检查本机的IP地址是否设置有误
ping 主机地址 ping的通说明网卡没有问题
#4 ping本网网关或本网IP地址来检查硬件设备或者本地网络是否正常,ping的通说明包可以到达路由器
ping 192.168.1.255
#5 ping本地DNS地址,这样做是为了检查DNS是否能够将IP正确解析
ping localhost
#6 ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常
- 可能出现的问题 ping IP :“Destination Host Unreachable”
1、 局域网使用DHCP动态分配IP地址时,DHCP出现故障或者失败
2、 子网掩码设置错误
3、 路由表返回错误信息
- 重启网卡: systemctl restart network
- 关闭 selinux
# 临时关闭selinux:
setenforce 0
# 永久关闭selinux:
vim /etc/selinux/config
SELINUX=disabled # 将enforcing改为disabled
reboot # 重启系统永久生效
三. 部署 NFS 服务器
- NFS 运行机制
NFS是Network File System的缩写,即网络文件系统,一种用于分散式文件系统的协定,功能作用是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据。让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix间实现磁盘文件共享的一种方法。
- RPC 介绍
RPC是Remote Procedure Call,即远程过程调用,是能使客户端执行其他系统中程序的一种机制。NFS在文件传送或信息传送过程中依赖于RPC协议,NFS本身是没有信息传输的协议和功能,但NFS可以通过网络进行资料的分享,这是因为NFS使用了RPC的功能。
- NFS 与 RPC 关系
可以说NFS本身就是使用RPC的一个程序,或者说NFS也是一个 RPC SERVER,所以只要用到NFS的环境系统,不论是NFS SERVER还是NFS CLIENT都要开启RPC服务(通俗的理解其关系:NFS是一个文件系统,而RPC是负责信息的传输)。
- 安装、配置基础环境
# 安装 nfs rpc
dnf install nfs-ttils rpcbind
# 关闭防火墙
systemctl stop firewalld #防止防火墙开机自起:disable
# 关闭 selinux
setenforce 0 #临时关闭SELINUX
getenforce #查看SELINUX是否关闭
- 配置 NFS
cat > /etc/exports << "EOF"
/var/nfs *(ro,no_root_squash)
/var/bm *(rw,no_root_squash)
EOF
mkdir -pv /var/nfs
- 启动 rpc、nfs服务
systemctl restart rpcbind
systemctl restart nfs-service
- 相关命令
- export
-a 重新启动/etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v :在export的时候,将详细的信息输出到屏幕上。
- showmount
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
- rpcinfo
查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些
- selinux三种模式
enforcing ===>强制模式,SELinux已经启动
permissive===>宽容模式,SELinux已经启动,
但不会禁止,只是会提出警告信息
disabled ===>关闭模式,关闭SELinux