服务搭建系列(3):DHCP服务配置

服务搭建系列(3):DHCP服务配置

一、DHCP作用

​ DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。

二、DHCP工作原理

DHCP报文种类
报文类型说明
DHCP DISCOVERDHCP客户端首次接入网络时进行DHCP交互过程发送的第一个报文,用来寻找DHCP服务器。
DHCP OFFERDHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。
DHCP REQUEST此报文用于以下三种用途。
客户端初始化后,发送广播的DHCP REQUEST报文来回应服务器的DHCP OFFER报文。
客户端重启后,发送广播的DHCP REQUEST报文来确认先前被分配的IP地址等配置信息。
当客户端已经和某个IP地址绑定后,发送DHCP REQUEST单播或广播报文来更新IP地址的租约。
DHCP ACK服务器对客户端的DHCP REQUEST报文的确认响应报文,客户端收到此报文后,才真正获得了IP地址和相关的配置信息。
DHCP NAK服务器对客户端的DHCP REQUEST报文的拒绝响应报文,例如DHCP服务器收到DHCP REQUEST报文后,没有找到相应的租约记录,则发送DHCP NAK报文作为应答,告知DHCP客户端无法分配合适IP地址。
DHCP DECLINE当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。
DHCP RELEASE客户端可通过发送此报文主动释放服务器分配给它的IP地址,当服务器收到此报文后,可将这个IP地址分配给其它的客户端。
DHCP INFORMDHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP INFORM请求报文。

DHCP服务器首次接入网络的客户端工作流程

DHCP无中继场景时DHCP客户端首次接入网络
第一步:发现阶段

​ 首次接入网络的DHCP客户端不知道DHCP服务器的IP地址,为了学习到DHCP服务器的IP地址,DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。

第二步:提供阶段

​ 与DHCP客户端位于同一网段的DHCP服务器都会接收到DHCP DISCOVER报文,DHCP服务器选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址,然后通过DHCP OFFER报文发送给DHCP客户端。
​ 通常,DHCP服务器的地址池中会指定IP地址的租期,如果DHCP客户端发送的DHCP DISCOVER报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。

第三步:选择阶段

​ 如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符和客户端IP地址。

第四步:确认阶段

​ 当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,DHCP服务器回应DHCP ACK报文,表示DHCP REQUEST报文中请求的IP地址分配给客户端使用。

​ DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。

​ 当DHCP服务器收到DHCP客户端发送的DHCP REQUEST报文后,如果DHCP服务器由于某些原因(例如协商出错或者由于发送REQUEST过慢导致服务器已经把此地址分配给其他客户端)无法分配DHCP REQUEST报文中填充的IP地址,则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配此IP地址。DHCP客户端需要重新发送DHCP DISCOVER报文来申请新的IP地址。

DHCP有中继场景时DHCP客户端首次接入网络

​ 有DHCP中继的场景中,首次接入网络的DHCP客户端和DHCP服务器的工作原理与无中继场景时DHCP客户端首次接入网络的工作原理相同。主要差异是DHCP中继在DHCP服务器和DHCP客户端之间转发DHCP报文,以保证DHCP服务器和DHCP客户端可以正常交互。下面仅针对DHCP中继的工作原理进行介绍。

第一步:发现阶段

DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,进行如下处理:

  1. 检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
  2. 检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
  3. 将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。

如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。

注:hops字段:表示DHCP报文经过的DHCP中继数目。每经过一个中继服务器,该字段加1。服务器和客户端之间的中继服务器不能超过16个,也就是该字段的值不能大于16,否则DHCP报文将被丢弃。

giaddr字段:表示第一个DHCP中继的IP地址。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网段,那么第一个DHCP中继在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。若在到达DHCP服务器前经过了多个DHCP中继,该字段作为客户端所在的网段的标记,填充了第一个DHCP中继的IP地址后不会再变更,只是每经过一个DHCP中继,hops字段的数值会加1。

第二步:提供阶段

​ DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。

​ DHCP中继收到DHCP OFFER报文后,会进行如下处理:

  1. 检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
  2. DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
第三步:选择阶段

DHCP中继服务器收到来自客户端的DHCP REQUEST报文的处理过程同上。

第四步:确认阶段

DHCP中继服务器收到来自客户端的DHCP ACK报文的处理过程同上。

DHCP客户端重用曾经使用过的地址

第一步:选择阶段

客户端广播发送包含前一次分配的IP地址的DHCP REQUEST报文,报文中的请求的IP地址选项字段填入曾经使用过的IP地址。

第二步:确认阶段

DHCP服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCP客户端可以继续使用这个IP地址。否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IP地址。

DHCP客户端更新租期

​ DHCP服务器采用动态分配机制给客户端分配IP地址时,分配出去的IP地址有租期限制。DHCP客户端向服务器申请地址时可以携带期望租期,服务器在分配租期时把客户端期望租期和地址池中租期配置比较,分配其中一个较短的租期给客户端。租期到期或者客户端下线释放地址后,服务器会收回该IP地址,收回的IP地址可以继续分配给其他客户端使用。这种机制可以提高IP地址的利用率,避免客户端下线后IP地址继续被占用。如果DHCP客户端希望继续使用该地址,需要更新IP地址的租期。

  1. 当租期达到50%(T1)时,DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
  2. 当租期达到87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功(即租期从0开始计算);如果收到DHCP NAK报文,则重新发送DHCP DISCOVER报文请求新的IP地址。
  3. 如果租期时间到时都没有收到服务器的回应,客户端停止使用此IP地址,重新发送DHCP DISCOVER报文请求新的IP地址。

​ 客户端在租期时间到之前,如果用户不想使用分配的IP地址(例如客户端网络位置需要变更),会触发DHCP客户端向DHCP服务器发送DHCP RELEASE报文,通知DHCP服务器释放IP地址的租期。DHCP服务器会保留这个DHCP客户端的配置信息,将IP地址列为曾经分配过的IP地址中,以便后续重新分配给该客户端或其他客户端。客户端可以通过发送DHCP INFORM报文向服务器请求更新配置信息。

三、DHCP配置

​ DHCP服务由dhcp-server软件包提供,需要手动安装该软件包。

[root@1060a ~]# yum -y install dhcp-server
[root@1060a ~]# rpm -qa | grep dhcp
dhcp-client-4.3.6-49.uelc20.01.x86_64
dhcp-libs-4.3.6-49.uelc20.01.x86_64
dhcp-common-4.3.6-49.uelc20.01.noarch
dhcp-server-4.3.6-49.uelc20.01.x86_64

​ DHCP配置文件存放在/etc/dhcp目录下,名称为dhcpd.conf,该配置文件中没有任何配置,示例配置存放在/usr/share/doc/dhcp-server/dhcpd.conf.example文件中。

DHCP基础配置

​ 需求:搭建一台dhcp服务器,为客户端分配IP地址,地址池范围为:192.168.200.100~192.168.200.200,掩码为24位,网关为192.168.200.2,dns服务器地址为114.114.114.114。

1.安装软件包
[root@1060a ~]# yum -y install dhcp-server
2.修改配置文件
[root@1060a ~]# vim /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
subnet 192.168.200.0 netmask 255.255.255.0 {		//DHCP分配的网段和掩码
  range 192.168.200.100 192.168.200.200;			//DHCP分区的IP地址范围
  option domain-name-servers 114.114.114.114;		//分配的DNS地址
  option routers 192.168.200.2;						//分配的网关
  default-lease-time 600;							//默认租约时间,单位为秒
  max-lease-time 7200;								//最长租约时间,单位为秒
}
3.重启DHCP服务,设置开机自启
[root@1060a ~]# systemctl enable --now dhcpd
DHCP给主机分配指定IP地址
1.修改配置文件
[root@1060a ~]# vim /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
subnet 192.168.200.0 netmask 255.255.255.0 {
  range 192.168.200.100 192.168.200.200;
  option domain-name-servers 114.114.114.114;
  option routers 192.168.200.2;
  default-lease-time 600;
  max-lease-time 7200;
}
host client {								//指定主机
  hardware ethernet 00:0c:29:29:95:2a;		//网卡MAC地址
  fixed-address 192.168.200.11;				//分配的IP地址
}
2.重启服务
[root@1060a ~]# systemctl restart dhcpd
3.验证
[root@client ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.11  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::a836:ce70:c328:dfc4  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:29:95:2a  txqueuelen 1000  (Ethernet)
        RX packets 233  bytes 58750 (57.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 208  bytes 58630 (57.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

本人不才,在deepin论坛分享了一些自己在Linux学习过程中的一些知识积累,在分享的同时也在论坛中学习到了很多知识。现在想去拉起一个群聊,来分享知识,希望大家都能加入进来,分享自己所擅长的知识,本人也会在群里分享Linux,网络,docker,mysql等知识,同时也希望各位大佬能够帮助在下,完善自己的分享中的不足。
群号:751639288

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值