21 Linux-网络基础-DHCP服务

21 Linux-网络基础-DHCP服务

21.1 DHCP 简介

DHCPDynamic Host Configuration Protocol ,动态主机配置协议)是一个 工作在应用层的 局域网网络协议, 数据传输时 使用 UDP 不可靠传输 协议工作,

通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配 网络资源 ,使网络环境中的主机 能 动态的获得 IP 地址、 Gateway 地址、 DNS 服务器地址等信息,并能够提升地址的使用率 。

21.2 DHCP 工作原理(租约四部曲+续租)

image-20210817102754690

动态主机设置协定(DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议。在IP网络中,每个连接Internet的设备都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台计算机移到网络中的其它位置时,能自动收到新的IP地址。

DHCP使用了租约的概念,或称为计算机IP地址的有效期。租用时间是不定的,主要取决于用户在某地联接Internet需要多久,这对于教育行业和其它用户频繁改变的环境是很实用的。通过较短的租期,DHCP能够在一个计算机比可用IP地址多的环境中动态地重新配置网络。DHCP支持为计算机分配静态地址,如需要永久性IP地址的Web服务器。

21.2.1 DHCP 客户端进行 IP 请求

当一个DHCP 客户机启动时,会自动将自己的 IP 地址 配置 成 0.0.0.0 ,由于使用 0.0.0. 0 不能进行正常通信,所以客户机就必须通过 DHCP 服务器来获取一个合法的地址。由于客户机不知道 DHCP 服务器的 IP 地址。

所以它 使用 0.0.0.0 的地址作为源地址,使用 255.255.255.255 作为目标地址,使用 UDP 67 端口作为目的端口来广播请求 IP 地址信息。 广播信息 DHCP Discover 中包含了 DHCP 客户机的 MAC 地址和计算机名,以便使 DHCP 服务器能确定是哪个客户机发送的请求。

21.2.2 DHCP 服务器响应请求

当DHCP 服务器接收到客户机请求 IP 地址的信 息时 ,它 就在自己的 IP 地址池中查找是否有合法 的 IP 地址提供给客户机。如果有, DHCP 服务器就将此 IP 地址做上标记,加入到 DHCP OFFER 的消息中,然后 DHCP 服务器就广播一则包括下列信息的 DHCP OFFER 消息:

DHCP客户机的 MAC 地址; DHCP 服务器提供的合法 IP 地址;子网掩码;默认网关(路由);租约的期限; DHCP 服务器的 IP 地址 MAC 。

因为DHCP 客户机还没有 IP 地址,所以 DHCP 服务器使用自己的 IP 地址作为源地址,使用 255.255.255.255 作为目标地址,使用 UDP 68 端口作为 源 端 口 来广播 DHCP OFFER 信息

21.2.3 DHCP 客户机选择 IP

DHCP客户机从接收到的第一个 DHCP OFFER 消息中选择 IP 地址,发出 IP 地址的 DHCP 服务器将该地址保留,这样该地址就不能提供给另一个 DHCP 客户机。当客户机从第一个 DHCP 服务器接收 DHCP OFFER 并选择 IP 地址后, DHCP 租约的第三过程发生。客户机将 DHCP REQUEST 消息广播到所有的 DHCP 服务器,表明它接受提供的内容。 DHCP REQUEST 消息包括为该客户机提供 IP 配置的服务器的服务标识符( IP 地址)。

DHCP 服务器查看 服务 器标 识符字段,以确定它自己是否被选择为指定的客户机提供 IP 地址,如果那些 DHCP OFFER 被拒绝, 则 DHCP 服务器会取消提供并保留其 IP 地址以用于下一个IP 租约请求。

在客户机选择IP 的过程中,虽然客户机选择了 IP 地址,但是还没有配置 IP 地址,而在一个网络中可能有几个 DHCP服务器,所以 客户机仍然使用 0.0.0.0 的地址作为源地址,使用 255.255.255.255 作为目标地址,使用UDP 67 端口作为目的端口来广播 DHCP REQUEST 信息

21.2.4 DHCP 服务器确认租约

服务器确认租约:DHCP ACK

DHCP服务器接收到 DHCP REQUEST 消息后,以 DHCPACK 消息的形式向客户机广播成功的确认,该消息包含有 IP 地址的有效租约和其他可能配置的信息。虽然服务器确认了客户机的租约请求,但是客户机还没有收到服务器的 DHCPACK消息,所以 服务器仍然使用自己的 IP 地址作为源地址,使用 255.255.255.255 作为目标地址,使用 UDP 68 端口作为 源端口来广播 DHCP ACK 信息。 当客户机收到 DHCP ACK 消息时,它就配置了 IP 地址,完成了 TCP/IP 的初始化。

服务器拒绝租约:DHCP NACK(DHCP NAK)

如果DHCP REQUEST 不成功,例如客户机试图租约先前的 IP 地址,但该 IP 地址不再可用,或者因为客户机移到其他子网,该 IP 无效时, DHCP 服务器将广播否定确认消息 DHCP NA C K 。当客户机接收到不成功的确认时,它将重新开始 DHCP租约过程。

 

注1:如果DHCP客户机无法找到DHCP服务器,它将从TCP/IP的B类网段169.254.0.0/16中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与DHCP服务器进行通讯,一旦与DHCP服务器取得联系,则客户机放弃自动配置的IP地址,而使用DHCP服务器分配的IP地址。

注2:DHCP客户机收到DHCP服务器回应的ACK报文后,通过地址冲突检测(arp)发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送DECLINE报文,通知服务器所分配的IP地址不可用。

21.2.5 DHCP 客户机续租

image-20210817102811539

DHCP客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP 服务器发送 DHCP REQUEST 消息包。如果客户机接收到该服务器回应的 DHCP ACK 消息包,客户机就根据包中所提供的新的租期以及其它已经更新的 TCP/IP 参数,更新自己 的配 置, IP 租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的 IP 地 址,因为当前租期还有50% 。

如果在租期过去50% 的时候没有更新,则 DHCP 客户机将在租期过去 87.5% 的时候再次向为其提供 IP 地址的 DHCP 服务器联系。如果还不成功,到租约的 100% 时候, DHCP 客户机必须放弃这个 IP 地址,重新申请。 如果此时无 DHCP 服务器可用, DHCP 客户 机会使用 169.254.0.0/16 中随机的一个地址,并且每隔 5 分钟再进行尝试。

21.3 DHCP 服务 搭建

21.3.1 准备 实验 环境

两台机器,网络连接模式设为自定义VMnet*模式,先关闭服务器和客户机上的防火墙和SELinux

21.3.2 DHCP 相关 信息

软件名:

dhcp            # DHCP服务软件包
dhcp-common # DHCP命令软件包(默认已安装)

服务名:

dhcpd       # DHCP服务名
dhcrelay # DHCP中继服务名

端口号:

udp 67      # 作为客户端的目标端口,接收客户端的请求DHCP请求
udp 68 # 作为服务器的源端口,用来向客户端回复数据包

配置文件:

dhcpd /etc/dhcp/dhcpd.conf          # 此配置文件默认是空的,需要找模板文件重新生成
dhcpd.conf.sample /usr/share/doc/dhcp-4.*.*/dhcpd.conf.sample # DHCP的模板配置文件

dhcrelay /etc/sysconfig/dhcrelay # 该文件时中继配置文件,中继实验中用到

21.3.3 DHCP 配置文件详解

subnet 192.168.88.0 netmask 255.255.255.0{ #声明要分配的网段和子网掩码
range 192.168.88.3 192.168.88.254; #声明可用IP地址池
option domain-name "atguigu.com" ; #设置DNS域
option domain-name-servers 8.8.8.8 ; #设置DNS服务器地址
option routers 192.168.88.2; #默认网关的地址
option broadcast-address 192.168.88.255; #广播地址(可不写)
default-lease-time 600; #默认租约(s)
max-lease-time 7200; #最大租约(s)

21.4 DHCP 实验 部署

21.4.1 DHCP 基本 功能实验

1)生成配置文件

cp -a /usr/share/doc/dhcp-4.*.*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

2)修改配置文件

将配置文件的前几个subnet声明注释掉。修改最后一个subnet声明

注:注意配置文件中每行结尾的分号和结束大括号,

subnet 192.168.88.0 netmask 255.255.255.0{
range 192.168.88.3 192.168.88.254;
option domain-name "atguigu.com" ;
option domain-name-servers 8.8.8.8 ;
option routers 192.168.88.2;
option broadcast-address 192.168.88.255;
default-lease-time 600;
max-lease-time 7200;

3)重启服务

service dhcpd start

4)重启客户机的网卡

ifdown eth0;ifup eth0

21.4.2 保留地址(固定地址分配)

1)获取客户端的mac地址

arp -a # 查看客户机的mac地址

2)修改/etc/dhcp/dhcpd.conf文件

	host fantasia{
hardware ethernet mac地址; # 客户机的mac地址
fixed-address IP地址; # 固定分配给客户机的ip地址(可以使用地址池以外的IP)

3)重启DHCP服务

service dhcpd restart

4)重启客户机网卡验证IP获取是否成功

ifdown eth0;ifup eth0

21.4.3 超级作用域(同一局域网)

1)超级作用域介绍

DHCP服务器可为单个物理网络上的客户端提供多个作用域租约地址

image-20210820134158368

2)实验环境准备

三台虚拟机同一网络模式,一个DHCP服务器,两个客户机

3)实验步骤

设置DHCP服务器的单臂路由所需子网卡:

cp -a ifcfg-eth0 ifcfg-eth0:0 #编辑此文件,修改网卡名和IP地址即可

开启路由转发:

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #此选项修改为1即可

sysctl -p #刷新内核参数配置文件

修改/etc/dhcp/dhcpd.conf文件

#之前的网段声明和主机声明全都注释掉!
shared-network public {
subnet 192.168.88.0 netmask 255.255.255.0{
option routers 192.168.88.10;
range 192.168.88.100 192.168.88.100;}
subnet 192.168.99.0 netmask 255.255.255.0{
option routers 192.168.99.10;
range 192.168.99.100 192.168.99.110;}

重启DHCP服务

service dhcpd restart

分别重启两台机器的网卡,查看获取的地址

ifdown eth0;ifup eth0

21.4.4 DHCP中继

1)DHCP中继介绍

DHCP Relay(DHCPR)DHCP中继是一个小程序,可以实现在不同子网和物理网段之间处理和转发dhcp信息的功能。

image-20210820134626996

2)实验环境准备

注:关闭所有防火墙:iptables、SELinux

DHCP服务器:
eth0(192.168.10.10) VMnet10
DHCP中继:
eth0(192.168.10.20) VMnet10
eth1(100.100.100.20) VMnet11
外网客户机:
eth0(IP地址自动获取) VMnet11

3)配置DHCP服务器

软件安装:

yum -y install dhcp

修改/etc/dhcp/dhcpd.conf文件:

#声明两个subnet,其他无关可以不做操作或删除
subnet 192.168.10.0 netmask 255.255.255.0 { #实验中并未用到该地址池分配IP
range 192.168.10.100 192.168.10.110;
option routers 192.168.10.20;

subnet 100.100.100.0 netmask 255.255.255.0 {
range 100.100.100.100 100.100.100.110;
option routers 100.100.100.20;

重启dhcpd服务:

service dhcpd start

指定网关:

只能中继器的内网IP为网关地址

4)配置DHCP中继服务器

网卡配置

一块网卡ip=192.168.10.20
一块网卡ip=100.100.100.20

软件安装

yum -y install dhcp

修改中继配置文件

vim /etc/sysconfig/dhcrelay
INTERFACES=“eth0 eth1”
DHCPSERVERS=”192.168.10.10”

开启路由转发

vim /etc/sysctl.conf
netipv4.ip_forward = 1

sysctl -p

重启中继服务

service dhcrelay start

5)测试外网主机

重启网卡 ifdown ifup ifconfig

6)拓展实验

image-20210820134429861

注:此图和实验规划有所区别,实验规划只是用一台测试机,此图使用了两台

posted @ 2021-08-24 15:15  孤独的小人物  阅读(124)  评论(0编辑  收藏  举报