DHCP介绍

in 默认分类 with 0 comment

2025-09-22T15:33:10.png

DHCP使一种用于集中对于用户IP地址进行动态管理和配置的协议。

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

基于接口的DHCP


配置如下:

[R1]DHCP enable
[R1]int g0/0/0
[R1-G 0/0/0]ip address 192.168.1.1 24
[R1-G 0/0/0]dhcp selcet interface  //此时将自动创建一个ip pool。后续自动获取的IP地址为192.168.1.x /24
[R1-G 0/0/0]dhcp server dns-list 192.168.1.66
[R1] display ip pool inferface g 0/0/0   //查看接口下的ip pool 的状态

如果对端客户端为路由器,则需在对端中配置

[R2]DHCP dhcp enable
[R2-g 0/0/0]ip address dhcppalloc

DHCP-DORA报文


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

2025-09-23T10:22:42.png

1)discovery:发现--客户端--广播方式用来发现DHCP服务器。(源IP:0.0.0.0 目标IP:255.255.255.255)
2)offer:提供--服务端--单播方式提供客户端IP、掩码、网关及DNS等信息(源IP:DHCP服务器IP地址 目标IP:分配的IP地址)
3)request:请求--客户端--广播方式用来选择某个DHCP服务器提供的参数(假如有多个DHCP服务器,则会采用先到先得的机制,同时另一台DHCP服务器回收本要发送的IP地址)(源IP:0.0.0.0 目标IP:255.255.255.255)
4)ack:发现--服务端--单播方式确认DHCP正式分配给该客户端。(源IP:DHCP服务器IP地址 目标:分配的IP地址)

最后发送三个免费ARP,源IP和目标IP地址都是DHCP分配的IP地址,如果正常通过,则获取该IP地址。

2025-09-23T10:18:26.png

除此之外还有四种报文:
5)release:释放--当客户端找不到DHCP服务端时且当租约时期到后将会释放;
6)declien:减少--检测是否IP地址是否冲突,当获取IP地址并发送免费ARP时,有设备回应此ARP时,则会declien,告知DHCP服务器有冲突。告知后则将重新discovery-offer-request-ack,获取新的IP并重新发送免费ARP指导获取无冲突的IP地址为止
7)nak:拒绝--服务器对客户端DHCP request 消息拒绝响应;
8)inform:DHCP客户端获取IP地址后,如果需要需要向DHCP获取更为详细的配置信息网关地址、DNS服务器地址,则向DHCP服务器发送DHCP inform请求消息。

拓扑如下所示:

2025-09-22T15:33:37.png

DHCP报文结构

Op(op code):表示报文的类型,取值为1或2,含义如下:
1:客户端请求报。
2:服务器响应报文。
Secs(seconds):由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数,缺省值为3600s。
Flags:客户端请求服务器发送响应报文的形式,只有最高位有意义,其余15位置0。最高位为0时请求发送单播响应,最高位为1时请求发送广播响应。
Yiaddr(your client ip address):表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。
Siaddr(server ip address):DHCP服务器的IP地址。
Chaddr(client hardware address):客户端的MAC地址。
Options:DHCP通过此字段包含了服务器分配给终端的配置信息。

2025-09-23T10:21:00.png

Options预定义选项字段介绍
Options字段由Type、Length和Value三部分组成。其中Type字段取值范围1~255。除了标准协议中规定的字段选项外,还有部分选项内容没有统一规定,统称为用户自定义选项,例如Option 82和Option 43。Option 82称为中继代理信息选项。Option 43称为厂商特定信息选项。

2025-09-23T10:21:48.png

DHCP租约时间


对于DHCP来说,任何IP地址均是租出去的,并不是永久分配。在DHCP中,被称之为“租约时间”。华为设备默认租约时间为1天(86400s)可通过命令进行修改

命令

[R1]DHCP enable
[R1]int g0/0/0
[R1-G 0/0/0]ip address 192.168.1.1 24
[R1-G 0/0/0]dhcp selcet interface  
[R1-G 0/0/0]dhcp server dns-list 192.168.1.66
[R1-G 0/0/0]dhcp server lease day 0 hour 0 min 1  //设置IP租期为0天0小时1分钟


DHCP地址续租


DHCP客户端根据IP地址的剩余租期不同而产生不同形式的租约续租请求:Time 1和 Time 2;
1)Time 1:当租期达到50%时,DHCP客户端会自动以单播形式发送DHCP request 报文,请求更新DHCP租期,如果收到DHCP服务器回应的DHCP ACK报文,则租期更新成功;

2)Time 2:当租期达到87.5%切未收到DHCP服务器的应答时,DHCP客户端会自动以广播形式发送DHCP request 报文,请求更新IP地址租期,如果DHCP服务器回应DHCP ACK报文,则租期更新成功;

3)如果租期时间到时没有收到服务器回应,客户端停止使用此IP地址并释放(DHCP release),重新发送DHCP discovery报文,请求新的IP地址。

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

DHCP客户端非首次接入网络时,可以重用曾经使用过的地址。例如,网络中的主机作为DHCP客户端,在关机再开机的过程中,需要重新获取相关网络参数,则可以请求分配曾经使用过的IP地址。

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

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

DHCP中继

DHCP客户端和服务端有可能不在同一网段,那么客户端发出的discovery 发现(广播)服务端收不到,所以需要将这个广播包变成单播包,这就是中继的作用。

PS:中继还在中继的路由器接口中配置,192.168.1.1中继过来的就会找到对应的1.1的地址池,192.168.2.1中继过来的就会找到对应2.1的地址池!在DHCP路由器中,重中之重是配置默认路由!

以下实验除中继之外,在ip pool 1中配置了地址排除,ip pool 2 中配置了mac地址绑定。

2025-09-24T10:49:01.png

配置如下:

DHCP路由器配置

<Huawei>sys
[Huawei]sys dhcp
[dhcp]int g0/0/0
[dhcp-GigabitEthernet0/0/0]ip add 88.88.88.9 24
[dhcp-GigabitEthernet0/0/0]quit
[dhcp]dhcp enable 
[dhcp]ip pool 1
[dhcp-ip-pool-1]network 192.168.1.0 mask 24
[dhcp-ip-pool-1]gateway-list 192.168.1.1
[dhcp-ip-pool-1]dns 114.114.114.114
[dhcp-ip-pool-1]excluded-ip-address 192.168.1.201 192.168.1.254
[dhcp-ip-pool-1]quit
[dhcp]ip pool 2
[dhcp-ip-pool-2]network 192.168.2.0 mask 24
[dhcp-ip-pool-2]gateway-list 192.168.2.1
[dhcp-ip-pool-2]dns 8.8.8.8
[dhcp-ip-pool-2]static-bind  ip-address 192.168.2.100 mac-address 5489-98e6-054e
[dhcp-ip-pool-2]quit
[dhcp]int g0/0/0
[dhcp-GigabitEthernet0/0/0]dhcp select global 
[dhcp-GigabitEthernet0/0/0]
[dhcp-GigabitEthernet0/0/0]quit
[dhcp]ip route-static 0.0.0.0 0.0.0.0 88.88.88.8


relay路由器配置

<Huawei>SYS
[Huawei]sys relay
[relay]int g0/0/0
[relay-GigabitEthernet0/0/0]ip add 88.88.88.8 24
[relay]dhcp enable 
[relay]int g1/0/0
[relay-GigabitEthernet1/0/0]ip add 192.168.1.1 24
[relay-GigabitEthernet1/0/0]int g2/0/0
[relay-GigabitEthernet2/0/0]ip add 192.168.2.1 24
[relay-GigabitEthernet2/0/0]quit
[relay]int g1/0/0    
[relay-GigabitEthernet1/0/0]dhcp select relay 
[relay-GigabitEthernet1/0/0]dhcp relay server-ip 88.88.88.9
[relay-GigabitEthernet1/0/0]quit
[relay]int g2/0/0    
[relay-GigabitEthernet2/0/0]dhcp select relay 
[relay-GigabitEthernet2/0/0]dhcp relay server-ip 88.88.88.9
[relay-GigabitEthernet2/0/0]quit

PC1和PC2最终效果如下所示:

2025-09-24T10:46:59.png

snooping 嗅探


为解决网络中存在“流氓”DHCP服务器的问题,在园区网络中,可能会存在私接无线路由器的情况,由于DHCP采用先到先得机制,无法辨别正常的DHCP服务器,如果客户端通过流氓的DHCP服务器即使获取了IP地址,也无法连接Internet问题。

DHCP snooping部署在接入交换机中,当开启DHCP snooping 后,交换机相当于建立了一个DHCP流量防火墙,默认情况下,所有接口都是untrust 非信任接口,无法转发DHCP的报文,只有配置了Trust信任接口后,才可以转发DHCP报文。从信任接口配置在DHCP和接入交换机的上联接口上。(朝着正确的DHCP服务器的端口配置Trust 信任接口即可)

2025-09-24T11:21:21.png

获取到流氓DHCP的IP地址,此时ping 8.8.8.8 则不通
2025-09-24T11:31:35.png

当获取到DHCP服务器中的IP地址时,则可正常通信。
2025-09-24T11:37:02.png

重新获取时,只会获取到DHCP服务器的IP地址
2025-09-24T11:40:54.png

流氓DHCP则不会响应。
2025-09-24T11:42:04.png

DHCP安全机制

当开启了DHCP snooping 后,交换机由于嗅探了DHCP报文内容,可以查看到IP地址,租约时间和MAC地址。

查看DHCP snooping 嗅探绑定表命令

[sw1]dispaly dhcp snooping user-bind all

DAI:Dynamic arp inspection--动态ARP检测(需重新观看)

如果流量通过符合DHCP的嗅探绑定表则放行,否则则丢弃。(防止ARP攻击)

[sw1-g0/0/1]arp anti-attack check user-bind enable,结合DHCP snooping 嗅探绑定表来抵御动态 ARP攻击

IPSG:IP source guard--IP源防护(需重新观看)

如果源IP通过符合DHCP的嗅探绑定表则放行,否则则丢弃。(防止手动修改IP地址)

[sw1-g0/0/1]ip source check user-bind enable,结合DHCP snooping 嗅探绑定表来抵御手动修改IP地址

Responses