前置:

为解决传统的静态手工配置方式的不足,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)应运而生,其可以实现网络动态合理地分配IP地址给主机使用。DHCP采用C/S构架,主机无需配置,从服务器端获取地址,可实现接入网络后即插即用。

DHCP的工作原理:

DHCP.png
首先,主机作为客户端,服务器是服务端,两者之间互联的环境是二层广播域,这很重要。因为开始的第一个数据包是由客户主动发起的,叫做DHCP Discover报文(也叫发现报文)其目的是为了寻找服务器,所以用的是广播包。所以互联环境是二层广播域,就一定可以泛洪给服务器
服务器收到广播之后,立刻分配一个IP一个掩码一个网关和其他选项(有时候出了分配IP掩码网关之外可能还要分配服务器地址,比如说无线的),也就是DHCP Offer(单播)报文,客户端收到之后,要使用这个地址了,就要先发一个DHCP Request(广播)请求报文,目的是告知服务端会用这个地址
为啥要先告知?因为网络中可能会有多个服务器 ,那么每个服务端分配的IP地址可能是不一样的。比如说一个分1.1,一个分1.2,客户端假设选了1.1(先到先得原则),1.2就不用了。那么客户端就要广播”我用了1.1“,那么1.2就会被释放给其他主机使用。最后服务器就会保留1.1并通过DHCP ACK(单播)确认报文告知客户端,可以使用1.1
拓展:在到达最后的确认之前,所有的通信过程中主机的源IP都是0.0.0.0作为未知地址来和服务器通信

租期是什么?为什么要有租期?

比如说,服务器分配的时间是8小时,主机获得这个地址之后可以用8小时当租期还剩50%的时候也就是4个小时的时候,主机会单播发送一个HDCP Request报文请求延期,服务器收到后再单播DHCP ACK告知主机可以继续使用并重新8小时计时。但是如果客户主机发的这个DHCP Request单播服务器没收到,也可以继续用,但是8小时到87.5%的时候客户主机会再次发送请求
之所以要有租期是因为正常主机关机,关机之前会发送一个释放信息,但是如果是直接拔电源,那么主机在关机之前没办法告知服务器,服务器就只能通过租期来强制释放

配置命令の介绍:

  1. 开启DHCP功能

[Huawei] dhcp enable
2. 开启接口采用接口地址池的DHCP服务器端功能
[Huawei-Gigabitthernet0/0/0]dhcp select interface
3. 指定接口地址池下的DNS服务器地址
[Huawei-Gigabitthernet0/0/0]dhcp server dns-list ip-address
4. 配置接口地址池中不参与自动分配的IP地址范围
[Huawei-Gigabitthernet0/0/0]dhcp server excluded-ip-address start-ip-address [ end-ip-address ]
5. 配置DHCP服务器接口地址池中IP地址的租用有效期限功能 (缺省情况下,IP地址的租期为1天。)
[Huawei-Gigabitthernet0/0/0]dhcp server lease { day day [ hour hour[ minute minute ] ] | unlimited }
6. 创建全局地址池
[Huawei]lip pool ip-poolname
7. 配置全局地址池可动态分配的IP地址范围
[Huawei-ip-pool-2]network ip-address [ mask { mask| mask-length } ]
8. 配置DHCP客户端的网关地址
[Huawei-ip-pool-2]gateway-list ip-address
9. 配置DHCP客户端使用的DNS服务器的IP地址
[Huawei-ip-pool-2]dns-list ip-address
10. 配置IP地址租期
[Huawei-ip-pool-2] lease { day day [ hour hour [ minute minute ] ] | unlimited }
11. 使能接口的DHCP服务器功能
[Huawei-Gigabitthernet0/0/0]dhcp select global

实验:

  • 配置接口地址池
  • 配置全局地址池

配置接口地址池:

配置接口地址池非常简单,这是他的拓扑图
接口地址池
LSW1只是起一个二层的广播域的作用,我们只需要配置AR1

1
2
3
4
5
6
7
<Huawei>sys
[Huawei]sys AR1
[AR1]dhcp enable # 全局启用DHCP服务功能
[AR1]int g0/0/0 # 进入千兆以太网接口0/0/0的配置模式
[AR1-GigabitEthernet0/0/0]ip address 192.168.10.1 24 # 配置接口IP地址为192.168.10.1,子网掩码24位(255.255.255.0)
[AR1-GigabitEthernet0/0/0]dhcp select interface # 启用接口地址池模式,使用接口地址池为该接口连接的客户端分配IP地址
[AR1-GigabitEthernet0/0/0]dhcp server dns-list 192.168.10.1 # 配置DHCP分配的DNS服务器地址为192.168.10.1(通常是路由器自身)

将拓扑中的PC1的ipv4配置改为DHCP后在命令行中执行ipconfig会得到以下信息

1
2
3
4
5
6
7
8
9
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe9a:7599
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.10.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.10.1
Physical address..................: 54-89-98-9A-75-99
DNS server........................: 192.168.10.1

至此我们完成了最简单的接口地址池的配置

配置全局地址池:

配置全局地址池和配置接口地址池的拓扑图相同
全局地址池
在配置上与接口地址池有稍微不同的地方

1
2
3
4
5
6
7
8
9
10
11
<Huawei>sys
[Huawei]sys AR1
[AR1]dhcp enable # 全局启用DHCP服务功能
[AR1]int g0/0/0 # 进入千兆以太网接口0/0/0的配置模式
[AR1-GigabitEthernet0/0/0]ip address 192.168.10.1 24 # 配置接口IP地址为192.168.10.1,子网掩码24位(255.255.255.0)
[AR1-GigabitEthernet0/0/0]dhcp select global # 启用全局地址池模式,使用全局地址池为该接口连接的客户端分配IP地址
[AR1-GigabitEthernet0/0/0]q
[AR1]ip pool 1 # 创建名为"1"的全局IP地址池
[AR1-ip-pool-1]network 192.168.10.0 mask 255.255.255.0 # 配置地址池的网络范围为192.168.10.0/24
[AR1-ip-pool-1]gateway-list 192.168.10.1 # 配置客户端网关地址为192.168.10.1
[AR1-ip-pool-1]dns-list 192.168.10.1 # 配置DNS服务器地址为192.168.10.1

将拓扑中的PC1的ipv4配置改为DHCP后在命令行中执行ipconfig会得到以下信息

1
2
3
4
5
6
7
8
9
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe9a:7599
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.10.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.10.1
Physical address..................: 54-89-98-9A-75-99
DNS server........................: 192.168.10.1

至此我们完成了最简单的全局地址池的配置

接口地址池和全局地址池有什么区别

接口地址池(Interface Address Pool)

  • 绑定到特定接口:地址池仅关联到路由器或交换机的某个物理接口(如GigabitEthernet0/1)或逻辑接口(如VLAN接口)
  • 仅服务直连子网:只有连接到该接口所在子网的客户端才能从该地址池获取IP地址
  • 适用于简单网络:通常用于单子网场景,无需跨网段分配地址
    全局地址池(Global Address Pool)
  • 独立于接口存在:地址池在全局配置模式下创建,不与特定接口绑定
  • 支持多子网分配:通过DHCP中继(Relay Agent),可为不同子网的客户端分配IP地址
  • 适用于复杂网络:常用于多子网或需要集中管理的环境

拓展(DHCP relay中继):

首先先看一下拓扑图:
DHCP_Relay.png
DHCP本来要求的是客户端和服务端是二层广播域互联,但是在企业网中vlan比较多,如果每一个vlan都部署一个服务器,服务器就太多了,所哟有时候会集中部署服务器,上图所示AR2为DHCP服务器。那么就会产生一个问题,服务器和客户端之间隔离了一个三层设备,这时候就要在网关上启用中继功能。
配置DHCP relay分为四个部分

  1. 划分Vlan20 和 Vlan30并实现Vlan间的互通
  2. 配通AR1和AR2连接,使AR2能够ping通AR1的子接口GE0/0/0.20和GE0/0/0.30
  3. 在AR2上配置DHCP服务并设置为全局地址池
  4. 在AR1上配置DHCP中继

第一部分:

参考前一篇文章使用路由器子接口实现

第二部分:

我们需要给AR1的GE0/0/1和AR2的GE0/0/0口分别配置上23.1.1.2/24和23.1.1.3/24(举例,可以换成1.1.1.1等ip)

1
2
3
<AR1>sys
[AR1]int g0/0/1
[AR1-GigabitEthernet0/0/1]ip address 23.1.1.2 24
1
2
3
<AR2>sys
[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]ip address 23.1.1.3 24

此时,AR1和AR2可以相互ping通
AR1和AR2互ping
但是此时我们发现一个问题,我们在AR2上ping不通192.168.20/30.254,这是什么情况?缺少了路由,此时需要我们给AR2配置上静态路由

1
2
3
4
5
6
[AR2]ip route-static 192.168.20.0 24 23.1.1.2
# 配置静态路由:目的网络192.168.20.0/24,下一跳地址23.1.1.2
# 含义:将所有去往192.168.20.0/24网段的流量转发到23.1.1.2
[AR2]ip route-static 192.168.30.0 24 23.1.1.2
# 配置静态路由:目的网络192.168.30.0/24,下一跳地址23.1.1.2
# 含义:将所有去往192.168.30.0/24网段的流量转发到23.1.1.2

配置ip静态路由的命令 ip route-static 目的网段 子网掩码 下一条入口IP

此时就可以ping通192.168.20/30.254了
AR2ping通192.168.20.254

第三部分:

参考本文配置全局地址池

第四部分:

接下里配置中继,中继是配置在网关上的,现在子接口作为网关,中继就配置在子接口上(物理界和vlanif接口是网关就配置在物理接口和vlanif上)

1
2
3
4
5
6
7
8
[AR1]dhcp enable # 全局启用DHCP服务功能
[AR1]int g0/0/0.20
[AR1-GigabitEthernet0/0/0.20]dhcp select relay # 将该接口设置为DHCP中继模式(不直接提供DHCP服务,而是转发DHCP请求)
[AR1-GigabitEthernet0/0/0.20]dhcp relay server-ip 23.1.1.3 # 指定DHCP服务器的IP地址为23.1.1.3,所有DHCP请求将转发到此服务器
[AR1-GigabitEthernet0/0/0.20]int g0/0/0.30
[AR1-GigabitEthernet0/0/0.30]dhcp select relay # 将该接口设置为DHCP中继模式(不直接提供DHCP服务,而是转发DHCP请求)
[AR1-GigabitEthernet0/0/0.30]dhcp relay server-ip 23.1.1.3 # 指定DHCP服务器的IP地址为23.1.1.3,所有DHCP请求将转发到此服务器
#这样网关收到广播请求之后机会单播发给AR2,并且是以源IP为子接口地址,目的IP为23.1.1.3封装单播

最后PC1和PC2能分别获取到对应网段的ip地址
PC1和PC2分别获取到对应网段的ip地址