2022-09-01 网工进阶(二十九) DHCP-概述、工作原理、报文格式、分配IP地址顺序、地址租期与续租、中继(relay)、Snooping

概述

IETF于1993年发布了DHCP(Dynamic Host Configuration Protocol动态主机配置协议)。DHCP实现了网络参数配置的自动化,降低客户端的配置和维护成本。

DHCP采用C/S(Client/Server,客户端/服务器)通信模式,协议报文基于UDP的方式进行交互,采用67(DHCP服务器)和68(DHCP客户端)两个端口号。

相关命令

开启DHCP功能

[R1]dhcp enable 

创建全局DHCP地址池        

[R1]ip pool dhcp1

配置全局DHCP地址池范围

[R1-ip-pool-dhcp1]network 192.168.1.0 mask 24

配置全局DHCP网关

[R1-ip-pool-dhcp1]gateway-list 192.168.1.254 

配置全局DHCP地址池中不参与分配的地址范围

[R1-ip-pool-dhcp1]excluded-ip-address 192.168.1.1 192.168.1.99
[R1-ip-pool-dhcp1]excluded-ip-address 192.168.1.201 192.168.1.253

配置全局DHCP可分配地址范围中为指定客户端分配固定IP地址

[R1-ip-pool-dhcp1]static-bind ip-address 192.168.1.101 mac-address 5489-987d-4e8f

在接口下应用全局DHCP配置

[R1-GigabitEthernet0/0/0]dhcp select global 

在接口下启用接口的DHCP配置

[R1-GigabitEthernet0/0/1]dhcp select interface 

配置接口DHCP地址池范围和网关

[R1-GigabitEthernet0/0/1]ip address 192.168.1.254 24

配置接口DHCP地址池中不参与分配的地址范围

[R1-GigabitEthernet0/0/1]dhcp server excluded-ip-address 192.168.1.1 192.168.1.99

配置接口DHCP可分配地址范围中为指定客户端分配固定IP地址

[R1-GigabitEthernet0/0/1]dhcp server static-bind ip-address 192.168.1.101 mac-address 5489-987d-4e8f 

DHCP客户端首次接入网络的工作原理

1 发现阶段,即DHCP客户端发现DHCP服务器的阶段。

DHCP客户端发送DHCP DISCOVER报文来发现DHCP服务器。DHCP DISCOVER报文中携带了客户端的MAC地址、需要请求的参数列表选项、广播标志位等信息。


2 提供阶段,即DHCP服务器提供网络配置信息的阶段。

服务器接收到DHCP DISCOVER报文后,选择跟接收DHCP DISCOVER报文接口的IP地址处于同一网段的地址池,并且从中选择一个可用的IP地址(给客户端分配IP地址前会发送Ping探测,如果能Ping通则标识该地址不可用,并选择其他IP地址分配给客户端),然后通过DHCP OFFER报文发送给DHCP客户端。


3 选择阶段,即DHCP客户端选择IP地址的阶段。

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


4 确认阶段,即DHCP服务器确认所分配IP地址的阶段。

DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址(如果收到响应,则发送DHCP DECLINE报文通知DHCP服务器该IP地址冲突,DHCP服务器标识该地址不可用,客户端发送DHCP DISCOVER报文重新申请IP地址)。 

用找工作比喻DHCP工作原理

笔者发现可以用找工作来比喻DHCP的工作原理。

1 发现阶段

求职者海投简历给所有用人单位,简历中包含了个人信息和期望就职的职能范围。

2 提供阶段

用人单位确认相应职能的岗位有空缺,需要招人,于是发送offer给求职者,offer中包含了可提供的岗位信息。

3 选择阶段

求职者选择了第一个收到的offer中的期望岗位,选择其中的期望岗位并发送信息给用人单位。

4 确认阶段

用人单位给求职者发送确认需求的信息,求职者到用人单位后确认该岗位是否真的空缺,如果有人、就重新开始投简历。

预知两个术语概念

DHCP Relay

DHCP Relay指DHCP中继。当DHCP服务器和客户端在不同的三层网络中时,报文无法通过广播到达,此时就需要有设备作为DHCP中继,确保DHCP服务器和客户端之间的正常通信

DHCP Snooping

DHCP Snooping是在DHCP协议的安全机制。用于在DHCP服务器和客户端之间建立一道防火墙,以抵御网络中针对DHCP的各种攻击。例如当网络中出现另一个DHCP服务器,会造成客户端频繁切换网关地址等现象,导致客户端的网络瘫痪,如果启用了DHCP Snooping,就可以避免发生这种情况。

DHCP报文格式

Op(op code):表示报文的类型,取值为1(客户端请求报)或者2(服务器响应报文)

Htype (hardware type): 表示硬件地址的类型。

Hlen(hardware length): 表示硬件地址的长度。

Hops(hops): 表示当前DHCP报文经过的DHCP Relay数目。该字段由客户端设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。

Xid:表示DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联。

Secs(seconds):由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数,缺省值为3600s。

Flags:客户端请求服务器发送响应报文的形式,只有最高位有意义,其余15位置0。最高位为0时请求发送单播响应,最高位为1时请求发送广播响应。

Yiaddr(your client ip address):表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。

Siaddr(server ip address):DHCP服务器的IP地址。

Giaddr(gateway ip address):表示第一个DHCP中继的IP地址。当客户端发出DHCP请求时,第一个DHCP中继在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段。DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。

Chaddr(client hardware address):客户端的MAC地址。

Sname(server host name): 表示客户端获取配置信息的服务器名字。此字段由DHCP服务器填写,是可选的。如果填写,必须是一个以0结尾的字符串。

File(file name): 表示客户端启动DHCP相关配置的文件名。此字段由DHCP服务器填写,随着DHCP地址分配的同时下发至客户端。本字段是可选的,如果填写,必须是一个以0结尾的字符串。

Options:DHCP通过此字段包含了服务器分配给终端的配置信息。

Options预定义选项字段介绍

DHCP报文中Options字段为可变长度字段,最多为312Byte,此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。

Options字段由Type、Length和Value三部分组成。其中Type字段取值范围1~255。

Type

Length (Byte)

Value

作用

1

4

Subnet Mask

设置子网掩码选项。

3

4

Router(网关)

设置网关地址选项。

43 厂商特定信息选项。

50

4

Requested IP Address

设置请求IP地址选项。

51

4

IP Address Lease Time

设置IP地址租约时间选项。

53

1

Message Type

设置DHCP消息类型。

54

4

DHCP Server Identifier

设置服务器标识。

55

9

Parameter Request List

设置请求选项列表。客户端利用该选项指明需要从服务器获取哪些网络配置参数。

58

4

Rebinding Time Value

设置续约T1时间,一般是租期时间的50%。

59

4

Renewal Time Value

设置续约T2时间。一般是租期时间的87.5%。

82 中继代理信息选项。

Type=53(DHCP的消息类型)

DHCP报文通过Options选项中的Type=53来表示DHCP的报文类型。当Type=53,Length=1,Value取值从01到08分别表示不同的DHCP报文类型。

1-DHCP DISCOVER:DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个消息,用来寻找DHCP服务器。

2-DHCP OFFER:DHCP服务器用来响应DHCP DISCOVER消息,此消息携带了各种配置信息。
    
3-DHCP REQUEST:DHCP客户端广播请求回应DHCP服务器OFFER消息;DHCP客户端重启广播确认之前的IP地址等配置信息;续租。

4-DHCP DECLINE:当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此消息来通知服务器。

5-DHCP ACK:DHCP服务器对客户端的DHCP REQUEST消息的确认响应消息。

6-DHCP NAK:服务器对客户端的DHCP REQUEST消息的拒绝响应消息。

7-DHCP RELEASE:客户端可通过发送此消息主动释放服务器分配给它的IP地址。

8-DHCP INFORM:DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP INFORM请求消息。

Type=82(中继代理信息选项)

Option 82中可以包含最多255个Sub-Option,若定义了Option 82,至少要定义一个Sub-Option。

DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option 82,并转发给DHCP服务器。管理员可以从Option 82中获得DHCP客户端的信息,例如DHCP客户端所连接交换机端口的VLAN ID、二层端口号、中继设备的MAC地址等。

常用的Sub-Option如下:

Sub-Option 1:为代理电路id(即circuit id)子项。子选项通常在DHCP中继设备上配置,定义了在传输报文的时候要携带DHCP客户端所连接交换机端口的vlan-id及二层端口号。通常Sub-Option 1与Sub-Option 2子选项要共同使用来标识DHCP源端的信息。 

Sub-Option 2:代理远程id(即remote id)子项。该子选项也通常在DHCP中继设备上配置,定义了在传输报文的时候要携带中继设备的mac地址信息。

和Sub-Option 5:为链路选择(link selection)子项,该选项中包含了DHCP中继添加的ip地址。这样DHCP server在分配ip地址给DHCP客户端的时候就可以分配与该地址同网段的ip地址。

Type=43(厂商特定信息选项)

DHCP服务器和DHCP客户端通过Option 43交换厂商特定的信息。当DHCP服务器接收到请求Option 43信息的DHCP请求报文(Option 55中带有Option 43参数)后,将在回复报文中携带Option 43,为DHCP客户端分配厂商指定的信息。

例如:在WLAN组网中,AP作为DHCP客户端,DHCP服务器通过option 43选项字段向AP通告AC的IP地址,以方便AP与AC建立连接。 

抓包观察

1 报文类型:2(服务器响应报文)

2 硬件地址的类型:以太网

3 硬件地址的长度:6字节

4 经过的DHCP 中继数目:0个

5 DHCP客户端选取的随机数:0x00004e33

6 IP地址使用时间:0秒

7 报文响应形式:单播

8 服务器分配给客户端的IP地址:192.168.1.254

9 第一个中继IP地址:192.168.1.1

10 客户端MAC地址:54:89:98:94:1e:41

11 没有配置服务器名

12 没有配置文件名

13 DHCP消息类型:Offer

14 DHCP子网掩码:255.255.255.0

15 DHCP网关选项

16 DHCP租期选项

17 DHCP续约T2时间选项

18 DHCP续约T1时间选项

19 DHCP服务器标识:10.1.0.2

DHCP分配IP地址顺序

1 DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。 

2 客户端以前曾经使用过的IP地址,即客户端发送的请求报文中请求IP地址选项的地址。

3 在DHCP地址池中,顺序查找可供分配的空闲IP地址,最先找到的IP地址。

4 如果在DHCP地址池中未找到可供分配的空闲IP地址,则依次查询超过租期、发生冲突的IP地址,如果找到可用的IP地址,则进行分配,否则报告错误。
 

DHCP地址租期与续租

DHCP服务器给每个分配给客户端的IP地址定义一个使用期限,该使用期限被称为租期。

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

DHCP客户端根据IP地址的剩余租期的不同而产生不同形式的续租请求。

当租期达到50%时(T1时间),DHCP客户端会自动以单播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应DHCP ACK报文,则租期更新成功。

当租期达到87.5%时(T2时间),如果仍未收到DHCP服务器的应答,DHCP客户端会自动以广播的方式向DHCP服务器发送DHCP REQUEST报文,请求更新IP地址租期。如果收到DHCP服务器回应DHCP ACK报文,则租期更新成功。

如果租期时间到时都没有收到服务器的回应,或者收到DHCP NAK报文,客户端停止使用此IP地址重新发送DHCP DISCOVER报文请求新的IP地址。

相关命令

配置全局DHCP地址租期

[R1-ip-pool-dhcp1]lease day 0 hour 0 minute 30 

配置接口DHCP地址租期

[R1-GigabitEthernet0/0/1]dhcp server lease day 0 hour 0 minute 30

主机主动释放获得的DHCP地址

PC>ipconfig /release 

主机获取新的DHCP地址

PC>ipconfig /renew 

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

DHCP客户端非首次接入网络时,可以重用曾经使用过的地址。

选择阶段

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

确认阶段

DHCP服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录。如果有则返回DHCP ACK报文,通知DHCP客户端可以继续使用这个IP地址,如果没有租约记录,则不响应

DHCP Relay

DHCP Relay指DHCP中继。当DHCP服务器和客户端在不同的三层网络中时,报文无法通过广播到达,此时就需要有设备作为DHCP中继,确保DHCP服务器和客户端之间的正常通信

DHCP Relay工作原理

选择阶段和确认阶段工作基本相同。

1 发现阶段 

DHCP中继收到DHCP DISCOVER报文后,处理规则为:

检查DHCP报文中的Hops字段,如果大于16,则丢弃DHCP报文;否则,将Hops字段加1(表明经过一次DHCP中继),并继续下面的操作。

检查是否为第一中继:检查DHCP报文中的Giaddr字段。如果是0,将Giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。

将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。

2 提供阶段

DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中Giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向Giaddr字段标识的DHCP中继单播发送DHCP OFFER报文,DHCP中继收到DHCP OFFER报文后,会进行如下处理:

确认是否为中继OFFER:检查报文中的Giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。

确认是单播还是广播:DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
 

相关命令

在接口下启用DHCP中继功能

[R2-GigabitEthernet0/0/1]dhcp select relay 

配置服务器IP地址

[R2-GigabitEthernet0/0/1]dhcp relay server-ip 192.168.2.254

创建DHCP服务器组

[R2]dhcp server group mid

在DHCP服务器组中配置DHCP服务器成员

[R2-dhcp-server-group-mid]dhcp-server 10.1.0.2
[R2-dhcp-server-group-mid]dhcp-server 10.2.0.2
[R2-dhcp-server-group-mid]dhcp-server 10.3.0.2

在接口应用服务器组

[R2-GigabitEthernet0/0/1]dhcp relay server-select mid 

开启接口下的DHCP Client功能

[R2-GigabitEthernet0/0/1]ip address dhcp-alloc 

查看DHCP配置

查看地址池情况

[R2]display ip pool 

  IP address Statistic
    Total       :0     
    Used        :0          Idle        :0     
    Expired     :0          Conflict    :0          Disable   :0     

Used:表示此IP地址已使用。

Idle:表示此IP地址处于空闲状态。

Expired:表示此IP地址租期已过,处于空闲状态。

Conflict:表示此IP地址与网络上其他地址冲突。

Disable:表示此IP地址无法使用。

查看DHCP客户端信息

[R2]display DHCP client 

查看DHCP relay信息

[R2]display dhcp relay all 

配置举例

DHCP 中继配置

#
dhcp enable
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.1 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 192.168.1.1 255.255.255.0 
 dhcp select relay
 dhcp relay server-ip 10.1.0.2
#

DHCP 服务器配置

#
dhcp enable
#
ip pool dhcp1
 gateway-list 192.168.1.1 
 network 192.168.1.0 mask 255.255.255.0 
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.2 255.255.255.0 
 dhcp select global
#

DHCP Snooping

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

相关命令

开启DHCP Snooping功能(开启DHCP Snooping功能之前,必须已使用命令dhcp enable开启了全局DHCP功能。开启DHCP Snooping功能的顺序是先开启全局下的DHCP Snooping功能,再开启接口或VLAN下的DHCP Snooping功能)

//全局下开启
[SW1]dhcp snooping enable 

//接口下开启
[SW1-GigabitEthernet0/0/1]dhcp snooping enable

//vlan下开启
[SW1-vlan10]dhcp snooping enable

//批量开启vlan
[SW1]dhcp snooping enable vlan 10 to 20

查看接口下的DHCP Snooping状态

<SW1>display dhcp snooping interface GigabitEthernet 0/0/1

DHCP Snooping绑定表

二层接入设备使能了DHCP Snooping功能后,从收到DHCP ACK报文中提取关键信息(包括PC的MAC地址以及获取到的IP地址、地址租期),并获取与PC连接的使能了DHCP Snooping功能的接口信息(包括接口编号及该接口所属的VLAN),根据这些信息生成DHCP Snooping绑定表。

由于DHCP Snooping绑定表记录了DHCP客户端IP地址与MAC地址等参数的对应关系,故通过对报文与DHCP Snooping绑定表进行匹配检查,能够有效防范非法用户的攻击。

注意:在连接用户的接口或VLAN下使能DHCP Snooping功能之后,需要使用命令dhcp snooping trusted将连接DHCP服务器的接口配置为“信任”模式,两者配合使用才能生成绑定表。

相关命令

查看绑定表

<SW1>display dhcp snooping user-bind all

四种DHCP攻击

DHCP Snooping可以针对三种主要的攻击进行防御:1 DHCP饿死攻击-改变CHADDR 2 饿死攻击-同时改变CHADDR和MAC 3 仿冒DHCP Server攻击 4 DHCP中间人攻击

针对DHCP饿死攻击-改变CHADDR进行防御

攻击方法:饿死攻击-改变CHADDR

防御方法:开启dhcp-chaddr检查

DHCP Snooping技术支持在端口下对DHCP Request报文的源MAC地址与CHADDR进行一致性检查:如果二者相同,则转发报文;如果二者不相同,则丢弃。

相关命令

开启dhcp-chaddr检查

//在全局下配置批量vlan
[SW1]dhcp snooping check dhcp-chaddr enable vlan 10 to 20

//在接口下配置
[SW1-GigabitEthernet0/0/1]dhcp snooping check dhcp-chaddr enable 

//在vlan下配置
[SW1-vlan10]dhcp snooping check dhcp-chaddr enable 

针对饿死攻击-同时改变CHADDR和MAC进行防御

攻击方法:饿死攻击-同时改变CHADDR和MAC

防御方法:限制交换机接口学习MAC地址数量

可以通过DHCP Snooping的MAC地址限制功能来防止。该功能通过限制交换机接口上允许学习到的最多MAC地址数目,防止通过变换MAC地址,大量发送DHCP请求。

相关命令

配置允许学习的DHCP Snooping绑定表项的最大个数

//在全局下配置(可以批量配置vlan)
[SW1]dhcp snooping max-user-number ?
  INTEGER<1-1024>  Max user number value

//在接口下配置
[SW1-GigabitEthernet0/0/1]dhcp snooping max-user-number ?
  INTEGER<1-1024>  Max user number value

//在vlan下配置
[SW1-vlan10]dhcp snooping max-user-number ?
  INTEGER<1-1024>  Max user number value

针对仿冒DHCP Server攻击进行防御

攻击方法:仿冒DHCP Server

防御方法:开启Trusted端口

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地址及提供其他网络参数。

相关命令

配置接口为信任状态(缺省情况下,设备接口为非信任状态。配置dhcp snooping enable命令的接口,收到DHCP请求报文后,转发给所有的信任接口;收到DHCP响应报文后丢弃。 配置dhcp snooping trusted命令的接口,收到DHCP请求报文后,转发给所有的信任接口,如果没有其他信任接口,则丢弃该DHCP请求报文;收到DHCP响应报文后,只转发给连接对应客户端的并且配置命令dhcp snooping enable的接口,如果查不到上述接口,则丢弃该DHCP响应报文。

也就是说:连接客户端的接口配置了dhcp snooping enable命令后,连接服务器的接口必须同时配置dhcp snooping enable命令和dhcp snooping trusted命令,相互之间才能正常运行DHCP。)

//在接口下配置
[SW1-GigabitEthernet0/0/1]dhcp snooping trusted 

//在VLAN下配置
[SW1-vlan10]dhcp snooping trusted interface GigabitEthernet 0/0/1

针对DHCP中间人攻击进行防御

攻击方法:DHCP中间人攻击(利用ARP机制)

防御方法:开启ARP与DHCP Snooping的联动功能

运行了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等等信息。

相关命令

开启ARP与DHCP Snooping的联动功能

[SW1]arp dhcp-snooping-detect enable 

猜你喜欢

转载自blog.csdn.net/x629242/article/details/126634030