DHCP介绍和PXE安装

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43058911/article/details/102601233

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

猜你喜欢

转载自blog.csdn.net/qq_43058911/article/details/102601233