华为路由与交换 DHCP协议原理与配置 学习笔记

本次博客主要是介绍关于DHCP协议原理与配置。

一个网络如果要正常地运行,则网络中的主机(Host)必需要知道某些重要的网络参数,如IP地址、网络掩码、网关地址、DNS服务器地址(域名解析)、网络打印机地址等等。显然,在每台主机上都采用手工方式来配置这些参数是非常困难的、或是根本不可能的,如果是五台十台,对于公司的管理员来说,这些参数采用静态的手工方式配置的话,完全没有问题,但是如果是上千台的话,对于这上千台的主机都采用手工的方式配置的话,这个管理员他辞职不香吗?

网关:相同网段的主机进行通信的时候,是不需要网关的,但是不同网段的主机在通信的时候,是必须需要通过网关。

为此,IETF于1993年发布了动态主机配置协议(DHCP:Dynamic Host Configuration Protocol)DHCP的应用,实现了网络参数配置过程的自动化。不需要管理员手工去配置,可以主机可以主机去获取ip地址,那么DHCP技术具体是如何实现的呢?面对网络规模的扩大,DHCP又是如何应对的?面对网络中的攻击, DHCP又是如何防护的呢?

 

 手工配置网络参数存在的问题

传统的手工配置网络参数 需要每个用户都手动配置IP地址、掩码、网关、DNS等多个参数。

这样就会存在一些问题:

人员素质要求高主机的使用者需要懂得如何进行网络参数的配置操作方法,这在实际中是难以做到的。)

容易出错         (手工配置过程中非常容易出现人为的误操作情况

灵活性差     (网络参数发生改变时,需要重新进行配置操作。例如,如果某主机在网络中的位置发生了变化,则该主机的网关地址也可能会发生变化,这时就需要重新配置该主机的网关地址。

IP地址资源利用率低  (IP地址无法得到重复利用。一个段254个地址,可能只会用掉一百多个,那么剩下的需要做记录,还不能投入使用

工作量大  (配置工作量会随着主机数量的增加而增大

 在以上问题的推动下,得想办法搞一个比较简单的网络参数配置的技术就是DHCP

DHCP概念的提出 

随着用户规模的扩大及用户位置的不固定性,传统的静态手工配置方式已经无法满足需求,为了实现网络可以动态合理地分配IP地址给主机使用,需要用到动态主机配置协议DHCP 

DHCP相对于静态手工配置有如下优点

效率高(这个效率高完全是自动的,网卡可以设置为DHCP获取,不管是小型企业还是家庭办公,最起码都是有路由器的,这个路由器上都是集成了DHCP功能的,平时的生活中,我们的手机在连上wifi上边,是不需要去配置ip地址,全都是自动获取,这样来讲,效率就比较高了,不需要手工获取,不需要管理员手工去配置)

灵活性强

易于管理

 

DHCP基本工作过程(1)

在DHCP这个架构里边其实是有两种角色,一个是DHCP Server,叫做dhcp 服务器,服务器的作用就是给客户端去分发网络参数的,在这个网络参数里是有ip地址,网关,dns等等一些参数;另外一个角色就是普通用户终端,主机,相对于dhcp server 来讲,它叫做dhcp client,缺省是没有ip地址的,需要通过dhcp报文的交互向着dhcp server去请求一些网络参数,

DHCP采用了Client/Server模型;DHCP Client需要从DHCP Server那里获得各种网络配置参数,这个过程是通过DHCP ClientDHCP Server之间交互各种DHCP消息来实现的。DHCP消息是封装在UDP报文中的,DHCP Server使用端口号67来接收DHCP消息,DHCP Client使用端口号68来接收DHCP消息。本此博客中,我们主要关心DHCP Client是如何获得自己的IP地址的。

如下图所示,是DHCP Client通过DHCP来申请获取自己的IP地址的基本过程,在这一个过程中需要注意的是,在这个网络环境里边,DHCP Client 和DHCP server一定处在一个二层广播域里边,如果在这个二层广播域里边有一台路由器,那么在这里,这个申请过程的模型就不适用了,这个二层广播域就意味着客户端和服务器是可以直接二层通信的,中间不需要经过三层,所以在这个二层广播域里边可以理解为各种各样的交换机,去连接到一块。

那么在这样一个组网条件下,当客户端插上网线之后,把本地网卡改为dhcp获取之后,那么就开始朝着这个网段里面去发送广播报文,是这一过程包含了四个阶段:

发现阶段
发现阶段 也就是 PC 上的 DHCP Client 寻找 DHCP Server 的阶段。 PC DHCP Client 开始运行后,会 广播 的方式发送 一个 DHCP Discover 消息,发这个dhcp discover的目的是寻找有没有可用的dhcp server,因为现在根本不知道谁是dhcp server。
需要说明的是,图 所示的二层 广播域 中除了路由器 R 上运行了 DHCP Server 外,可能还有其它设备也运行了 DHCP Server 。如果是这样,那么所有这些 DHCP Server 都会接收到 PC 发送的 DHCP Discover 消息,也都会对所收到的 DHCP Discover 消息做出回应。
提供阶段
提供阶段也就是 DHCP Server DHCP Client 提供 IP 地址的阶段 个接收到 DHCP Discover 消息的 DHCP Server (包括路由器 R 上运行的 DHCP Server )都会从自己维护的地址池中选择一个合适的 IP 地址,并通过 DHCP Offer 消息将这个 IP 地址发送给 DHCP Client DHCP Server 是以单播的方式来发送 DHCP Offer 消息 的。 虽然dhcp网络层没有ip地址,因为缺省没有ip地址是4个0,所以客户端在发送dhcp discover的时候源ip地址是4个0,然后目的地址是4个255,广播报文,发出去了,但是二层封装是有mac地址,主机都有mac地址,烧在网卡里边的,因为在二层广播域里面传输的时候,肯定是有二层封装,有源目mac地址,所以DHCP Server在去回应这个offer报文的时候,这个单播是二层封装,直接可以用原来client发送的源mac,作为目的mac,DHCP server自己的mac地址作为源mac,二层封装成单播,那么三层的封装,注意一下,用的源ip是dhcp server自己的ip,那么目的ip封装的是给服务器给client即将分配的ip地址,这种情况下是没有问题的,报文在交换网络进行转发的时候,完全看的是mac地址去转的,不看三层,所以交换网络的交换机在转发的时候,完全可以利用目的mac,就可以进行转发了,这个报文一定可以正确的交给dhcp client
那么dhcp  client在收包的时候,看的目的mac就是自己的mac地址,可以解封装二层,发现三层是一个将要分配的ip地址,那他就会收,因为它现在没有ip地址,本身是一个offer报文,主机是知道这是服务器响应它的discover报文,所以它要解封装,而且这种单播方式的好处就在于,谁请求的就给谁,没有请求的就不需要给,如果在这里变成一个广播的话,效率会比较低,华为这块用的单播去解决这个问题,这个offer报文里边就包含了要给你分发的ip地址,给你分发的网关,给你分发的dns等等。

华为路由与交换 DHCP协议原理与配置 学习笔记_第1张图片

请求阶段
在请求阶段中, PC 上的 DHCP Client 会在若干个收到的 Offer (即若干个收到的 DHCP Offer 消息)中根据某种原则来确定出自己将要接受哪一个 Offer 。通常情况下, DHCP Client 会接受它所收到的第一个 Offer (即最先收到的那个 DHCP Offer 消息)。图中,假设 PC 最先收到的 DHCP Offer 消息是来自路由器 R 。于是, PC 上的 DHCP Client 会以广播方式发送一个 DHCP Request 消息,其意图就是向路由器 R 上的 DHCP Server 提出请求,希望获取到该 DHCP Server 发送给自己的 DHCP Offer 消息中所提供的那个 IP 地址。注意,这个 DHCP Request 消息中携带有 R 上的 DHCP Server 的标识(称为 Server Identifier ),表示 PC 上的 DHCP Client 只愿意接受 R 上的 DHCP Server 所给出的 Offer
显然,该二层广播域中所有的 DHCP Server 都会接收到 PC 上的 DHCP Client 发送的 DHCP Request 消息。 R 上的 DHCP Server 收到并分析了该 DHCP Request 消息后,会明白 PC 已经愿意接受自己的 Offer 了。其他的 DHCP Server 收到并分析了该 DHCP Request 消息后,会明白 PC 拒绝了自己的 Offer 。于是,这些 DHCP Server 就会收回自己当初给予 PC Offer 。也就是说,当初准备提供给 PC 使用的 IP 地址现在可以用来分配给别的设备使用了。
确认阶段
在确认阶段, R 上的 DHCP Server 会向 PC 上的 DHCP Client 发送一个 DHCP Ack 消息。注意,由于种种原因, R 上的 DHCP Server 也可能会向 PC 上的 DHCP Client 发送一个 DHCP Nak 消息。如果 PC 接收到了 DHCP Nak 消息,就说明这次获取 IP 地址的尝试失败了。在这种情况下, PC 只能重新回到发现阶段来开始新一轮的 IP 地址申请过程。

DHCP基本工作过程 (2) 

DHCP Server 每次给 DHCP Client 分配一个 IP 地址时,只是跟 DHCP Client 立了一个关于这个 IP 地址的租约( Lease )。每个租约都有一个租约期( Duration of Lease ), DHCP 协议规定租约期的缺省值不得小于 1 个小时,而实际部署 DHCP 时, 租约期的缺省值通常都是24小时 。在租约期内, DHCP Client 才能使用相应的 IP 地址。当租约期到期之后, DHCP Client 是不被允许继续使用这个 IP 地址的。在租约期还没有到期的时候, DHCP Client 可以申请续租这个 IP 地址, 其过程如下图所示。
DHCP 协议规定,在缺省情况下,图中的 T1 时刻是租约期到了一半的时刻,而 T2 时刻则是租约期到了 87.5% 的时刻。在 T1 时刻, PC 上的 DHCP Client 会以单播方式向 R 上的 DHCP Server 发送一个 DHCP Request 消息,请求续租 IP 地址(也就是请求重新开始租约期的计时)。如果在 T2 时刻之前, PC 上的 DHCP Client 收到了回应的 DHCP Ack 消息,则说明续租已经成功。如果直到 T2 时刻, PC 上的 DHCP Client 都未收到回应的 DHCP Ack 消息,那么在 T2 时刻, PC 上的 DHCP Client 会以广播方式发送一个 DHCP Request 消息,继续请求续租 IP 地址。如果在租约期到期之前, PC 上的 DHCP Client 收到了回应的 DHCP Ack 消息,则说明续租成功。如果直到租约期到期时, PC 上的 DHCP Client 仍未收到回应的 DHCP Ack 消息,那么 PC 就必须停止使用原来的 IP 地址,也就是说, PC 只能重新从发现阶段开始来重新申请一个 IP 地址。

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第2张图片

DHCP 配置实现:

如下图所示:

PC2通过DHCP 全局地址池来获取ip地址,PC1通过接口地址池来获取地址,在路由器上配置DHCP 服务器。

华为路由与交换 DHCP协议原理与配置 学习笔记_第3张图片

AR1上的dhcp 动态地址池的配置如下:

 华为路由与交换 DHCP协议原理与配置 学习笔记_第4张图片

 
DHCP Server配置基于接口的地址分配方式,只会响应该接口接收的DHCP请求;配置基于全局地址池的地址分配方式,可以响应所有端口接收的DHCP请求。
 
配置解析:
dhcp enable      // 使能 DHCP 功能,在配置 DHCP 服务器时必须先执行该命令,才能配置 DHCP 的其他功能并生效
ip pool PC2       // 设置一个名为PC2 的全局地址池
gateway-list 192.168.2.254       // 设置分配的网关 IP
network 192.168.2.0 mask 255.255.255.0     // 设置分配的地址网段
excluded- ip -address 192.168.2.1     // 设置不参与自动分配的 IP 地址范围
lease day 3 hour 0 minute 0            // 设置地址池中 IP 地址的租用有效期限,默认 1
dns -list 192.168.2.1                        // 设置分配的 DNS 服务器地址
interface GigabitEthernet0/0/0
ip address 192.168.2.254 255.255.255.0
dhcp select global    // 接口下使能全局方式分配地址

 

 DHCP接口地址的配置如下:

华为路由与交换 DHCP协议原理与配置 学习笔记_第5张图片

 配置解析:

interface g0/0/0
ip address 192.168.1.254 24
dhcp select interface                                           // 使能接口分配地址方式且关联接口地址池
dhcp server dns -list 192.168.1.1                        // 指定分配的 DNS 服务器地址
dhcp server excluded- ip -address 192.168.1.1    // 配置接口地址池中不参与自动分配的 IP 地址范围
dhcp server lease day 3 hour 0 minute 0          // 配置接口地址池中 IP 地址的租用有效期,默认 1
 

结果验证:

华为路由与交换 DHCP协议原理与配置 学习笔记_第6张图片

华为路由与交换 DHCP协议原理与配置 学习笔记_第7张图片

 

为什么需要DHCP Relay

随着网络规模的扩大,网络中就会出现用户处于不同网段的情况:

如下图所示,client A向DHCP 服务器发送DHCP discover 消息,但是对于RTA来讲,DHCP discover 报文没有办法跨越二层广播域传递,所以RTA只能将这个报文丢弃。

华为路由与交换 DHCP协议原理与配置 学习笔记_第8张图片

从前面的描述中可知,DHCP ClientDHCP Server必须在同一个二层广播域中才能接收到彼此发送的DHCP消息。DHCP消息无法跨越二层广播域传递。

一个实际的IP网络通常都包含了多个二层广播域,如果需要部署DHCP,那么可以有两种方法:

方法一:在每一个二层广播域中都部署一个 DHCP Server (代价太大,现实中一般不推荐此方法)。
方法二:部署一个 DHCP Server 来同时为多个二层广播域中的 DHCP Client 服务,这就需要引入 DHCP Relay
 
 

 

DHCP Relay 是dhcp中继器,就是中间人,  中间人的目的就是当你从用户这边收到了广播的DHCP discover 报文之后,中继器可以把这个广播报文重新封装一下,这个广播报文变成单播报文发给这个DHCP Server,这样的话,dhcp服务器就能收到这个discover报文,dhcp服务器就可以分配ip地址了。

这样的话,随着网段的增加,路由器只需要配置中继就好了,不需要配置server了,把所有的dhcp的服务放在服务器上。

 

DHCP Relay基本工作原理

DHCP Relay 的基本作用就是专门在 DHCP Client DHCP Server 之间进行 DHCP 消息的中转。
 
如图所示, DHCP Client 利用 DHCP Relay 来从 DHCP Server 那里获取 IP 地址等配置参数时, DHCP Relay必须与DHCP Client位于同一个二层广播域 ,但 DHCP Server 可以与 DHCP Relay 位于同一个二层 广播域 ,也可以与 DHCP Relay 位于不同的二层 广播域 DHCP Client DHCP Relay 之间是以广播方式交换 DHCP 消息的,但 DHCP Relay DHCP Server 之间是以单播方式交换 DHCP 消息的(这就意味着, DHCP Relay 必须事先知道 DHCP Server IP 地址)。

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第9张图片

DHCP Relay配置实现

华为路由与交换 DHCP协议原理与配置 学习笔记_第10张图片

 

配置 DHCP-Server :                                          //DHCP 服务器可以采用全局地址分配或者接口地址分配,此处以全局地址池分配地址为例
dhcp enable                              
ip pool DHCP-relay                                 //"DHCP-relay" 仅为 DHCP 地址池名称
ip route-static 192.168.1.0 24 10.1.1.2   // 由于中继后的 DHCP 报文是一个源地址为 192.168.1.1 的单播报文,需要有回去的路由,当前为了简单,使用静态路由完成,正常网络内可以配置 IGP 使得地址能够通信
配置 DHCP 中继( GW ):
dhcp server group DHCP                    // 配置 DHCP 服务器组名
如果说在整个网络里存在多个DHCP服务器的话,那么在中继器这里就需要关联服务器组,那么在转换之后,的discover的单播报文都会给这个服务器组里面的服务器转发过去,那么当服务器相应之后,回复的offer报文,中继器会以先收到的那个offer报文为主,后收到的offer报文就可以不转了,因为就算转过去了,用户也会用先收到的offer。也可以实现服务器的用于备份。
 
dhcp -server 10.1.1.1                            // 设定 DHCP 服务器地址
dhcp enable                                         // 中继设备也需要开启 DHCP ,否则后面接口下的命令不能使能
interface g0/0/1                                  // 进入连接客户端的接口
ip address 192.168.1.1 24
dhcp select relay                                // 启动 DHCP Relay 功能
dhcp relay server-select DHCP          // 设定 DHCP Relay 要使用的服务器组

 

如下图所示,LSW1作为DHCP 中继器且pc1处于vlan 10,pc2处于vlan20华为路由与交换 DHCP协议原理与配置 学习笔记_第11张图片

[LSW1]DIS CU
#
sysname LSW1
#
vlan batch 10 20
#
dhcp server group 1
 dhcp-server 10.0.12.1 0
 dhcp-server 10.0.12.2 1
#
interface Vlanif1
 ip address 10.0.123.11 255.255.255.0
#
interface Vlanif10
 ip address 10.0.1.254 255.255.255.0
 dhcp select relay
 dhcp relay server-select 1
#
interface Vlanif20
 ip address 10.0.2.254 255.255.255.0
 dhcp select relay
 dhcp relay server-select 1
#
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
#

dis cu
#
 sysname AR1
#
interface GigabitEthernet0/0/0
 ip address 10.0.123.1 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.0.12.1 255.255.255.0 
#
ip route-static 0.0.0.0 0.0.0.0 10.0.123.11 

 dis cu
#
 sysname DHCP SERVER
#
dhcp enable
#
ip pool VLAN10
 gateway-list 10.0.1.254 
 network 10.0.1.0 mask 255.255.255.0 
#
ip pool VLAN20
 gateway-list 10.0.2.254 
 network 10.0.2.0 mask 255.255.255.0 
#
interface GigabitEthernet0/0/0
 ip address 10.0.12.2 255.255.255.0 
 dhcp select global
#
ip route-static 0.0.0.0 0.0.0.0 10.0.12.1
#

 对于DHCP服务器来说,它怎么区分vlan10和vlan20的主机申请的ip地址是对应的哪一个地址池,可以通过发送这个单播报文的网关地址来区分的。

DHCP面临的安全威胁

 

网络攻击行为无处不在,针对DHCP的攻击行为也不例外。例如,某公司突然出现了大面积用户无法上网的情况,经管理员检查用户终端均未获取到IP地址,且DHCP Server地址池中的地址已经全部被分配出去了,对于这个DHCP server是可以检查,哪些地址已经分配出去了,哪些地址是空闲的,它的统计信息是在路由器上是可以看的,(可以通过DHCP IP POOL NAME VLAN10 去看)这种情况很有可能就是DHCP受到了饿死攻击而导致的。

DHCP在设计上未充分考虑到安全因素,从而留下了许多安全漏洞,使得DHCP很容易受到攻击。实际网络中,针对DHCP的攻击行为主要有以下三种:

DHCP饿死攻击(就是想办法把dhcp服务器的地址全都给获取完,真正的主机在后期想要获取地址的时候,就没得用了。)

仿冒DHCP Server攻击(搞一台设备架在交换机上边,仿造一个dhcp server去攻击你,你拿到我的iP地址,你可能上不了网,或者上网了,得通过我去绕了一圈去上网,那对于你的所有数据都可以抓包了。)

DHCP中间人攻击

DHCP饿死攻击

 

攻击原理:攻击者持续大量地向DHCP Server申请IP地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。

漏洞分析:DHCP Server向申请者分配IP地址时,无法区分正常的申请者与恶意的申请者。

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第12张图片

DHCP饿死攻击是攻击者通过持续大量地向DHCP Server申请IP地址来实现的,其目的是耗尽DHCP Server地址池中的IP地址,导致DHCP Server没有IP地址分配给正常的用户。DHCP消息中有一个名叫CHADDRClient Hardware Address  客户端的mac地址)的字段,该字段是由DHCP客户端填写的,表示的是客户端的硬件地址(也就是客户端的MAC地址)。DHCP Server是针对CHADDR来分配IP地址的,对于不同的CHADDRDHCP Server会分配不同的IP地址;DHCP Server无法区分什么样的CHADDR是合法的,什么样的CHADDR是非法的。利用这个漏洞,攻击者每申请一个IP地址时,就在DHCP消息的CHADDR字段中填写一个不同的值,以此来冒充是不同的用户在申请IP地址。

 

仿冒DHCP Server攻击

 攻击原理:攻击者仿冒DHCP Server,向客户端分配错误的IP地址及提供错误的网关地址等参数,导致客户端无法正常访问网络。

漏洞分析:DHCP客户端接收到来自DHCP ServerDHCP消息后,无法区分这些DHCP消息是来自仿冒的DHCP Server,还是来自合法的DHCP Server

如下图所示:

华为路由与交换 DHCP协议原理与配置 学习笔记_第13张图片

 

攻击者私自安装并运行 DHCP Server 程序后,便可以把自己装扮成一个合法的 DHCP Server ,这就是所谓的仿冒 DHCP Server 。仿冒 DHCP Server 与合法的 DHCP Server 在工作原理上是完全一样的,所不同的是,仿冒 DHCP Server 会向客户端分配错误的 IP 地址及提供错误的网关地址等参数,导致客户端无法正常访问网络。
我们知道,客户端以广播方式发送 DHCP Discover 消息后,仿冒 DHCP Server 和合法的 DHCP Server 都能够收到该 DHCP Discover 消息,并且都会回应 DHCP Offer 消息。如果客户端最先收到的 DHCP Offer 消息是来自仿冒 DHCP Server ,那么客户端就会继续向仿冒 DHCP Server (而不是合法的 DHCP Server )请求获得 IP 地址等参数,而仿冒 DHCP Server 就会乘机向客户端分配错误的 IP 地址及提供错误的网关地址等参数。
 
高级一点的攻击会先通过饿死攻击把DHCP Server服务器的ip地址全都搞没,然后再通过仿冒DHCP Server攻击来窃取用户信息,一做一个准。
 

DHCP中间人攻击

 攻击原理:攻击者利用ARP机制,让PC-A学习到IP-SMAC-B的映射关系,(这是很容易做到了,比如说搞一个无故ARP出去,攻击者可以往PC-A发一个我的IP地址是S,mac地址是B,那么这个样子的话,PCA上就有了另外一种映射,去往SERVER的mac地址是B),同样的,又让Server学习到IP-AMAC-B的映射关系。如此一来,PC-AServer之间交互的IP报文都会经过攻击者中转。

因为PCA和server之间的mac地址都是B的mac地址,所以交换机在转发的时候,都会交给B

 

无故ARP

主机使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为无故ARP,通常用为:

1.无故ARP可以用于检测网络中的重复IP地址。一台设备可以向自己的 IP地址发送ARP请求,如果收到收到ARP响应则表明网络中存在重复地址。

2.无故ARP还可以通告一个新的MAC。当一台设备收到一个ARP请求,如果ARP高速缓存中已有发送者的IP地址,那么此IP地址所对应的硬件地址将会被发送者新的硬件地址所更新。这种无故ARP用途正式基于此。

3.某个子网中运行HSRP协议的路由器如果从其他路由器变成了主路由器,它将会发送一个无故ARP更新该子网内主机的ARP缓存。

漏洞分析:从本质上讲,中间人攻击是一种Spoofing IP/MAC攻击,中间人利用了虚假的IP地址与MAC地址之间的映射关系来同时欺骗DHCP的客户端和服务器。(spoofing 欺骗)

如下图所示

华为路由与交换 DHCP协议原理与配置 学习笔记_第14张图片

 

攻击者利用ARP机制,让PC-A学习到IP-SMAC-B的映射关系,又让Server学习到IP-AMAC-B的映射关系。当PC-ADHCP Server发送IP报文时,目的IP地址为IP-S,源IP地址为IP-A,而封装这个IP报文的帧的目的MAC地址为MAC-B,源MAC地址为MAC-A,所以这个帧会首先到达攻击者PC-B。攻击者收到这个帧后,将这个帧的目的MAC地址更换为MAC-S,源MAC地址更换为MAC-B,然后将这个帧发往Server。如此“偷梁换柱”,Server是看不出任何破绽的。另一方面,当DHCP ServerPC-A发送IP报文时,目的IP地址为IP-A,源IP地址为IP-S,而封装这个IP报文的帧的目的MAC地址为MAC-B,源MAC地址为MAC-S,所以这个帧也会首先到达攻击者PC-B。攻击者收到这个帧后,将这个帧的目的MAC地址更换为MAC-A,源MAC地址更换为MAC-B,然后将这个帧发往PC-A。同样,PC-A也是看不出任何破绽的。

由于往来于 PC-A DHCP Server 之间的 IP 报文都会经过攻击者(中间人)进行中转,攻击者便很容易窃取这些 IP 报文中的某些信息,并利用这些信息来进行其他的破坏行为。攻击者也可以很容易对往来于 PC-A DHCP Server 之间的 DHCP 消息(这些消息是封装在 UDP 报文中的,而 UDP 报文又是封装在 IP 报文中的)进行篡改,达到直接攻击 DHCP 的目的。

 

对于以上的问题,得想办法去解决,那么应用而生的就是dhcp Snooping

DHCP Snooping技术的出现

 

 为了增强网络安全,防止DHCP受到攻击,一种称为DHCP Snooping的技术应运而生。DHCP Snooping不是一种标准技术,尚未有统一的标准规范,不同的网络设备制造商在DHCP Snooping的实现上也不尽相同。

DHCP Snooping部署在交换机上,其作用类似于在DHCP客户端与DHCP服务器端之间构筑了一道虚拟的防火墙。通过这个虚拟的防火墙,就可以防范刚才提到的攻击,

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第15张图片

 

讲到这个其实还需要有个铺垫,当我们在这里部署了DHCP Snooping以后,真实PC和服务器,进行交互的dhcp报文之后,都会被交换机进行监听,然后利用dhcp报文形成一个绑定表,这个绑定表的内容,要比交换机里的表(mac地址,vlan出接口,)还要更加丰富,通过dhcp snooping形成了一个DHCPsnooping的绑定表,这里的内容会更加丰富,除了有mac地址,vlan接口还有ip地址,租期,还有绑定类型,(绑定类型有两种,一种是动态的(通过dhcp交互形成的,),一种的静态的(手工静态的绑定方式),)加上这些之后,表里的内容就丰富了,后期可以利用这个绑定表去防范一些攻击。

接下来去看一下怎么去防范dhcp饿死攻击的。

DHCP Snooping用于防止DHCP饿死攻击 

DHCP 饿死攻击是攻击者通过持续大量地向 DHCP Server 申请 IP 地址来实现的,其目的是耗尽 DHCP Server 地址池中的 IP 地址,导致 DHCP Server 没有 IP 地址分配给正常的用户。 DHCP 消息中有一个名叫 CHADDR Client Hardware Address )的字段,该字段是由 DHCP 客户端填写的,表示的是客户端的硬件地址(也就是客户端的 MAC 地址)。 DHCP Server 是针对 CHADDR 来分配 IP 地址的,对于不同的 CHADDR DHCP Server 会分配不同的 IP 地址; DHCP Server 无法区分什么样的 CHADDR 是合法的,什么样的 CHADDR 是非法的。利用这个漏洞,攻击者每申请一个 IP 地址时,就在 DHCP 消息的 CHADDR 字段中填写一个不同的值,以此来冒充是不同的用户在申请 IP 地址。
为了弥补上述漏洞,从而阻止饿死攻击, DHCP Snooping 技术支持在端口下对 DHCP Request 报文的 源MAC地址与CHADDR进行一致性检查:如果二者相同,则转发报文 ;如果二者不相同,则丢弃。如果要在某端口下实施源 MAC 地址与 CHADDR 的一致性检查,可以在该端口下使用命令 dhcp snooping check dhcp-chaddr enable
还可能存在这样一种饿死攻击,就是攻击者不断同时变换 MAC 地址和 CHADDR ,并且每一次变换时,都让 CHADDR MAC 地址相同,如此一来,便可以躲过上述源 MAC 地址与 CHADDR 的一致性检查!
 

华为路由与交换 DHCP协议原理与配置 学习笔记_第16张图片

 

 DHCP Snooping用于防止仿冒DHCP Server攻击

当我们在交换机上开启了dhcp snooping 的功能之后,还有第二个作用,第一个作用就是通过截获侦听dhcp报文,形成一个绑定表;第二个功能是在某个vlan里边,去开启了dhcp snooping,(注意,DHCP snooping可以针对某个vlan里边去开的,在交换机上开了,那么多vlan,到底是哪个vlan开snooping,可以有目的性的去开启)当在某个vlan里边去开启了snooping,那么在这个vlan里边的所有接口,都会处于一个untrust 状态,这种端口叫做untrust端口,对于这种untrust的端口,是没有办法去转发dhcp服务器的报文的,比如dhcp服务器的offer,dhcp服务器的ack,如果是被untrust端口收到了,它是不会收也不会发的。这样的话,合法的服务器也不能正常发送offer了,所以当我们在某个vlan开启了dhcp snooping之后,需要将连接合法服务器的端口设置为trust,这个是通过手工去配置的,trust端口是可以接收和发送过来的offer报文,ack报文,其他端口全都是untrust,这样的话,仿冒者服务器在假装服务器发送offer的时候,交换机就不会接收和发送了,

DHCP Snooping 将交换机上的端口分为两种类型,即信任端口( Trusted 端口)和非信任端口( Untrusted 端口);与合法的 DHCP Server 相连接的端口应配置为 Trusted 端口,其他端口应配置为 Untrusted 端口。
交换机从 Trusted端口接收到DHCP响应报文 (例如 DHCP Offer 报文、 DHCP Ack 报文等等)后,会 转发 这些报文,从而保证合法的 DHCP Server 可以正常地分配 IP 地址及提供其他网络参数;交换机从 Untrusted端口 接收到 DHCP 响应报文(例如 DHCP Offer 报文、 DHCP Ack 报文等等)后, 会丢弃 这些报文,从而阻止仿冒的 DHCP Server 分配 IP 地址及提供其他网络参数。
 
关键配置命令:交换机的端口默认是Untrusted端口。如果需要将交换机的某个端口配置为Trusted端口,可以在该端口视图下使用命令dhcp snooping trusted。如果需要将某个Trusted端口恢复为Untrusted端口,可以在该端口视图下使用命令undo dhcp snooping trusted。
 

华为路由与交换 DHCP协议原理与配置 学习笔记_第17张图片

 DHCP Snooping用于防止DHCP中间人攻击

中间人攻击的防范也是通过这个绑定去实现的,之前形成的绑定表,绑定表里边的mac地址a就对应着ip地址a,mac地址b就对应着ip地址b,中间人再去发送无故ARP的时候,交换机收到之后,会检查ARP里边的源IP地址和源mac地址,发现你的IP地址和mac地址的映射关系不能匹配dhcp snooping绑定表的条目,正常来讲,如果是合法的主机去做无故ARP的话,你的mac地址就是你自己的,ip地址也是你自己的,所以这个mac地址和ip地址和绑定表里的一样,如果不一样的话,就意味着你在用别人的ip地址,用你自己的mac地址做ARP,那就是一个攻击,还是通过比对这个表项,如果一样就让你转,如果不一样,就会丢弃这个arp请求报文,这样的话,你想实现中间人攻击就不可能了。

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第18张图片

我们已经知道, DHCP 中间人攻击本质上是一种 Spoofing IP/MAC 攻击。要想防止 DHCP 中间人攻击,其实就是要防止 Spoofing IP/MAC 攻击。
运行了 DHCP Snooping 的交换机会“侦听( Snooping )”往来于用户与 DHCP Server 之间的 DHCP 消息,并从中收集用户的 MAC 地址(这里的 MAC 地址是指 DHCP 消息中 CHADDR 字段的值)、用户的 IP 地址(这里的 IP 地址是指 DHCP Server 分配给相应 CHADDR IP 地址)等信息,这些信息会集中存放在一个数据库中,该数据库也被称为 DHCP Snooping 绑定表。运行了 DHCP Snooping 的交换机会建立并动态维护 DHCP Snooping 绑定表,绑定表中除了包含了用户的 MAC 地址、用户的 IP 地址外,还包括 IP 地址租用期、 VLAN-ID 等等信息。
 
如图所示,假设 DHCP Server PC-A 分配了 IP 地址 IP-A ,给 PC-B 分配了 IP 地址 IP-B ,那么 IP-A MAC-A 就形成了绑定关系, IP-B MAC-B 也形成了绑定关系,这种绑定关系都存放于 DHCP Snooping 绑定表中。攻击者为了让 Server 学习到 IP-A MAC-B 的映射关系,会发送 ARP 请求报文(将 ARP 报文中的源 IP 地址填为 IP-A ,源 MAC 地址填为 MAC-B )。交换机接收到 ARP 请求报文后,会检查该 ARP 请求报文中的源 IP 地址和源 MAC 地址,发现该 IP/MAC IP-A/MAC-B )映射关系不能匹配 DHCP Snooping 绑定表中的条目,于是会丢弃该 ARP 请求报文,这样就有效地防止了 Spoofing IP/MAC 攻击。
如果需要使用上面所描述的防止 Spoofing IP/MAC 攻击(进而防止中间人)的方法,就必须在交换机的系统视图下执行配置命令 arp dhcp -snooping-detect enable

 

同时这个DHCP Snooping还可以和另外一种技术做联动。

DHCP SnoopingIPSG技术的联动

IPSG(ip source guard)叫做ip源保护,ip源保护可以实现针对于虚拟ip地址源的保护,正常来讲,你的ip地址是b,万一你仿冒a的地址去发,当仿冒a的地址去发的时候,ip source guard开启以后,要去检查源地址,和绑定表里边的地址,是不是一个,如果不是一个就认为是一个ip源攻击,就会把他干掉,正常来讲,a发送过来的报文,用的ip地址是a,绑定表的ip的ip地址也是a,那就正常通过,那你b应该是用b发但你是用a发的,就会被干掉了,这个是dhcp snooping和ipsg的一个联动,如果没有这个ipsg,他是不会去检查这个ip地址的,那么做了这个ipsg联动,就会利用这个dhcp绑定表,做一个检查,如果一致,就可以通信,如果不一致,就不能通信。

 

 华为路由与交换 DHCP协议原理与配置 学习笔记_第19张图片

网络中经常会存在针对源 IP 地址进行欺骗的攻击行为,例如,攻击者仿冒合法用户的 IP 地址来向服务器发送 IP 报文。针对这类攻击,相应的防范技术称为 IPSG(IP Source Guard  叫做ip源保护) 技术。
交换机使能 IPSG 功能后,会对进入交换机端口的报文进行合法性检查,并对报文进行过滤(如果合法,则转发;如果非法,则丢弃)。
DHCP Snooping 技术可与 IPSG 技术进行联动,即:对于进入交换机端口的报文进行 DHCP Snooping 绑定表匹配检查,如果报文的信息和与绑定表一致,则允许其通过,否则丢弃报文。
报文的检查项可以是源 IP 地址、源 MAC 地址、 VLAN 和物理端口号的若干种组合。例如,在交换机的端口视图下可支持 IP+MAC IP+VLAN IP+MAC+VLAN 等组合检查,在交换机的 VLAN 视图下可支持: IP+MAC IP+ 物理端口号、 IP+MAC+ 物理端口号等组合检查。
关键配置命令:在交换机的端口视图下或VLAN视图下执行配置命令ip source check user-bind enable。

 

如下图所示,来模拟dhcp server仿冒者攻击场景

华为路由与交换 DHCP协议原理与配置 学习笔记_第20张图片 

dis cu
#
sysname LSW1
#
vlan batch 10
#
vlan 10
 dhcp snooping enable
 dhcp snooping trusted interface GigabitEthernet0/0/3
#
interface MEth0/0/1
#
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 10
 ip source check user-bind enable   和ipsg做联动
 dhcp snooping check dhcp-chaddr enable  开启检查chaddr的功能,防止饿死攻击
 dhcp snooping check dhcp-rate enable    限制dhcp请求的发包速率,防止有人一直给dhcp服务器发送discover报文,破坏dhcp服务器的稳定性
#
interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/4
 port link-type access
 port default vlan 10
#

 [AR1]dis cu
[V200R003C00]
#
 sysname AR1
#
dhcp enable
#
interface GigabitEthernet0/0/0
 ip address 10.0.1.254 255.255.255.0 
 dhcp select interface
 dhcp server dns-list 8.8.8.8 

 dis cu  //仿冒者
[V200R003C00]
#
 sysname AR2
#
dhcp enable
#
interface GigabitEthernet0/0/0
 ip address 10.0.2.254 255.255.255.0 
 dhcp select interface
 dhcp server dns-list 9.9.9.9 
#

配置结果验证:

在配置DHCP snooping之前,会发现,用户端会收到两个dhcp服务器的响应报文

华为路由与交换 DHCP协议原理与配置 学习笔记_第21张图片 

在配置完dhcp snooping之后, 没有将交换机上的连接合法服务器的接口改为trust接口,之后,再向服务器申请网络参数的时候,就收不到服务器的响应报文了,如下图所示

 

华为路由与交换 DHCP协议原理与配置 学习笔记_第22张图片

那么连接服务器的接口 改为trust状态,再抓取包的时候,就只有合法服务器的响应报文,如下图所示

华为路由与交换 DHCP协议原理与配置 学习笔记_第23张图片

 

你可能感兴趣的:(路由与交换,DHCP)