菜单
本页目录

4 网络服务-DHCP

可实现批量安装系统

1 概念

​ 应用层,局域网网络协议

​ UDP不可靠传输协议,在局域网中

2 工作原理

image-20221015235829891

注意:

1)若客户机无法找到DHCP服务器,则TCP/IP的B类网段169.254.0.0/10中挑选一个,临时使用,继续每个5min尝试与dhcp服务器通讯

2)客户端有冲突检测(arp解析)

3 DHCP服务搭建

1)环境

(至少两台机器,仅主机模式)

关防火墙、关selinux、关VMware软件中的dhcp

2)DHCP相关信息

软件名:

dhcp(dhcp服务软件包)
dhcp-common(dhcp命令软件包,默认存在)

端口号:

udp	67				#客户端访问端口
udp	68				#客户端源端口,接收服务器恢复的数据包

配置文件:

/etc/dhcp/dhcpd.conf										#默认为空、需找模板文件重新生成
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example				#dhcp模板配置文件
[root@localhost ~]# grep -A9 "subnet 10.5.5.0 netmask" /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
subnet 10.5.5.0 netmask 255.255.255.224 {					#声明分配的网段和子网掩码
  range 10.5.5.26 10.5.5.30;								#声明可用IP地址池
  option domain-name-servers ns1.internal.example.org;		#设置DNS地址
  option domain-name "internal.example.org";				#设置DNS域
  option routers 10.5.5.1;									#默认网关地址
  option broadcast-address 10.5.5.31;						#广播地址(可不写)
  default-lease-time 600;									#默认租约(秒)10min
  max-lease-time 7200;										#最大租约(秒)2h
}

3)实验

实验一:搭建dhcp服务器

客户端

改网卡为dhcp自动获取ip、ifdown关闭网卡,等待dhcp服务端配置成功再 ifup开启网卡

dhcp服务端

		yum安装dhcp
		利用dhcp模板配置文件生成	/etc/dhcp/dhcpd.conf		并修改配置文件,删除全局配置,仅设置局部配置
		重启服务、检查端口、查看日志
[root@localhost dhcp]# cp -a /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf 			#根据dhcp模板文件生成配置文件
cp:是否覆盖"./dhcpd.conf"? y
[root@localhost dhcp]# 
[root@localhost dhcp]# vim ./dhcpd.conf 														#编辑配置文件
[root@localhost dhcp]# grep -A7 "subnet 192.168.18.0 netmask 255.255.255.0" ./dhcpd.conf
subnet 192.168.18.0 netmask 255.255.255.0 {
  range 192.168.18.220 192.168.18.249;
  option domain-name-servers 114.114.114.114,8.8.8.8;
  option routers 192.168.18.2;
  default-lease-time 600;
  max-lease-time 
[root@localhost dhcp]# systemctl restart dhcpd					#重启服务
[root@localhost dhcp]# netstat -tlunp |grep dhcpd				#检查端口
udp        0      0 0.0.0.0:67              0.0.0.0:*                           38384/dhcpd

客户端ifup启用网卡配置,服务端检查日志,验证dhcp租约过程:

image-20221016004104744

实验二:保留地址池(固定地址分配)

服务端

	1)	获取客户端mac地址
			arp	-a		#查看客户机mac地址
	2)	修改/etc/dhcp/dhcpd.conf文件

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf				#修改配置文件,以mac地址固定IP地址分配
[root@localhost ~]# 
[root@localhost ~]# grep -a3 "hardware" /etc/dhcp/dhcpd.conf
# will still come from the host declaration.

host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}
--
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host VIP {
  hardware ethernet 00:0C:29:DB:40:2C;
  fixed-address 192.168.18.222;
}
[root@localhost ~]# systemctl restart dhcpd				#重启服务时配置文件生效

服务端检查日志、客户端重启网卡验证

image-20221016005902580

实验三:单臂路由

image-20221019164309819

注意:(一个接口实现不同网段客户端通信)

给路由的一个端口设置两个不同网段的IP地址

步骤:

前提:都为vmnat8,在vmnat8中添加88、99网段

客户端1 ens33 192.168.88.110

路由端		ens33	  192.168.88.120
		  ens33:0	192.168.99.120
		  打开路由转化开关:		
		  			/etc/sysctl.conf	中添加	net.ipv4.ip_forward=1
					sysctl	-p			#是配置生效

客户端2 ens33 192.168.99.130

![image-20221016013000227](04 网络服务-DHCP.assets\image-20221016013000227.png)

实验四:DHCP中继

服务器和IP地址规划

    7-1			DHCP服务器				
                    vmnat10		ens33		192.168.10.110
                    部署dhcp服务,并添加三个地址池,并分配IP地址、子网掩码、网关、DNS


    7-2			DHCP中继器&路由器
                    vmnat10		ens33		192.168.10.120
                    vmnat11		ens36		192.168.11.120
                    vmnat12		ens37		192.168.12.120

a 开启路由转发功能:

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p

b 部署中继服务,完成广播请求转发

​ yum安装dhcp(其中有dhcrelay)

​ dhcrelay IP #配置中继服务地址转发

        7-3			测试机一
                    vmnat11			ens33		dhcp
        7-4			测试机二
                    vmnat12			ens33		dhcp
#7-1
[root@localhost dhcp]# cp -a /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf 
cp:是否覆盖"./dhcpd.conf"? y
[root@localhost dhcp]# vim ./dhcpd.conf 

[root@localhost dhcp]# grep -A7 "subnet 192.168." ./dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.200 192.168.10.249;
  option domain-name-servers 114.114.114.114,8.8.8.8;
  option routers 192.168.10.120;
  default-lease-time 600;
  max-lease-time 7200;
}

subnet 192.168.11.0 netmask 255.255.255.0 {
  range 192.168.11.200 192.168.11.249;
  option domain-name-servers 114.114.114.114,8.8.8.8;
  option routers 192.168.11.120;
  default-lease-time 600;
  max-lease-time 7200;
}
subnet 192.168.12.0 netmask 255.255.255.0 {
  range 192.168.12.200 192.168.12.249;
  option domain-name-servers 114.114.114.114,8.8.8.8;
  option routers 192.168.12.120;
  default-lease-time 600;
  max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in

[root@localhost dhcp]# systemctl restart dhcpd

#7-2
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# tail -n1 /etc/sysctl.conf 
net.ipv4.ip_forward=1

[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost ~]# dhc
dhclient         dhclient-script  dhcpd            dhcrelay         
[root@localhost ~]# dhcrelay 192.168.10.110
Dropped all unnecessary capabilities.
Internet Systems Consortium DHCP Relay Agent 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/ens37/00:0c:29:9e:ee:c9
Sending on   LPF/ens37/00:0c:29:9e:ee:c9
Listening on LPF/ens36/00:0c:29:9e:ee:bf
Sending on   LPF/ens36/00:0c:29:9e:ee:bf
Listening on LPF/ens33/00:0c:29:9e:ee:b5
Sending on   LPF/ens33/00:0c:29:9e:ee:b5
Sending on   Socket/fallback
[root@localhost ~]# 

#7-3打开网卡验证,同时打开7-1的日志查看

#7-4打开网卡验证,同时打开7-1的日志查看

image-20221016021225329

image-20221016021314299

4 脚本

1)查询某字符串存在的文件位置

1.过滤出普通文件

2.过滤出普通文件的“text”类型文件

3.再通过过滤出的文件,用关键字查找

2)自动生成随机密码

image-20221020143206775

#!/bin/bash
grub2-mkpasswd-pbkdf2
read -p "请复制上面生成的字符串以便生成随机密码:" aa0
read -p "请输入要创建的用户数量:" aa1
read -p "请输入创建用户的名称:" aa2
#read -p "请输入创建用户的默认密码:" aa3
if [ -n "$aa0" -a -n "$aa1" -a -n "$aa2" ];then
	y=$(echo "$aa1" | sed 's/[0-9]//g')
	if [ -n "$y"];then
		for ((i=1;i<="$aa1";i=i+1))
		do
			useradd $aa2$i > /dev/null
			aa3=$(echo "$aa0" |cut -c $i,$(($i+1)),$(($i+2)),$(($i+3)),$(($i+4)),$(($i+5)))
			echo "$aa3" |passwd --stdin $aa2$i
			echo -e "$aa2$i\t的密码是:\t$aa3"	>> /root/passwd.txt
		done
	else
		echo "用户数量请输入数字。"
	fi
else
	echo "您的输入有误。"
fi