DHCP:动态主机配置协议

DHCP 协议学习总结。

基本原理

  DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。

  DHCP是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client),其工作过程如下:

  1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
  2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
  3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
  4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。

DHCP 客户端

  DHCP 客户端一般来说是局域网中独立的PC主机,租约、续约、发现、释放IP地址等大多数 DHCP 中的行为都是由 DHCP 客户端主动发起。

重新登录

  DHCP 客户端每次重新登录网络时,就不需要再发送 DHCP discover 发现信息,而是直接发送包含前一次所分配的IP地址的 DHCP request 请求信息。然后,

  • 如果客户端 DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复 DHCP ACK继续使用IP。
  • 如果客户端 DHCP request 内的IP地址在服务器端已被使用,DHCP服务器回复 DHCP NACK告诉客户端IP已被使用。
  • 客户端重新开始DHCP流程。
租约与续约

  租约就是 DHCP 分配给客户端的IP地址的使用期限,期满后 DHCP 服务器便会收回出租的 IP 地址,然后需要重新分配。如果 DHCP 客户机要延长其IP租约,则必须更新其IP租约。如果租约设置过长,就会出现 IP 地址已经分配完的假象。

  在指定的时间间隔内,DHCP 客户端尝试续订租约以保证它能够得到最新的配置信息:

  • 自动租约续订

  DHCP 客户机启动时和IP租约期限到达租约的50%时,DHCP 客户机都会自动向 DHCP 服务器发送更新其IP租约的信息。 如果 DHCP 服务器是可用的,它将续订租约并向客户端发送一条 DHCPACK 消息,此消息包含新的租约期限和一些更新的配置参数。客户端收到确认后就会更新配置。 如果 DHCP 服务器不可用,则客户端将继续使用当前的配置参数。

  当租约时间间隔的87.5%到期时,客呼端会广播一条 DHCP DISCOVER 消息来更新它的地址租约。这个阶段,DHCP 客户端会接受从任何 DHCP 服务器发出的租约。如果 DHCP 服务器以一条 DHCPOFFER 消息响应来更新客户端当前的租约,那么客户端可以基于提供消息的服务器续订租约并继续运行。

  如果租约到期了,那么客户端必须立即释放当前使用的IP地址。然后,DHCP 客户端重新开始 DHCP 租约过程,尝试租用一个新的 IP 地址。

  • 手动租约续订

  如果需要立即更新 DHCP 配置消息,用户可以手动续订 IP 租约。例如,如果用户希望 DHCP 客户端立即从DHCP 服务器获取新安装的路由器的地址,那么需要用户从客户端续订租约来更改这些配置。要手动续订租约,使用 ipconfig 命令,并带 /renew 开关参数。这条命令向 DHCP 服务器发送一条 DHCP REQUEST 消息请求更新配置选项和续订租约时间。

DHCP 服务器

基本功能

  DHCP SERVER 指的是服务器端,在路由器上体现的就是给LAN端动态分配IP的功能。DHCP SERVER 负责接收客户端的 DHCP 请求,管理 LAN 端所有的IP网络设定资料。DHCP 通过“租约”来实现动态分配IP的功能,实现 IP 的时分复用,从而解决 IP 资源短缺的问题。

  DHCP服务器提供三种IP分配方式:

  • 自动分配 :自动分配是当 DHCP 客户端第一次成功地从 DHCP 服务器端分配到一个IP地址之后,就永远使用这个地址。
  • 动态分配(最常用): 动态分配是当 DHCP 客户端第一次从 DHCP 服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP 客户端就得释放这个 IP 地址,以给其他客户端使用。
  • 手动分配:手动分配是由 DHCP 服务器管理员专门为客户端指定IP地址。

  两个租约表:

  • 静态租约表:对应一个静态租约存储文件,SERVER 运行时从文件中读取静态租约表。
  • 动态租约表:对应一个周期存储文件,SERVER 周期性将租约表存进该文件,在程序开始时将会读取上次存放的租约表。(租约表记录了当前所有分配的租约,包括静态链接的)。
基本逻辑

  原则上 DHCP SERVER 是一直处在被动接受请求的状态。当有客户端请求时,服务器会读取获得客户端当前所在的状态以及客户端的信息,并在静态租约表和动态租约表中进行检索找到相应的表项,再根据客户端的状态执行不同的回复。当收到客户端的首次请求时,DHCP 服务器先查找静态租约表;若存在请求的表项,返回这个客户的静态 IP 地址;否则,从 IP 地址池中选择可用的 IP 分配给客户,并添加信息到动态数据库中。此外,服务器将会周期性的刷新租约表写入文件存档,在这个过程中会顺便对动态租约表进行租期检查。

  DHCP 服务器收到相应请求后会执行回复动作:

  • DHCPOFFER:

    • 静态租用:首先匹配MAC地址,看是否能在静态租约表中找到对应的项,若能找到就把IP分配给他。静态表中的IP不能被其他客户使用。
    • 动态租用:
      • server试图分配给client上次分配过的IP,在这之前检查这个 IP 是否正在使用。
      • discover中含有request ip 时,检查该IP是否在地址池范围,是否正在使用,是否到期,是否是静态IP,网络上是否已经存在。
      • discover不含request ip,从地址池上寻找一个最小的可用IP分配。
  • DHCPACK:

      根据是否含有 request ip 和 server ip 识别客户端现在 init_reboot,selecting,renewing/rebinding 中的哪个状态,并根据以下规则执行 DHCP ACK 回复:

    • 若 client 处于 selecting 状态,验证 request ip 和 server ip 是否同服务器中的匹配。
    • 若 client 处于 init_reboot 状态,验证 request ip 是否符合租约记录。
    • 若 client 处于 renewing/rebinding 状态,验证 client ip address 是否符合租约记录。
  • ……

DHCP 攻击

DHCP 洪泛攻击

  在 DHCP 网络环境中,若存在 DHCP 用户短时间内向设备发送大量的 DHCP 报文,将会对设备的性能造成巨大的冲击以致可能会导致设备无法正常工作。通过使能对 DHCP 报文上送 DHCP 报文处理单元的速率进行检测功能将能够有效防止 DHCP 报文泛洪攻击。

  防范:配置限制 DHCP 报文的上送速率。

DHCP 耗尽攻击

  用虚假的MAC地址广播伪造的 DHCP 请求,如果发送了大量的请求,攻击者可以在一定时间内耗尽 DHCP Servers 可提供的地址空间。

  防范:可以通过交换机的 Port-Security(端口安全性)功能来防范耗尽攻击。

DHCP 假冒攻击

  耗尽 DHCP 服务端的地址资源之后,攻击者可以仿冒一个 DHCP 服务器来响应网络上其他客户的 DHCP 请求,从而实现 DHCP 假冒攻击。攻击者伪造 DHCP 服务器给计算机分配 IP,并指定一个虚假的 DNS 服务器地址,当用户访问网站的时候,就被虚假DNS服务器引导到错误的网站。

  防范:通过传统的 DHCP Snooping 技术就可以来防范 DHCP 假冒攻击。当启用 DHCP Snooping 功能之后,交换机的所有端口都将无法接收 DHCP Offer 报文,假冒的 DHCP 服务器就无法向外分配IP地址了。DHCP Snooping 可以防止假冒攻击,但是无法防止耗尽攻击,因为尽攻击所采用的都是客户端正常发送的 DHCP Discover 报文。

坚持原创技术分享,您的支持将鼓励我继续创作!