速通DHCP

DHCP前言:

在DHCP还未诞生的年代,所有终端的IP地址都需要手工配置,而手工配置IP地址可能导致几个问题:

        1.灵活性差

        2.容易出错

        3.容易出现地址冲突

        4.工作量大

        5.对人员素质有一定要求

基本概念:

        ·DHCP,全名是Dynamic Host Configuration Protocol,动态主机配置协议,即是一种对主机IP地址进行一个动态配置和管理的协议,无需手工人员

        ·DHCP采用C/S通信协议,协议报文基于UDP进行交互,采用了UDP67(Server)和UDP68(Client)两个端口号

        ·DHCP的重磅出世,使得传统的手工配置方式迅速被其取代,DHCP相对于手工配置有如下优点:

                1.效率高

                2.灵活性强

                3.易于管理

                4.基于DHCP协议报文的设计,不会产生地址冲突

DHCP常见报文与工作流程:

        这是比较常见的一次DHCP报文交互流程,即四次握手

在参与DHCP四次握手的只有两个角色,一个是DHCP Server,一个是DHCP Client

1)DHCP Discover(DHCP发现报文):这是DHCP客户端为了发现网络中的DHCP服务器而以广播的方式发送的报文。即 DHCP Client——>DHCP Server

2)DHCP Offer(DHCP提供报文):这是DHCP服务端向DHCP客户端发送的报文。但是,这里是单播,源地址是DHCP服务器本地地址,而目的地址即是DHCP服务器要向DHCP客户端分配的地址,因此这里是以一个单播的形式发送的。即DHCP Server ——> DHCP Client

3)DHCP Request (DHCP请求报文):这是DHCP客户端向DHCP服务器请求使用此地址的报文,因为此时DHCP客户端还未正式获得该地址,因而没有地址的他仍然使用广播的方式发送请求报文。即DHCP Client——> DHCP Server

4)DHCP ACK(DHCP确认报文):这是DHCP服务器向DHCP客户端发送的确认报文,即向DHCP客户端正式通知他能够使用所分配的这个地址

DHCP常规配置类型:

首先放置一个topo

1.DHCP接口配置:

 DHCP接口配置,这是最简单的一种DHCP配置方式

基本原理就是,构建一个以当前配置接口的IP地址为网关,并以该IP地址所在的网段分配地址的一个接口地址池,相当于是动态生成地址池

2.DHCP全局配置:

DHCP全局配置,这是一种较为复杂的DHCP配置方式,它需要手动构建一个全局地址池,然后在接口上应用

虽然配置要比接口地址池复杂一些,但是看起来更直观,相比接口配置的优势就是网关能够自定义,而接口地址池的网关只能以当前配置接口的IP地址为网关,局限性较大,如在VRRP场景下,DHCP就不可能采用接口配置了,而只能采用一个全局配置

DHCP跨三层分配地址出现的问题与解决方案

1.DHCP跨三层分配地址出现的问题:

        阅读了上述的DHCP工作流程,理当知道,在四次握手中,DHCP客户端向DHCP服务端发送的报文都是以广播的形式发送的,因为在正式获得地址前,DHCP客户端是没有地址的,因而不能发送单播地址。但是arp广播不能跨三层,那么此时就出现一个问题:DHCP跨三层如何分配地址?

2.DHCP跨三层分配地址的解决方案:

前言:

        为了解决这种问题,DHCP还有一种特殊的配置方式——中继配置

原理:

这是一个简单的中继场景的topo

        

        中继的原理也很简单,首先由DHCP中继者接收DHCP Client的广播报文,然后DHCP中继者将广播报文变为一个单播报文,单播源地址为本端接收了DHCP Client广播报文的地址,单播目的地址则是DHCP Server与DHCP Relay的直连地址。并且,DHCP Server要保证对DHCP Client所在网段的路由可达,四次握手才能正常进行。

配置实施与抓包:

        配置完后我们可以抓包看看

这是SW1的g0/0/2口的包,可以看到此时DHCP发现报文与DHCP请求报文还是广播报文

这是SW1的g0/0/1口的包,可以看到此时DHCP发现报文与DHCP请求报文变为了单播报文,并且与我上述理论相符,是以DHCP中继者接收到DHCP Client发送的广播报文的地址为源地址,以DHCP服务器的与DHCP中继者直连口为目的地址

DHCP安全机制:

前言:

        在目前这个错综复杂的现网环境中,DHCP的安全性面临着各种各样的挑战,如DHCP仿冒者攻击、DHCP中间人攻击、DHCP饿死攻击等,DHCP也相应装配了各种安全机制,以防范来自四方八方的攻击

1.DHCP仿冒者攻击:

简介:

        DHCP仿冒者攻击,即仿冒成DHCP服务器向DHCP Client提供DHCP服务器,如图

这时候DHCP客户端该如何甄别谁是正确的、可信任的DHCP服务器呢?

防御措施:

简介:

        dhcp有一种嗅探技术,即DHCP Snooping,其主要作用是用来屏蔽非法接入网络的非法dhcp服务器,即屏蔽dhcp仿冒者

配置实施:

2.DHCP中间人攻击/ARP欺骗:

简介:

        DHCP中间人攻击,其实本质就是ARP欺骗。

        如,用户发送DHCP广播报文时,DHCP中间人利用ARP机制,利用DHCP Server IP与DHCP中间人的MAC构建一个ARP映射关系,然后再以DHCP Client IP与DHCP中间人的MAC构建一个ARP映射关系,使得用户和DHCP Server之间的流量经过中间人转发,来实现对DHCP通信路径的监听,并实现进一步的操纵

防御措施:

简介:

        DHCP还支持一种DAI技术,即Dynamic ARP inspection动态ARP检测,可以有效的针对中间人攻击进行防御。不过由于DAI依赖于DHCP Snooping绑定表来进行MAC/IP的合法性检查,因此要先使能DHCP嗅探才能使能DAI

配置实施:

DAI有两种配置方式,接口配置和vlan配置

1.基于接口配置:

        

基于接口对来往arp报文进行一个合法性检查,局限性,不能防护到所有设备,且只能在已知中间人来自哪个接口的情况下配置

2.基于vlan配置

基于vlan对vlan内所有arp报文进行一个合法性检查,实现一个全面的安全防护,推荐用这种配置方式

3.DHCP饿死攻击/DHCP耗尽攻击:

简介:

        饿死攻击会通过变换CHADDR值(Client Hardware Address)中的MAC地址大量地向DHCP服务器发送DHCP Discovery报文申请IP地址,使DHCP地址池迅速耗尽,无法为正常的用户分配地址。

        主要问题在于,DHCP服务器无法区分恶意申请者与正常申请者。

防御措施:

简介:

        对于饿死攻击,可以通过配置DHCP嗅探的dhcp最大用户数目来防御,防止攻击者通过变换CHADDR值中的MAC地址大量发送DHCP请求。尽管这种方法既能基于vlan配置,也能基于接口配置,但是这种方法有着一个局限性,他是通过限制一个全局的DHCP用户数目来防止饿死攻击,是比较被动的方法

        对于饿死攻击,正确的做法应该是使用dhcp嗅探的dhcp snooping check dhcp-request 功能,这种功能能够检测DHCP请求报文里面的参数,实现绑定表匹配检查功能来防御攻击,并且这种功能能够基于vlan部署,实现一个全面的安全防护

配置实施:

IPSG(由于在以上攻击中未被提及故单独列出):

基本概念:

        IPSG是一种基于二层口的源地址过滤技术。它能够防止恶意主机伪造合法主机的IP地址来仿冒合法主机,还能确保非授权主机不能通过自己指定IP地址的方式来访问网络或攻击网络,只能通过DHCP获取,并且能利用绑定表对来往数据包的IP源地址进行匹配检查,可以很好的防止内网用户乱改IP的现象。同样也可以在二层口或vlan下配置,推荐在vlan下配置,以实现全面的IP源防护

配置实施:

        

尾声:

DHCP基本了解这么多应该就可以了,那么DHCP的故事就到此告一段落拉,我们下次再见

相关推荐

  1. ES6

    2024-07-10 17:40:02       51 阅读
  2. Docker概念

    2024-07-10 17:40:02       13 阅读
  3. Matlab知识点(半小时

    2024-07-10 17:40:02       13 阅读
  4. 常见SQL语句

    2024-07-10 17:40:02       39 阅读
  5. Vite 官方文档

    2024-07-10 17:40:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 17:40:02       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 17:40:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 17:40:02       4 阅读
  4. Python语言-面向对象

    2024-07-10 17:40:02       6 阅读

热门阅读

  1. 并发请求的艺术:Postman中实现高效API测试

    2024-07-10 17:40:02       13 阅读
  2. 关于TCP的三次握手流程

    2024-07-10 17:40:02       12 阅读
  3. stm32毫秒ms延时,HAL_Delay()

    2024-07-10 17:40:02       10 阅读
  4. nftables(4)表达式(2)主要表达式(PRIMARY EXPRESSIONS)

    2024-07-10 17:40:02       9 阅读
  5. C++八股(三)之虚函数

    2024-07-10 17:40:02       11 阅读
  6. Linux下mysql数据库的导入与导出以及查看端口

    2024-07-10 17:40:02       11 阅读
  7. Mybatis-Flex各种查询,强烈建议收藏

    2024-07-10 17:40:02       13 阅读
  8. Mybatis-plus学习

    2024-07-10 17:40:02       8 阅读