版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
DHCP和PXE
DHCP服务
动态主机配置协议
局域网协议
UDP协议
67/udp:server port
68/udp:client port
546/udp:DHCPv6 client
主要用途:
用于内部网络和网络服务供应商自动分配IP地址给用户
用于内部网络管理员作为对所有电脑做集中管理的手段
使用场景:
自动化安装系统
解决IPV4资源不足问题
DHCP软件包:dhcp
主配置文件:/etc/dhcp/dhcpd.conf,默认此文件是空的,里边注释内容写了参考/usr/share/doc/dhcp*/dhcpd.conf.example
存放租约等信息:/var/lib/dhcpd/dhcpd.leases
DHCP共有八种报文:
DISCOVER:客户端到服务器
OFFER:服务器到客户端
REQUEST:客户端到服务器
ACK:服务器到客户端
NAK:服务器到客户端,通知用户无法分配合适的IP地址
DECLINE:客户端到服务器,指示地址已被使用
RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
INFORM:客户端到服务器,客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送inform报文向服务器请求,极少用到
续租:
%50:租赁时间达到%50时来续租,刚想DHCP服务器发向新的DHCPREQUEST请求,如果DHCP服务没有拒绝的理由,则回应ACK信息,当DHCP客户端收到该应答消息后,就重新开始新的租用周期
%87.5:如果之前DHCP server没有回应续租请求,等到租约的7/8时,主机会再发送一次广播请求,查看网络中是否还有其他服务器
同网段多DHCP服务:
DHCP服务必须基于本地
先到先得的原则
跨网段DHCP服务
1、基于DHCP代理,申请时由代理跨网段获取,DHCP服务器将地址交给代理服务器,然后代理在交给申请客户机
2、路由器支持RFC 1542 Compliant Routers 标准协议,有此功能
相关的协议有:ARP、RARP
搭建一个DHCP服务器:
1、在默认DHCP服务主配置文件中有注释信息提醒参考/usr/share/doc/dhcp*/dhcpd.conf.example文件,可以将它认为就是DHCP的主配置文件
我们将/usr/share/doc/dhcp*/dhcpd.conf.example覆盖原有配置文件
cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
2、编辑配置文件添加或修改以下内容
vim /etc/dhcp/dhcpd.conf
subnet 192.168.40.0 netmask 255.255.255.0 { :声明为哪个网段分配IP
range 192.168.40.100 192.168.40.200; :地址池,IP起始和IP终止
option broadcast-address 192.168.40.255; :广播地址
option routers 192.168.40.1; :网关
option domain-name-servers 8.8.8.8,114.114.114.114; :DNS
filename "pxelinux.0"; :指明自动化安装系统的引导文件
name-server 192.168.40.5; :通过哪台主机获取引导文件
}
我们要自动化安装系统还需要两个挂件的配置:
filename:指明引导文件的名称
next-server:提供引导文件的服务器IP地址
重启服务
systemctl restart dhcpd
测试:将客户机网卡配置文件修改为自动获取IP地址,接着重启网络服务,正常就可以获取到IP
PXE:预启动执行环境
基于C/S的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统
PXE可以引导和安装win,Linux等多种操作系统
PXE安装时依赖DHCP服务的
在centos7中基于PXE自动安装系统
1、安装相关包
yum install dhcp httpd tftp-server syslinux system-config-kickstart(制作应答文件软件包,也可以使用系统自带的anaconda应答文件进行修改)
systemctl enable httpd tftp dhcpd
2、搭建网络yum源
systemctl start httpd
mkdir -p /var/www/html/centos/{7,6}/os/x86_64
mount /data/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos/7/os/x86_64
永久挂载写入/etc/fstab文件中
3、准备KS应答文件
mkdir /var/www/html/ksdir
cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7-mini.cfg :使用系统自带的应答文件,然后进行修改
chmod +r /var/www/html/ksdir/ks7-mini.cfg :默认文件不允许任何人读,需要修改权限
vim /var/www/html/ksdir/ks7-mini.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url=http://192.168.40.5/centos/7/os/x86_64/ :通过网络安装包,指定yum源
# Use graphical install
text :文本安装
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda :安装到sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate :网卡设置
network --hostname=centos7.localdomain :主机名
# Root password
rootpw --iscrypted $6$/VngtJ0SJb0qpdsL$0EWpDB/f0Q4KMWbBMxj.B0MvdNHQgDrFPkT76mNUOLKs
Jk8TrfK4foVMNgsBIJj5Z5nfGBsCzVpbRtJb9QjKH1 :密码123123
# System services
services --disabled="chronyd"
firewall --disabled :防护墙关闭
selinux --disabled :selinux关闭
# System timezone
timezone Asia/Shanghai --isUtc --nontp :时区
user --name=cheng --password=$6$knE.6xU99BBQLBqr$Dw9YRM/04Xns6kL/.3iOojhxQ9j72n0VeI
d0tMgrPolTCDtUyxqaWjl29czxBeRp8QMgj.LksIDmXM01L1SzD1 --iscrypted --gecos="cheng" :普通用户
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel :初始化所有分区
zerombr :初始化MBR,清空重新恢复
reboot :装完后重启
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=1024
part / --fstype="xfs" --ondisk=sda --size=148478
part swap --fstype="swap" --ondisk=sda --size=4096
part /data --fstype="xfs" --ondisk=sda --size=51200
# 以下是需要安装的软件包
%packages
@core :基础包组
@base
tree
nmap
sysstat
lrzsz
dos2unix
%end
%post
此处可写脚本,安装时自动跑脚本
%end
修改完成后检查应答文件是否语法错误
ksvalidator /var/www/html/ksdir/ks-mini.cfg
4、DHCP配置
subnet 192.168.40.0 netmask 255.255.255.0 { :网段
range 192.168.40.100 192.168.40.200; :地址池
option routers 192.168.40.1; :网关
option domain-name-servers 8.8.8.8,223.5.5.5; :DNS
next-server 192.168.40.5; :TFTP服务器地址
filename "pxelinux.0"; :引导计算机的文件,作用类似grub,此文件需要放到TFTP服务器数据目录下
}
5、准备各个文件
pxelinux.0文件来自syslinux这个包,没有就安装
cp /usr/share/syslinux/{menu.c32,pxelinux.0} /var/lib/tftpboot/ :menu.c32是一个选择操作系统时的蓝色背景
在当前光盘中将内核文件vmlinuz和加载跟分区信息文件initrd.img拷贝到TFTP服务器目录下
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/ :注意,虽然是.cfg结尾,但是是一个文件夹,用来存放启动菜单
将启动菜单拷贝到TFTP服务器目录下,并且改名叫default
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
copy过来5个文件一个目录
[root@centos7_1 ~]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
6、 修改启动菜单:
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 100
menu title PXE Install Mini CentOS 7
menu separator # insert an empty line
label linux
menu default
menu label ^Auto Install Mini CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.40.5/ksdir/ks7-mini.cfg :应答文件路径
label local
menu label Boot from ^local drive
localboot 0xffff
centos7自动化安装默认最小内存1280M
在一台设备上实现PXE安装centos6和7,在上面自动安装centos7的基础上做修改添加:
1、首先确保服务都启动着
2、在以上基础上再将centos6的光盘映像文件挂载至某一目录
mount /data/CentOS-6.10-x86_64-bin-DVD1.iso /var/www/html/centos/6/os/x86_64 :在生产中公司可能是自己的镜像文件
使用浏览器测试是否能访问该目录
3、准备centos6的应答文件
cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks-mini.cfg :使用系统自带的应答文件,然后进行修改
chmod +r /var/www/html/ksdir/ks-mini.cfg :默认文件不允许任何人读,需要修改权限
vim /var/www/html/ksdir/ks7-mini.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
url --url http://192.168.40.5/centos/6/os/x86_64
lang en_US.UTF-8
keyboard us
text
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$YExHfB7XR1W80P//$FzufnRklnoq86xI5XbKwcvaMyzbisy3dNd3b/z6o060
6x5WjUqKxjWw.kZENugByx7j4ocwNM5d7p8YDwZHMJ1
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhg
b quiet"
clearpart --all
zerombr
reboot
part /boot --fstype=ext4 --size=1024
part swap --size=4096
part / --fstype=ext4 --grow --size=200
%packages
@core
tree
nmap
sysstat
lrzsz
dos2unix
%end
修改完成后检查应答文件是否语法错误
ksvalidator /var/www/html/ksdir/ks-mini.cfg
使用浏览器测试是否能访问该文件
4、将两个版本的vmlinuz,initrd.img文件分开放
mkdir linux{6,7}
mv vmlinuz initrd.img linux6
mv vmlinuz initrd.img linux7 :注意两个内核文件不要搞错,
5、查看:[root@centos7_1 tftpboot]#tree .
├── linux6
│ ├── initrd.img
│ └── vmlinuz
├── linux7
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
3 directories, 7 files
将启动菜单文件修改
default menu.c32
timeout 100
menu title PXE Install Mini CentOS 7
menu separator # insert an empty line
label linux
menu label ^Auto Install Mini CentOS 7
kernel linux7/vmlinuz :注意这里的路径要写对
append initrd=linux7/initrd.img ks=http://192.168.40.5/ksdir/ks7-mini.cfg :initrd=linux7/initrd.img路径写对
label linux
menu label ^Auto Install Mini CentOS 6
kernel linux6/vmlinuz :注意这里的路径要写对
append initrd=linux6/initrd.img ks=http://192.168.40.5/ksdir/ks6-mini.cfg :initrd=linux7/initrd.img路径写对
label local
menu default
menu label Boot from ^local drive
localboot 0xffff