前言

现在我们都知道了网络通信需要IP地址,那么回想下我们的日常生活,电脑、手机、智能家电等设备连接家庭网络时,似乎都没有配置过ip地址。

获得IP地址的途径主要有两个:

  1. 通过手工配置的方式,即静态IP地址配置。

    这种方式适用于终端设备较少的场景,或者从网络管理及安全的角度考虑,对设备与IP地址的绑定关系存在严格要求的场景等。

    另外,服务器、网络打印机等大多数网络设备通常有稳定的通信及控制需求,因此往往采用静态IP地址的方式进行配置。

  2. 通过DHCP来分配及管理IP地址。

    在终端设备的数量较多,而且网络对IP地址没有严格管控需求的场景中,或者在诸如访客网络这样的频繁有匿名用户上、下线的场景中,DHCP是一个非常不错的选择,它可以极大限度地简化网络管理,满足通信需求。

DHCP (Dynamic Host Configuration Protocol,动态主机配置协议)是一种非常常见的技术,用于对设备的IP地址等信息进行自动分配和管理。

DHCP是一种采用客户端/服务器通信模式的网络协议。 服务器并不是严格意思上的物理设备,而是指应用服务程序,这个应用程序通常运行在路由器或者服务器上,(以免误会,本文采用DHCP Server的名称)

客户端指客户端程序,通常运行在终端设备上(电脑、手机等)。

DHCP工作原理

先决条件:DHCP Server需要先配置一个IP地址池,并且地址池中有空闲IP可用。

这时对于一台终端来说,其申请一个IP地址会有以下四个过程:

发现阶段-DHCP DISCOVER

PC1上的DHCP客户端会在网络上查找是否存在DHCP Server:

PC1发送一个数据帧,这是一个广播帧,同时数据帧内部的[ 数据内容 ]是IP报文,是一个广播报文。

也就是说数据帧的源地址为PC1自己的MAC地址,目的地址为FF-FF-FF-FF-FF-FF。

数据帧内承载的IP报文的源IP地址为0.0.0.0(任意地址,因为目前自己还没有IP地址),目的IP地址为255.255.255.255(广播地址)

基于以上两条,就能保证该数据包会被网络上所有设备接收。

之后,IP报文内承载着一个UDP报文,源端口68,目的端口为67,承载的数据内容为DHCP Discover,这是用来发送给DHCP server的。

若设备未启用DHCP Server,则它不会开启并监听67端口,因此收到目的端口为67的UDP报文,就会丢弃。

若设备启用了DHCP Server,则会开启并监听67端口,因此收到目的端口为67的UDP报文,就会开始处理。

提供阶段-DHCP OFFER

当DHCP Server收到了DHCP Discover信息后,就会回复DHCP Offer信息,以告知自己的存在。

该信息一样是封装在UDP报文中,只不过源目端口要调换一下,源端口为服务器的端口,也就是67;目的端口为客户端的68。

该UDP也是封装在IP广播报文中,再接着封装在广播帧中。

或许你会疑惑:在前一个阶段,也就是DHCP客户端去请求DHCP Server时,对于服务器来说,不是已经从中获取到了DHCP客户端的MAC地址了吗,完全可以在回复时使用单播数据帧。这主要是出于以下几方面的考虑:

  • DHCP是从BOOTP协议演变而来,保留了广播机制以兼容原有网络环境。

  • 使用广播简化了协议的实现,减少了需要处理的特殊情况。

    比如在跨子网的DHCP场景中,DHCP中继代理需要转发DHCP消息。广播使得这个过程更加简单和标准化。

  • 由于DHCP操作相对不频繁,广播带来的额外网络开销通常是可以接受的

请求阶段-DHCP REQUEST

需要注意的一点是,PC1收到的DHCP Offer可能不止一个,因为网络上可能存在多个DHCP Server。

对于DHCP Server而言,作为分配IP的服务;它收到PC1的Discover后,会去检查自己是否有IP可分配,有IP可分配,就会保留该IP,然后发送Offer给PC1。

因此PC在此阶段要去选择接收哪一份Offer中的IP地址,并拒绝其他Offer以让其他DHCP Server可以释放掉准备给自己的IP地址。

一般来说,PC都是选择自己最先收到Offer。

对每个Offer都进行一次回复,这很麻烦,因此DHCP规定了PC直接使用广播报文回复,并且报文内携带有所选的DHCP Server的标识(称为ServerIdentifier)。

用图中的情况来说的话,PC1发送的带有DHCP Request信息的报文,表示PC1的DHCP客户端只愿意接受R1上的DHCP Server所给出的Offer。

如果网络中有其他DHCP Server,它们看到该报文就明白PC1拒绝了它们的Offer,因此可以释放掉准备给PC1的IP地址,留给其他设备用。

确认阶段-DHCP ACK

在确认阶段,R1 上的 DHCP Server 会向 PC 1 上的 DHCP客户端 发送一个 DHCPACK 消息。

值得注意的是,该信息虽然因为PC1还没正式拥有IP地址,所以目的ip地址依旧填写为255.255.255.255,是一个ip广播报文;

但该ip广播报文是封装到单播帧中,目的地址填写为PC1的MAC地址。

PC1上的DHCP客户端接收到R1上的DHCP Server发送的DHCP ACK消息后,就意味着PC1首次获得了DHCP Server分配给自己IP地址。

但PC1还不会马上使用这个IP地址,PC1会去发布一个免费ARP报文以确认该IP地址在网络上是否唯一。

确认唯一,没有IP冲突,PC1才正式使用该IP地址。

租期与续租

需要注意的是,DHCP Server给出的IP地址原则上所有权是DHCP Server的,相当于是租用给其他设备的。

如下是我当前电脑显示的信息:

已启用 DHCP: 是
IPv4 地址: 192.168.235.103
IPv4 子网掩码: 255.255.255.0
获得租约的时间: 2024年7月31日 14:02:06
租约过期的时间: 2024年7月31日 15:02:05
IPv4 默认网关: 192.168.235.91
IPv4 DHCP 服务器: 192.168.235.91

一般来说,DHCP Server给的IP地址,租期都是24小时,时长可人为的在DHCP Server处修改。

租约期内,DHCP客户端才能使用相应的IP地址。当租约期到期之后,DHCP客户端是不被允许继续使用这个IP地址的。

当然了,在租约期还没有到期的时候,DHCP客户端是可以申请续租这个IP地址的。

通过发布DHCP REQUEST报文的方式进行申请续租,如下图所示:

按照DHCP协议的规定,在默认情况下,T1时刻是租约期到了一半的,T2时刻则是租约期到了87.5%。

在T1时刻,,PC1上的DHCP客户端会 以单播方式向R1上的DHCP Server发送一个DHCP REQUEST消息,请求续租IP地址 (也就是请求重新开始租约期的计时)。如果在T2时刻之前,PC 1上的DHCP客户端收到 了回应的DHCP ACK消息,则说明续租已经成功。

如果直到T2时刻, PC1上的DHCP客户端都未收到回应的DHCP ACK消息,那么PC 1上的DHCP客户端会以广播方式发送一DHCP REQUEST消息,继续请求续租IP地址。如果在租约期到期之前,PC1上的DHCP客户端收到了回应的DHCPACK消息,则说明续租成功。

如果直到租约期到期时,PC1上的DHCP客户端仍未收到回应的DHCP ACK消息,那么PC1就必须停止使用原来的IP地址。

此时PC1只能重新从发现阶段开始来重新申请一个IP地址。

另外,如果任何一次请求续租,DHCP Server回复的是DHCP NACK,则表示取消授权,回收IP地址。

PC1需要立刻放弃当前所用IP地址,重新从发现阶段开始来重新申请一个IP地址。

客户端放弃IP

当客户端发现服务器分配给它的IP地址发生冲突时,会通过发送DHCP DECLINE报文来通知服务器,并且会重新向服务器申请地址。

当客户端在租期时间到之前,如果用户不想使用分配的IP地址并使用了相关设置,会触发DHCP客户端向DHCP Server发送DHCP RELEASE报文,通知DHCP Server释放IP地址的租期。

DHCP 中继

上一节中我们所描述的DHCP基本工作流程就会发现,DHCP客户端 总是以广播方式来发送DHCP DISCOVER消息和 DHCP REQUEST 消息的。

如果DHCP Server和 DHCP客户端 不在同一个二层网络(广播域)中,那么DHCP Server根本就不可能接收到这些DHCPDISCOVER消息和 DHCPREQUEST 消息。

因此,我们之前所描述的DHCP工作流程,只适合于DHCP Server 和 DHCP客户端位于同一个二层网络的场景。

如果一个公司的网络包含了多个二层网络,那么我们是不是必须在每个二层网络中都至少部署一个DHCP Server呢?

从理论上讲,这样做未尝不可。但实际上,这样做是没有必要的,也是很不经济的。

事实上,,DHCP协议除了定义了DHCP客户端和DHCP Server这两种角色之外,还定义了DHCP Relay Agent (DHCP中继代理)这种角色。

DHCP Relay Agent的基本作用就是专门在DHCP客户端和DHCP Server之间进行DHCP消息的中转。

如图所示,DHCP客户端利用DHCP Relay Agent来从DHCP Server那里获取IP地址等配置参数时;

DHCP客户端必须与DHCP Relay Agent位于同一个二层网络;

但 DHCP Server可以与DHCP Relay Agent位于同一个二层网络,也可以与DHCP Relay Agent位于不同的二层网络。

DHCP客户端与DHCP Relay Agent之间是以广播方式交换 DHCP消息的,但DHCP Relay Agent与DHCP Server之间是以单播方式交换DHCP消息的(这就意味着DHCP Relay Agent必须事先知道DHCP Server的IP地址)。

DHCP snooping

IP地址及默认网关地址、DNS服务器地址等配置信息对于一台终端设备而言是非常重要的。

在一个网络中,如果终端设备接入网络后,获取的IP地址或默认网关地址等信息有误,那么势必造成通信中断或业务受影响。

DHCP的工作机制导致该协议在工作的过程中可能存在漏洞,最典型的问题之一是非法DHCP Server接入网络后,可能导致大量DHCP客户端获取错误的IP地址信息从而无法正常连接网络。(也就是我们常说的私接小路由)

在交换机上部署DHCP Snooping即可解决上述问题。

DHCP Snooping的功能之一是确保DHCP客户端从可信任的DHCP服务器获取合法IP地址等信息。

在交换机上的相应VLAN中激活DHCP Snooping后,交换机的接口将存在两种角色:

  • 信任接口:信任接口允许接收包括DHCP Offer、DHCP ACK、DHCP NACK等在内的DHCP Server应答报文。
  • 非信任接口:非信任接口不会接收包括DHCP Offer、DHCP ACK、DHCP NACK等在内的DHCP Server应答报文。

DHCP Snooping除了以上描述的基本功能外,还支持攻击防范功能:防止DHCP Server拒绝服务攻击、DHCP报文泛洪攻击、仿冒DHCP报文攻击等。

其原理是:

开启DHCP Snooping功能,设备能够通过分析DHCP的报文交互过程,生成DHCP Snooping绑定表,绑定表项包括客户端的MAC地址、获取到的IP地址、与DHCP客户端连接的接口及该接口所属的VLAN(Virtual Local Area Network)等信息。

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

规划

DHCP请求报文是广播的,如果同一网段中存在多个Server(有中继场景时针对的是DHCP中继),客户端只接收第一个收到的DHCP OFFER报文,这样可能会导致最终分配的IP地址不是预期的DHCP Server分配的。

DHCP Server规划时需要注意:

  • 合理规划VLAN,确保同一VLAN内仅有一台DHCP Server(有中继场景时针对的是DHCP中继)能收到此VLAN内客户端的DHCP请求。
  • 在DHCP客户端的上层接入设备上配置DHCP Snooping功能,确保客户端能向正确的DHCP Server申请网络参数。

DHCP Server的地址池可以分为:

  • 基于接口方式的地址池:在DHCP服务器与客户端相连的接口上配置IP地址,地址池是跟此接口地址所属同一网段的IP地址,且地址池中地址只能分配给此接口下的客户端。这种配置方式简单,仅适用于DHCP服务器与客户端在同一个网段的场景。
  • 基于全局方式的地址池:在系统视图下创建指定网段的地址池,且地址池中地址可以分配给设备所有接口下的客户端。当DHCP服务器与客户端不在同一个网段时,需要部署DHCP中继。

根据客户端在线时间合理规划租期。默认情况下,IP地址的租期为24小时。

  • 在客户端流动性较大,在线时间较短的场景中(如咖啡厅、网吧、机场等),需要规划较短的租期,否则,会因为客户端地址来不及释放而造成地址池中地址不够用。

    地址池地址不够用,DHCP Server便不会分配IP地址,客户端则没有IP可用,因此表项为无法联网。(此时,客户机会采用169.254.xxx.xxx的地址)

    曾经在仓库进行装机联网激活几十台PC就遇到过此故障,需要登录服务器后台手动释放已分配的IP地址。

  • 在客户端流动性小,在线时间较长的场景中(如企业办公区等),需要规划较长的租期,否则,会因为客户端不停更新租期或地址而占用系统资源。(一般可不修改,保持默认的24小时)

配置

以下内容主要针对于使用路由器/交换机的配置,并不是使用专门的硬件服务器配置DHCP Server,有关内容之后会单独出一期Windows/Linux中配置DHCP Server的文章。

前提配置

  1. 执行命令system-view,进入系统视图。
  2. 执行命令dhcp enable,开启DHCP功能。默认情况下,DHCP功能处于关闭状态。

配置IP地址池

创建地址池

  • 基于接口方式的地址池

    事实上,此方式无需配置地址池,只要在接口上配置了IP地址,就会默认采用该ip地址的网段信息作为地址池。

  • 基于全局方式的地址池:

    1. 执行命令system-view,进入系统视图。
    2. 执行命令ip pool ip-pool-name,创建全局地址池,同时进入全局地址池视图。配置的ip-pool-name作为标识不同地址池的名字。
    3. 执行命令network ip-address [ mask { mask | mask-length } ],配置全局地址池可动态分配的IP地址范围。

配置客户端的网关

默认情况下,不会在分配IP地址时一同修改客户端的网关。

  • 基于接口方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。
    3. 执行命令dhcp server gateway-list ip-address,配置需要分配给DHCP Client的网关地址。
  • 基于全局方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。
    3. 执行命令gateway-list ip-address,配置DHCP Client的网关地址。

配置客户端的DNS

配置有两种方式,一是自动获取,二是静态指定。

自动获取要求作为DHCP服务器的设备同时作为上层网络的DHCP客户端,设备从远端DHCP服务器获取DNS等配置信息之后,通过地址池的import功能,将这些信息再分配给下行的客户端。

此方式需要配置启用上行接口执行命令ip address dhcp-alloc,开启DHCP Client功能。

例如,某公司的DHCP服务器希望将从运营商获取统一的DNS配置信息,分配给下行的客户端,此时可以选择自动获取方式。

  • 基于接口方式:

    1. 执行命令system-view,进入系统视图。

    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。

    3. 配置地址池将自动获取的DNS配置信息分配给DHCP客户端:

      执行命令dhcp server import all,配置地址池将自动获取的DNS配置信息分配给DHCP客户端。

    4. 配置地址池将静态指定的DNS配置信息分配给DHCP客户端:

      • 执行命令dhcp server dns-list ip-address,为DHCP客户端指定DNS服务器的IP地址。每个地址池最多可以配置8个DNS服务器地址。
      • 执行命令dhcp server domain-name domain-name,配置分配给DHCP客户端的DNS域名后缀。
  • 基于全局的方式:

    1. 执行命令system-view,进入系统视图。

    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。

    3. 配置地址池将自动获取的DNS配置信息分配给DHCP客户端:

      执行命令import all,配置地址池将自动获取的DNS配置信息分配给DHCP客户端。

    4. 配置地址池将静态指定的DNS配置信息分配给DHCP客户端:

      • 执行命令dns-list ip-address,配置DHCP客户端使用的DNS服务器的IP地址。每个地址池最多可以配置8个DNS服务器地址。
      • 执行命令domain-name domain-name,配置为DHCP客户端分配的域名后缀。

修改地址池的分配IP范围

  • 基于接口方式:

    1. 执行命令system-view,进入系统视图。
    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。
    3. 执行命令dhcp server ip-range start-ip-address end-ip-address,指定DHCP Server预分配给DHCP Client的IP地址范围。
    4. 执行命令dhcp server mask { mask | mask-length },指定DHCP Server预分配给DHCP Client的IP地址的子网掩码。
  • 基于全局方式:

    1. 执行命令system-view,进入系统视图。

    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。

    3. 执行命令section section-id start-address [ end-address ],配置全局地址池中的IP地址段。

      IP地址池由一个或多个IP地址段组成,各个地址段内的IP地址不能有重叠。

      section配置的范围必须在创建地址池的network范围内。

配置不参与自动分配的IP地址

  • 基于接口方式:

    1. 执行命令system-view,进入系统视图。

    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。

    3. 执行命令dhcp server excluded-ip-address start-ip-address [ end-ip-address ],配置地址池中不参与自动分配的IP地址。

      多次执行该命令,可以配置多个不参与自动分配的IP地址。

      例如,将192.168.1.10配置为不参与自动分配的地址:

      1
      dhcp server excluded-ip-address 192.168.1.10
  • 基于全局方式:

    1. 执行命令system-view,进入系统视图。

    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。

    3. 执行命令excluded-ip-address start-ip-address [ end-ip-address ],配置地址池中不参与自动分配的IP地址。

      多次执行该命令,可以配置多个不参与自动分配的IP地址。

      例如,将192.168.1.10配置为不参与自动分配的地址:

      1
      excluded-ip-address 192.168.1.10

配置设备获取固定的指定IP地址

网络规划时,有些重要主机为了保证稳定性,需要使用固定的IP地址。(例如服务器、打印机)

一种方式就是设备使用静态IP地址,然后DHCP Server上配置不分配该IP地址。

另一种方式就是设备使用自动获取,然后DHCP Server上配置为该设备分配固定的IP地址。(此方式需要IP地址存在于地址池中)

实际要看场景使用哪种方式,一般来说配置第一种方式比较好。

但有时对一些容易被设置自动获取IP地址/设备无法设置静态IP时,就用第二种方式。

有一些打印机,尤其是不带显示屏的,容易在出故障时(卡纸等),被用户乱按导致恢复出厂设置,进而变成自动获取IP。

  • 基于接口方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。
    3. 执行命令dhcp server static-bind ip-address ip-address mac-address mac-address [ description description ],配置为指定DHCP Client分配固定IP地址。可选添加描述。
  • 基于全局方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。
    3. 执行命令static-bind ip-address ip-address mac-address mac-address [ description description ],配置为指定DHCP Client分配固定IP地址。 可选添加描述。

修改地址租期

  • 基于接口方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令interface interface-type interface-number [.subinterface-number ],进入接口视图或子接口视图。
    3. 执行命令dhcp server lease { day day [ hour hour [ minute minute ] ] | unlimited },配置IP地址租期。
  • 基于全局方式:
    1. 执行命令system-view,进入系统视图。
    2. 执行命令ip pool ip-pool-name,进入全局地址池视图。
    3. 执行命令lease { day day [ hour hour [ minute minute ] ] | unlimited },配置IP地址租期。

配置DHCP中继

在与终端设备相连的接口上配置启用DHCP中继功能

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number[.subinterface-number ],进入接口视图或子接口视图。

  3. 执行命令ip address ip-address { mask | mask-length },配置接口的IP地址。 (若已配置则跳过该步骤)

  4. 执行命令dhcp select relay,使能接口的DHCP中继功能。

    (请确定是否开启了ARP功能,早期华为设备默认不开启,需使用arp broadcast命令用来启用接口的ARP广播功能)

  5. 执行命令dhcp relay server-ip ip-address,配置DHCP服务器的IP地址。每个接口下最多可配置8个DHCP服务器地址。

配置DHCP Snooping

  1. 执行命令system-view,进入系统视图。

  2. 执行命令dhcp enable,开启DHCP功能。

  3. 执行命令dhcp snooping enable,启用DHCP Snooping功能。

  4. 启用DHCP Snooping功能,可在接口视图、或VLAN视图下进行配置。

    • 接口视图下:
    1. 执行命令interface interface-type interface-number,进入连接用户的接口视图。

    2. 执行命令dhcp snooping enable,启用接口下的DHCP Snooping功能。

      在接口下执行该命令,则命令功能对该接口接收到的所有DHCP报文生效。

    • VLAN视图下:
    1. 执行命令vlan vlan-id,进入VLAN视图。

    2. 执行命令dhcp snooping enable,启用VLAN下的DHCP Snooping功能。

      在VLAN视图下执行此命令,则对设备所有接口接收到的属于该VLAN的DHCP报文命令功能生效。

  5. 配置接口为“信任”状态,可在接口视图、VLAN视图下执行。

    • 接口视图下:
    1. 执行命令interface interface-type interface-number,进入连接用户的接口视图。

    2. 执行命令dhcp snooping trusted,配置接口为“信任”接口。

      默认情况下,接口的状态为“非信任”状态。

    • VLAN视图下:
    1. 执行命令vlan vlan-id,进入VLAN视图。

    2. 执行命令dhcp snooping trusted interface interface-type interface-number ,配置接口为“信任”接口。

      默认情况下,接口的状态为“非信任”状态。

配置案例

基础配置与DHCP中继

R2上配置DHCP Server,为PC1、PC2、PC3为代表的区域分配不同网段的ip地址。

配置R2,创建3个地址池,分别是PC1用的192.168.1.0 /25;PC2用的192.168.1.128 /25;PC3用的172.12.12.0 /24。

先配置与PC3相关的测试一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Huawei>system-view 
[Huawei]sysname R2
#配置与交换机相连接口的ip地址
[R2]interface G0/0/0
[R2-GigabitEthernet0/0/0]IP address 172.12.12.2 24
[R2-GigabitEthernet0/0/0]Q
#启用DHCP功能
[R2]dhcp enable
#创建配置一个PC3用的地址池
[R2]ip pool pc3
[R2-ip-pool-pc3]network 172.12.12.0 mask 24
[R2-ip-pool-pc3]gateway-list 172.12.12.2
#在接口上启用全局地址池
[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]dhcp select global
[R2-GigabitEthernet0/0/0]q

测试,没问题(模拟器中,记得PC勾选DHCP获取地址,点击应用)

1
2
3
4
5
6
7
8
9
10
PC3>ipconfig

Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 172.12.12.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 172.12.12.2
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

继续配置R2上的地址池:

1
2
3
4
5
6
7
8
[R2]ip pool pc1
[R2-ip-pool-pc2]network 192.168.1.0 mask 25
[R2-ip-pool-pc2]gateway-list 192.168.1.126
[R2-ip-pool-pc2]lease day 0 hour 12
[R2-ip-pool-pc2]ip pool pc2
[R2-ip-pool-pc1]network 192.168.1.128 mask 25
[R2-ip-pool-pc1]gateway-list 192.168.1.254
[R2-ip-pool-pc1]lease day 0 hour 12

接下来配置R1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Huawei>system-view 
[Huawei]sysname R1
[R1]dhcp enable
#配置与交换机相连接口的ip地址
[R1]interface g0/0/0
[R1-GigabitEthernet0/0/0]ip address 172.12.12.1 24
[R1-GigabitEthernet0/0/0]q
#配置与PC1相连接口
#启用DHCP中继,指定DHCP服务器为R2
[R1]interface g0/0/1
[R1-GigabitEthernet0/0/1]ip address 192.168.1.126 25
[R1-GigabitEthernet0/0/1]dhcp select relay
[R1-GigabitEthernet0/0/1]dhcp relay server-ip 172.12.12.2
[R1-GigabitEthernet0/0/1]q
[R1]interface g0/0/2
[R1-GigabitEthernet0/0/2]ip address 192.168.1.254 25
[R1-GigabitEthernet0/0/2]dhcp select relay
[R1-GigabitEthernet0/0/2]dhcp relay server-ip 172.12.12.2
[R1-GigabitEthernet0/0/2]q

进行测试。。会发现PC1跟PC2都获取不到IP,这很奇怪对吧?

但进行抓包,能看到,DHCP中继是成功的,R1会发生携带DHCP信息的报文给R2。

答案很简单,看图就知道了,R1是使用代理接口的IP地址单播一个数据包给R2。

因此对于R2来说,它需要会包给192.168.1.126和192.168.1.254。

而我们并没有给R2配置到达这两个网段的路由信息。

因此它不知道怎么回复,这也是抓包信息中,只有R1到R2的,没有R2到R1的原因。

所以我们给R2配置一条路由信息:(直接聚合成/24网段)

1
[R2]ip route-static 192.168.1.0 24 172.12.12.1

配置完成之后,PC1、PC2就能获取地址了,既然开着抓包了,我们正好可以看到四个阶段的报文:

1
2
3
4
5
6
7
8
9
10
PC1>ipconfig

Link local IPv6 address...........: fe80::5689:98ff:feab:7c39
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.1.125
Subnet mask.......................: 255.255.255.128
Gateway...........................: 192.168.1.126
Physical address..................: 54-89-98-AB-7C-39
DNS server........................:

小知识:正因为R1采用与设备直连的接口IP去申请IP地址,才能根据源IP地址匹配合适的地址池,分配网段正确的IP地址给设备。

接口地址池与DHCP Snooping

保留上个案例的R2,我们改一下拓扑。

设定一下场景:除R2之外的,才是原本的网络结构。R2作为用户私自带来的无线WiFi路由器,接入了网络中。

介绍下原有配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<Huawei>system-view 
[Huawei]sysname SW1
#启用DHCP功能,创建vlan与vlanif,在vlanif下启用DHCP功能(接口地址池模式)
[SW1]dhcp enable
[SW1]vlan 30
[SW1-vlan30]q
[SW1]interface vlanif 30
[SW1-Vlanif30]ip address 10.1.1.254 24
[SW1-Vlanif30]dhcp select interface
[SW1-Vlanif30]q
[SW1]interface g0/0/1
[SW1-GigabitEthernet0/0/1]port link-type trunk
[SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 30
1
2
3
4
5
6
7
8
9
10
11
<Huawei>system-view 
[Huawei]sysname SW2
[SW2]vlan 30
[SW2-vlan30]q
[SW2]interface G0/0/1
[SW2-GigabitEthernet0/0/1]port link-type trunk
[SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 30
[SW2-GigabitEthernet0/0/1]q
[SW2]interface g0/0/3
[SW2-GigabitEthernet0/0/3]port link-type access
[SW2-GigabitEthernet0/0/3]port default vlan 30

PC3重新获取一下IP地址,可以看到获取的是10网段的ip,配置无误。

1
2
3
4
5
6
7
8
9
10
11
12
13
PC3>ipconfig /renew

IP Configuration


Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 10.1.1.253
Subnet mask.......................: 255.255.255.0
Gateway...........................: 10.1.1.254
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

这时,我们模拟用户私接小路由。

首先配置vlan接口:

1
2
3
4
[SW2]interface g0/0/2
[SW2-GigabitEthernet0/0/2]port link-type access
[SW2-GigabitEthernet0/0/2]port default vlan 30
[SW2-GigabitEthernet0/0/2]q

刷新一下PC3的ip,会发现随机出现了172网段的ip。

为此,我们就需要配置DHCP Snooping绑定DHCP Server所在的接口。

不要忘了执行dhcp enable

1
2
3
4
5
6
7
<SW2>system-view 
[SW2]dhcp enable
[SW2]dhcp snooping enable
[SW2]vlan 30
[SW2-vlan30]dhcp snooping enable
[SW2-vlan30]dhcp snooping trusted interface GigabitEthernet 0/0/1
[SW2-vlan30]q

这时,我们多刷新几次也都是10网段的ip了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
PC>ipconfig /renew

IP Configuration


Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 172.12.12.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 172.12.12.2
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

PC>ipconfig /renew

IP Configuration


Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 10.1.1.252
Subnet mask.......................: 255.255.255.0
Gateway...........................: 10.1.1.254
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

PC>ipconfig /renew

IP Configuration


Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 10.1.1.251
Subnet mask.......................: 255.255.255.0
Gateway...........................: 10.1.1.254
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

PC>ipconfig /renew

IP Configuration


Link local IPv6 address...........: fe80::5689:98ff:fe8c:1e94
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 10.1.1.250
Subnet mask.......................: 255.255.255.0
Gateway...........................: 10.1.1.254
Physical address..................: 54-89-98-8C-1E-94
DNS server........................:

PC>