avatar

Catalog
网路安全基础05(上):DHCP

什么是DHCP

DHCP作用

DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,是一个局域网的网络协议。作用是自动分配IP地址。

DHCP相关概念

地址池:在Windows系统中又被称作作用域,其包含所有可分配的IP,并记录了已分配IP的相关信息(IP地址,子网掩码,网关,DNS,租期)

端口号:UDP 67,68

DHCP优点

自动分配IP,减少工作量,避免IP冲突(人工配置IP),提高地址利用率。通常一家公司需要两台DHCP服务器,防止其中一台宕机后,出现无法上网的情况。

DHCP原理

租约过程

DHCP原理,也称为租约过程,分为如下4个步骤:

  1. 客户机发送DHCP Discovery广播包

    客户机广播请求IP地址(包含客户机的MAC地址)

  2. 服务器响应DHCP Offer广播包

    服务器响应并提供一个IP地址(不包含子网掩码,网关等参数)

  3. 客户机发送DHCP Request广播包

    客户机选择IP(即确认使用哪个IP)

  4. 服务器发送DHCP ACK广播包

    服务器确认租约,并提供网卡详细参数IP地址、子网掩码、网关、DNS、租期等 。

以上为DHCP租约过程,即客户机如何通过DHCP服务器获取到IP地址的过程。为了方便理解,以租房作为类比来概括这个过程:

  1. 例如一个打工人,相当于客户机,在北京打工,需要租房,即客户机需要IP地址,于是他在一个租房的论坛里发送了一条消息,说我要租房,这就是发送DHCP Discovery广播包,并留下自己的手机号,就是客户机的MAC地址。
  2. 此时,会有多个房东找它,告诉打工人,说我这里有房,并告知房子的地址,即服务器响应DHCP Offer包,由于是广播包,则有多个DHCP服务器会收到,只要它们的地址池有余,都会回复客户机,提供一个IP地址。
  3. 打工人收到很多房东的回应,但是第一个回应的才最有诚意,因此他只会选择第一个回应消息的房东,并去看房,看看房子环境怎样,是否卫生,距离公司远不远等等,即客户机确认使用哪个IP的过程,但一定会选择第一个。由于不是蛋壳公寓,打工人自然会满意,并在论坛回复房东说房子我租了,其它房东看到后,不再理睬打工人。即客户机发送DHCP Request广播包,告知提供IP地址的DHCP服务器,我使用你那个IP地址,其它DHCP服务器看到后,不再回复客户机。
  4. 最后提供房源的房东,会联系上打工人,并提供电卡,水卡,家门钥匙等重要物品。即服务器回复一个ACK广播包,包含了详细参数。

续约过程

前面是租约过程,租约自然是有时限的,总不能租个房子租个几十年吧,通常都是半年至一年,因此也就有了续约。以NBA为例,续约一些明星球员,都会选择在合约进行到一半的时候续约,否则到了最后一年,万一这类球员跳槽到别的球队了,损失可就大了;房东亦是如此,也希望租客可以提早续约,否则就可能便宜了别的房东。因此,当租约时间超过50%以后,客户机会再次发送DHCP Request包,进行续约,即进行租约过程的后两步,当客户机收到服务器发送的ACK包后,租约时间会被设置为包中约定的时间,而不是累加在先前的时间上;如果服务器无响应,则继续使用并在租约时间达到87.5%,再次发送DHCP Request包,进行续约,若服务器仍 无响应,则释放IP地址,并重新发送DHCP Discovery广播包来获取IP地址,即重复一遍完整的租约过程。若无任何服务器响应Discovery广播包,则自动分配一个形如169.254.x.x/16的IP地址,该地址为全球统一无效地址,用于临时内网通信。

DHCP攻击与防御

在DHCP协议诞生后,自然会衍生出基于其原理的攻击手段,这里简要介绍其二,以及对应的防御措施:

  • 攻击DHCP服务器:频繁发送伪造DHCP请求(伪造MAC地址),直至将DHCP地址池资源耗尽。

    防御措施:在交换机端口上做动态MAC地址绑定。这是管理型交换机才具备的功能,将端口与MAC地址动态绑定,这样从该端口发送出来的其它MAC地址的请求就不会被转发至DHCP服务器。

  • 伪装成DHCP服务器进行攻击:黑客通过将自己的设备部署为DHCP服务器,为客户提供非法IP。致使用户无法上网。

    防御措施:同样需要管理型交换机,除合法的DHCP服务器所在的接口外,全部设置为禁止发送DHCP Offer包。

DHCP实验(Windows)

下面来进行DHCP相关实验,DHCP服务器部署可在不同平台上实现,本实验仅演示Windows平台,在之后的文章会演示Linux平台上DHCP服务器的部署。本次实验的环境为:服务器Windows 2003,客户机Windows XP。下面进入实验:

安装DHCP服务

  1. 开始->控制面板->管理工具,此时并没有DHCP服务,因此首先需要安装DHCP服务

  2. 开始->控制面板->添加或删除程序,单机添加/删除Windows组件,会进入Windows组件向导

  3. 找到网络服务,选择详细信息

  4. 找到动态主机配置协议,选中,点击确定,然后下一步。会进入安装过程

  5. 安装完毕后,开始->控制面板->管理工具,便可找到DHCP服务

  6. 此时进入命令行执行指令netstat -an,可以看到会多出2个UDP端口,67与68,这便是DHCP服务所使用的端口

部署DHCP服务器

  1. 这部分进行部署DHCP服务器的实验,首先给服务器配置IP,如下图所示:

  2. 接下来,打开之前安装的DHCP服务,选择当前主机,创建作用域(即地址池)

  3. 名称与描述随意填写即可

  4. 设置可分配的地址范围以及子网掩码,通常开头与末尾会保留一部分IP地址用于额外功能。这里地址范围所在的网段必须要与服务器本身的IP地址在同一个网段,实验才可成功。想要创建不同网段的作用域,需要之后进一步学习DHCP中继相关的知识才可进行。

  5. 接下来添加排除位于分配范围中,不想要分配的地址。在起始IP地址中输入,或者输入一个范围,并添加

  6. 接下来是租约期限,即租约过程中约定的时间长短,通常不宜设置太长

  7. 前面配置完地址池选项后,下面是DHCP相关选项,可以选择稍后配置

  8. 由于服务器设置了10.1.1.1作为IP,因此这里网关设置为10.1.1.254,当然也可以设置为别的,不影响

  9. 父域属于上古时期概念,这里不填。只需填写DNS服务器的IP,查询所在城市的DNS服务器即可,然后再添加一个通用的DNS服务器,例如114.114.114.114

  10. WINS服务是Windows系统自己弄的一个类似DNS功能的老掉牙玩意,DNS诞生后就不再用了,直接跳过。

  11. 然后激活该作用域(地址池)

  12. 这时可以很方便看到地址池的相应信息

用户获取IP地址

配置好DHCP服务器后,就可以让用户机获取IP地址了(该实验需要关闭防火墙,否则67,68端口是不被放行的)。在命令行中通过如下指令释放/获取IP:

Code
1
2
ipconfig /release	//释放IP(取消租约指令;手动配置IP时,也会取消租约),相当于对本地连接禁用
ipconfig /renew //重新获取IP(有IP时,发送Request包续约;无IP时,发送Discovery包获取),即对本地连接重新启用

然后使用上述指令,释放后重新获取IP,并观察结果

发现,获取的IP仍然是原先释放的IP,并没有从DHCP服务器上获取到地址池中的IP,这是为何呢?在做这个实验前,我们已经将两台虚拟机放在同一个局域网VMnet1上,意味着它们之间是可以ping通的。但是在这个局域网内,仍然可能存在着其它DHCP服务器,当客户机发送Discovery广播包后,其它DHCP反应更快,立刻就发送了Offer包,所以客户机最终使用的是其它DHCP服务器提供的IP。因此,为了实验能成功,我们需要关闭其它的DHCP服务器,操作如下:

  1. 切换到客户机虚拟机,点击左上角菜单中的编辑->虚拟网络编辑器

  2. 发现该虚拟机的DHCP服务是启用的,我们要关闭它,选择下方的更改设置

  3. 找到当前主机,将使用本地DHCP服务将IP地址分配给虚拟机这个选项关闭,这样下次获取IP时就会从我们部署的DHCP服务器获取了。

  4. 此时,再通过指令释放并重新获取IP,就可以成功从我们先前部署的DHCP服务器的地址池中获取IP地址

  5. 这时,回到DHCP服务器,查看地址租约,就可以看到刚刚获取IP的客户机,注意这个唯一ID,实际上就是客户机的MAC地址。

  6. 下面回到客户机验证一下

地址保留

什么是地址保留呢?例如在公司,老板希望自己的笔记本有一个独特的IP地址,别人都不能使用,只能自己使用,比如10.1.1.168,这种需求可以通过手工配置IP来解决,但问题是,一旦这个笔记本被带回家,那就无法上网了,因为在公司的网段与家里路由器的网段通常是不一样的。如果回家后想上网,又得再手动配置一次,回到单位后同样如此,这样反复发配置显得异常麻烦,因此,DHCP服务提供了地址动态保留的功能,让部分电脑每次申请IP时都分配固定的IP地址。具体操作如下:

  1. 找到保留,右键新建保留

  2. 需要填写部分信息,以及要分配的IP地址,其中MAC地址是判断客户机主要方式,回到客户机,查询MAC地址

  3. 然后完善保留信息

  4. 完成后,可以看到保留选项下多了一个条目。回到客户机,重新获取IP,即可获取到保留的地址

备份与还原

接下来要介绍的就是备份与还原,一个DHCP服务器可能会包含多个作用域(地址池),一旦服务器宕机,就会有大量的用户受到影响,因此需要对作用域进行备份,若此时有一台正常运行的服务器,只需要将备份的内容还原到该服务器上,即可恢复之前所有受影响用户的IP使用情况。具体备份还原的操作如下:

  1. 选择当前服务器,右键->备份

  2. 新建一个文件夹,用来备份DHCP配置,这里在C盘新建了一个dhcp_backup文件夹,选择并确定

  3. 进入dhcp_backup文件夹,可以看到,存储着相应的配置文件信息。

  4. 这时我们先删除掉原先的作用域,此时只剩下一个空壳(这里注意不要删成服务器了,服务器删了只是暂时不显示了,进入命令行可以看到67,68端口号依旧是开着,重新打开DHCP,服务依旧在,若删了作用域,那才是真的删了)

  5. 右键服务器,选择还原,并选择刚刚备份的文件夹,确定。这样就可以恢复原先的地址池配置了,原先的数据也都还在。这里注意左上角服务器的小图标还是红色的,但实际上服务器已经打开了,这时选择右键刷新即可。

选项优先级

关于选项优先级,这里顺带提一嘴

由图,这里创建了两个作用域,假设均未配置作用域选项,在这种有多个作用域的情况下,可以直接在服务器选项中配置DNS,这样每个作用域选项中的DNS也会继承服务器选项中的DNS,一台DHCP服务器的几个作用域共享一个DNS是没有问题的。如果想让某些作用域使用特定的DNS,方可在作用域选项中进行配置,这样就会替换掉原先继承的服务器选项中配置的DNS。以上仅限于DNS的配置,网关的配置依旧要单独在各个作用域中配置。

小结

本篇实验均在Windows2003上实现,Windows2008上原理类似,自行实现以作练习。

参考资料

参考课程:

参考链接:

Author: cataLoc
Link: http://cataloc.gitee.io/blog/2020/09/25/%E7%BD%91%E8%B7%AF%E5%AE%89%E5%85%A8%E5%9F%BA%E7%A1%8005-%E4%B8%8A-DHCP/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶