Linux网络篇——DHCP服务实现原理,利用原理在虚拟机上构建DHCP服务器

前言

DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段lP地址范围,客户机登录服务器时就可以自动获得服务器分配的lP地址和子网掩码。

一、什么是DHCP

1.1 DHCP概述

​DHCP是一个自动分发IP地址的协议。主要作用于局域网内,如果想要在广域网使用DHCP的功能需要在路由器上进行配置。

​ DHCP种会有地址池,地址池内容是网段或连续IP需要人为设置。

1.2 DHCP的好处

减少管理员的工作量
避免IP地址冲突
当网络更改IP地址时,不需要再重新配置每个用户的IP地址
提高了IP地址的利用率
方便客户端的配置

1.3 DHCP的分配方式

DHCP的典型应用模式
在网络中假设一台专用的DHCP服务器,负责集中分配各种网络地址参数(主要包括IP地址,子网掩码,广播地址,默认网关地址,DNS服务器地址)

其他主机作为DHCP客户机,将网卡配置为自动获取地址,即可与DHCP服务器进行通信,完成自动配置过程

这就产生了三种分配方式:自动分配,手动分配,动态分配

1.3.1 自动分配

自动分配是当DHCP客户机第一次成功的从DHCP服务器获取到一个IP地址后,就永久使用中这个IP地址。

例如:工作环境中,局域网内的打印机、座机

1.3.2 手动分配

由DHCP服务器管理员专门指定的IP地址

1.3.3 动态分配

动态分配是当DHCP客户机第一次从DHCP服务器获取到IP地址后,并非永久的使用该地址,而是在每次使用完成后,DHCP客户机就会释放这个IP地址,供其他客户机使用。

二、DHCP工作原理(租约过程)

客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程

2.1 租约过程分为以下四个步骤:

在这里插入图片描述
1.客户端在局域网中发出广播,称为discover,通过此种方式查看是否有DHCP服务器存在
2.DHCP收到广播后进行回应,但因为不知道客户端的IP地址,所以同样以广播的形式发出的offer(响应,包括有哪些IP地址)响应客户机
3.客户端收到offer后,开始发出request广播请求
4.DHCP收到广播后,再次发出ACK确认广播来回应客户端。

2.2 租约过程详解

2.2.1 客户端广播寻找DHCP服务器(第一阶段)

◆ 当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址

此时DHCP客户机以广播的形式发送DHCP discover来寻DHCP服务器

◆ 因为自己没有IP地址,所以源IP地址为:0.0.0.0
同时也不知道DHCP服务器地址,所以发送广播255.255.255.255
在这里插入图片描述

2.2.2 DHCP响应(第二阶段)

◆ 当与客户机同局域网种的DHCP服务器收到广播后,就会在自己的IP地址池种查找是否由合法的IP地址供给客户机,若有,则DHCP服务器会将此IP地址做上标记,加入DHCP offer的消息中,并且以广播的形式发送一条offer消息。
◆ 此时客户端还未有IP地址,所以发送广播
在这里插入图片描述
在这里插入图片描述

2.2.3 客户机选择IP地址

◆ DHCP客户机从接收到的第一个DHCP的Offer消息中提取IP地址,发出IP地址的
DHCP服务器将该地址保留,这样该地址就不能再分配给另一个客户机
◆ 如果局域网中存在1个以上的DHCP服务器,那么客户机会根据收到DHCP offer的第一顺序来确定使用哪个DHCP服务器的地址
◆ 客户机确认地址后,发送DHCP request广播,选择地址,并附上租约期限信息(默认为8天)
在这里插入图片描述

2.2.4 DHCP确认租约

◆ DHCP服务器确认租约:发送DHCP ACK广播
◆ DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息
◆ 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化
◆ 此时服务器发出的仍旧是广播,因为客户机还没有IP地址

在这里插入图片描述

2.3 租约过程详解

2.3.1 重新登录

◆ DHCP客户机每次重新登录网络时,不需要在发送DHCP的discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息

◆ DHCP服务器收到请求后,检查IP地址资源池

1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机

2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。
在这里插入图片描述

2.3.2 租约更新

◆ 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约
◆ 客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约
如果客户机发送请求更新租约小心时,DHCP服务器宕机,再默认租约期限(8天)到期时,会自动释放地址。然后客户机中的dhcp会自动分配一个169.254.0.0~169.254.255.255网段的地址(此地址无意义,仅为了有IP地址而分配的IP地址)

三、DHCP服务器配置

3.1 使用DHCP动态配置主机地址

DHCP服务:
为大量客户机自动分配地址,提供集中管理

减轻管理和维护成本、提高网络配置效率

可分配的地址信息主要包括:

网卡的IP地址、子网掩码

对应的网络地址、广播地址

默认网关地址

DNS服务器地址

3.2 安装DHCP服务器

DHCP软件包的主要文件:

主配置文件:/etc/dhcpd.conf

执行程序:/usr/sbin/dhcpd/ /usr/sbin/dhcrelay

执行参数配置:/etc/sysconfig/dhcpd

3.21 主配置文件

dhcpd.conf 的内容构成
全局配置:针对整台服务器
subnet网段声明:作用于整个子网,优先级高于全局配置
host主机声明:作用于单个主机,绑定mac地址,指定其ip地址

3.2.4 租约文件

查看租约文件方法:

vim /var/lib/dhcpd/dhcpd.lease

less /var/lib/dhcpd/dhcpd.lease

四、搭建DHCP服务器,给WIN10分配IP(实验)

4.1环境

用一台CentOS7.6搭建DHCP服务,使用另一台WIN10 虚拟机作为服务对象,在安装好DHCP软件后,按照图示更换网络环境

在这里插入图片描述

4.2实验需求

1.验证子网优先级大于全局
2.指定ip到WIN10

4.3实验步骤

1.清空防火墙规则,临时关闭SELINUX,检查dhcp软件包是否安装
在这里插入图片描述
2.由于这里安装完成,直接将网络模式调整为仅主机
在这里插入图片描述

3.vim 指定地址给服务器,避免WIN10 无法定位dhcp服务器
在这里插入图片描述

4.vim /etc/dhcp/dhcpd.conf(打开dhcp主配置文件,cp配置模板路径),将复制的模板文件覆盖到主配置文件
(这里忘记截图了,博主比较懒这里cp一下就好了)
5.!vim,再次打开上次VIm文件,即dhcp主配置文件,找到全局配置,手动定义相关参数

在这里插入图片描述
6.全局模式下配置DNS 8.8.8.8,在子网声明网段、掩码、地址池、网关
在这里插入图片描述
7.wq保存退出,systemctl start dhcp 重启服务,netstat -nuap查看是否开启;打开WIN10,通过ipconfig /release、ipconfig/renew释放获取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.在子网声明DNS为9.9.9.9,在WIN10中验证优先级iponfig /all
在这里插入图片描述
在这里插入图片描述

满足需求一
9.进入配置文件更改主机声明,绑定WIN10 mac地址,指定ip为192.168.100.90
在这里插入图片描述
在这里插入图片描述
满足需求二

五、DHCP中继实验

5.1实验环境

一台三层交换机,一台二层交换机,一台DHCP服务器,两台客户机PC1、PC2,其网络拓扑图如下:
在这里插入图片描述

5.2DHCP中继服务相关配置命令

[SW1]dhcp enable    '开启dhcp服务'
[SW1]int vlan 10    '进入vlanif 10 接口配置'
[SW1-Vlanif10]dhcp select relay     '配置dhcp中继'
[SW1-Vlanif10]dhcp relay server-ip 192.168.100.100     '提供dhcp中继的IP地址为192.168.100.100'

5.3实验需求

两台PC客户机通过DHCP中继服务获取可用IP地址

5.4实验步骤

5.4.1二层交换机SW2配置参数

<Huawei>undo terminal monitor   '关闭终端告警或日志显示'
<Huawei>sys    '进入系统失视图模式' 
[Huawei]sysn SW2      '配置二层交换机名称为SW2'
[SW2]vlan batch 10 20 100     '创建vlan'
[SW2]int e0/0/2     '进入接口' 
[SW2-Ethernet0/0/2]port link-type access    '配置为access口' 
[SW2-Ethernet0/0/2]port default vlan 10    '将接口划入vlan 10'
[SW2-Ethernet0/0/2]q   '退出'
[SW2]int e0/0/3
[SW2-Ethernet0/0/3]port link-type access
[SW2-Ethernet0/0/3]port default vlan 20
[SW2-Ethernet0/0/3]q
[SW2]int e0/0/4
[SW2-Ethernet0/0/4]port link-type access
[SW2-Ethernet0/0/4]port default vlan 100
[SW2-Ethernet0/0/4]q
[SW2]int e0/0/1
[SW2-Ethernet0/0/1]port link trunk
[SW2-Ethernet0/0/1]port trunk allow-pass vlan all
[SW2-Ethernet0/0/1]q

5.4.2三层交换机SW1配置参数

<Huawei>undo terminal monitor     '关闭终端告警或日志显示'
<Huawei>sys      '进入系统失视图模式' 
[Huawei]sysn SW1     '配置二层交换机名称为SW1'
[SW1]vlan batch 10 20 100        '创建vlan'
[SW1]int g0/0/1       '进入接口' 
[SW1-GigabitEthernet0/0/1]port link trunk   '配置为trunk口' 	
[SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan all   
[SW1-GigabitEthernet0/0/1]q
[SW1]int vlan 10
[SW1-Vlanif10]ip add 192.168.10.1 24
[SW1-Vlanif10]q
[SW1]int vlan 20
[SW1-Vlanif20]ip add 192.168.20.1 24
[SW1-Vlanif20]q
[SW1]int vlan 100
[SW1-Vlanif100]ip add 192.168.100.1 24
[SW1-Vlanif100]q
[SW1]dhcp enable    '开启dhcp服务'
[SW1]int vlan 10    '进入虚拟接口vlanif 10'
[SW1-Vlanif10]dhcp select relay    '配置dhcp中继'
[SW1-Vlanif10]dhcp relay server-ip 192.168.100.100    '提供dhcp中继的IP地址为192.168.100.100'
[SW1-Vlanif10]q  '退出'
[SW1]int vlan 20
[SW1-Vlanif20]dhcp select relay
[SW1-Vlanif20]dhcp relay server-ip 192.168.100.100
[SW1-Vlanif20]q
[SW1]int vlan 100
[SW1-Vlanif100]dhcp select relay
[SW1-Vlanif100]dhcp relay server-ip 192.168.100.100
[SW1-Vlanif100]q

5.4.3CentOS 7.6虚拟机DHCP服务的配置参数

'先连接网络(我自己连接的是NAT模式)'
[root@localhost ~]# rpm -q dhcp   '查看有没有安装DHCP软件包'
未安装软件包 dhcp 
[root@localhost ~]# yum -y install dhcp*   '安装DHCP软件包'
'安装dhcp服务后更换VMnet3网卡(仅主机模式)'

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  '进入ens33网卡进行修改'
XY_METHOD=none
BROWSER_ONLY=no
BOOTPRO=static    '启用地址协议设置为static:静态协议'
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3cae1424-fc31-4f04-874b-e2bb66dfc8c1
DEVICE=ens33
ONBOOT=yes      '系统启动时自动加载,改为yes'
IPADDR=192.168.100.100   '设置网卡IP地址'
NETWORK=255.255.255.0    '网卡子网掩码'
GATEWAY=192.168.100.1    '网卡网关地址'
DNS1=8.8.8.8     '域名解析服务地址'
':wq保存退出'
[root@localhost ~]# service network restart   '重启网卡'
Restarting network (via systemctl):                        [  确定  ]
[root@localhost ~]# ifconfig    '查看网卡IP地址是否更改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.100  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::d80b:cb4a:4fe5:254b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f4:24:29  txqueuelen 1000  (Ethernet)
        RX packets 32441  bytes 47757573 (45.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8291  bytes 529703 (517.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        ......
        
[root@localhost ~]# ping 192.168.100.1  '此时可以ping一下网关,可以ping通,Ctrl+C退出'
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=255 time=30.6 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=255 time=41.7 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=255 time=33.3 ms
[root@localhost ~]# ping 192.168.10.1
[root@localhost ~]# ping 192.168.20.1

[root@localhost ~]# cat /etc/dhcp/dhcpd.conf   '查看,复制模板/usr/share/doc/dhcp*/dhcpd.conf.example'
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
......

[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf   '将/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example中内容复制到/etc/dhcp/dhcpd.conf中'
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes

5.6验证需求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此满足实验需求,实验成功

踩坑总结

在做实验时、博主开始忘记关闭VM1网卡自带DHCP服务,在实验过程中WIN10 始终无法获取Linux7.6分配地址。故在虚拟机实验时,有冲突服务,一定要关闭VM自带的服务设置

猜你喜欢

转载自blog.csdn.net/weixin_47219818/article/details/107154690