场景:

内网环境需要开启多个DHCP服务器,分别给不同的设备进行PXE安装。

存在的问题:

多个DHCP的情况下,设备在启动时随机从一个DHCP服务器获取IP(哪个DHCP服务器先响应就从哪个获取)并从那个服务器读取配置进行引导安装。

如果提供IP的DHCP服务器不是期望的那个,就无法得到正确的配置文件,也就无法进行正常引导安装。

初步解决方法:

DHCP服务提供配置可以对响应进行限制,仅给某些设备(设备的MAC)分配IP,对其它设备的请求则不予响应。

/etc/dhcpd.conf配置大致如下:

subnet 128.128.0.0 netmask 255.255.0.0 {

......

filename "pxelinux.0";

}

deny unknown-clients;

host <hostname1> { hardware ethernet <XX:XX:XX:XX:XX:XX>;}

host <hostname2> { hardware ethernet <XX:XX:XX:XX:XX:YY>;}

这样配置以后,DHCP服务器仅会对<XX:XX:XX:XX:XX:XX> <XX:XX:XX:XX:XX:YY>这些MAC进行响应。

依然存在的问题:

如果每个DHCP服务器都做了限制,仅给指定MAC分配IP,并且没有两个DHCP服务器同时配置了同一MAC,那么每个MAC能够得到响应的DHCP服务器就是唯一确定的。

但不可避免,有些DHCP服务器并没有或者忘记设置,依然导致DHCP响应泛滥,设备还是可能从不期望的DHCP服务器获取响应。

进一步的解决方法:

要求每个使用的DHCP服务器在/etc/dhcpd.conf指定具体的MAC。对于那些泛滥响应的DHCP服务器,使用Dhcpstarv将其提供的IP(DHCP 响应)消耗掉。Dhcpstarv的执行方式就是不断伪造一些MAC地址进行DHCP请求,把DHCP服务器能够响应的IP地址都消耗掉。

具体操作:

当你想启动DHCP服务,给某台设备进行PXE安装,但是发现同一网络中还存在另一个DHCP服务器也在提供DHCP服务,那么就可以使用Dhcpstarv了。

命令使用(ethX就是连接到要消耗的网络的网卡,不要指定错了):

# ./dhcpstarv -v -i ethX

类似下面的输出就说明dhcpstarv正在消耗DHCP响应

14:54:20 01/10/14: got address 128.128.18.199 for 00:16:36:4c:d7:48 from 128.128.18.5

14:54:20 01/10/14: got address 128.128.18.200 for 00:16:36:06:98:de from 128.128.18.5

等不再有类似的输出结果,说明DHCP的响应被消耗差不多了。让dhcpstarv程序继续运行,启动你自己的DHCP服务器。

恢复方法:

如果DHCP服务器未进行限制MAC配置,不幸被Dhcpstarv消耗完,可以通过以下方法恢复“被攻击”DHCP服务器:

1. 修改配置文件/etc/dhcpd.conf,增加限制MAC的配置:

deny unknown-clients;

host <hostname1> { hardware ethernet <XX:XX:XX:XX:XX:XX>;}

host <hostname2> { hardware ethernet <XX:XX:XX:XX:XX:YY>;}

2. 删除文件 /var/lib/dhcp/db/dhcpd.leases

3. 重启DHCP服务

如何定位攻击来源:

Dhcpstarv在发送的DHCP请求包中伪造随机的源MAC,其伪造方式是:固定前3个字节硬件设备“制造商”为“001636”,后3个字节随机生成。源代码位置:

dhcpstarv-0.2.1/src/main.c:130行

unsigned char vendor_mac_prefix[] = { 0x00, 0x16, 0x36 };

但是,以太网帧的源MAC还是发送数据帧的网卡的真实MAC,因此为了定位Dhcpstarv伪造的DHCP请求包的来源,可以通过抓包,根据以太网帧中的源MAC确定Dhcpstarv的位置。

DHCP请求包是封装在UDP数据报,UDP数据报偏移36字节的位置即是DHCP请求包的源MAC,过滤UDP数据报的前3个字节为“001636”,就可以得到Dhcpstarv伪造的DHCP请求包。命令如下:

# tcpdump -i bond0 -ne src port 68 and udp[36:2]=0x0016 and udp[38]=0x36

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes

13:51:31.254469 00:18:82:b0:7e:22 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 286: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:16:36:81:30:15, length 244

13:51:32.000714 00:18:82:b0:7e:22 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 304: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:16:36:81:30:15, length 262

使用Dhcpstarv解决DHCP服务器冲突问题的更多相关文章

  1. 解决Centos 7 dhcp服务器-no subnet declaration for start (no IPV4 addresses.)

    上面的配置是hyper-v 安装的 centos 7.0 安装dhcp 服务器的方法是 yum install dhcpd 在安装和配置好后,运行的时候出现错误 错误提示如下: no subnet d ...

  2. 笔记本无法从DHCP服务器获取地址怎么解决?

    首先,开始/运行,输入 cmd,再输入ipconfig,看看你的IP地址是不是正常的,假如不是,就是获取不到IP地址.如果得到的IP是:169.254.x.x 表示客户机无法得到DHCP的响应.(如果 ...

  3. Windows DHCP服务器

    DHCP服务器 编辑 动态主机配置协议是一个局域网的网络协议.指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码.首先, DHCP服务器必须是一台安装有 ...

  4. 烂泥:centos安装及配置DHCP服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 有关DHCP服务器的配置一直打算学习,这几天终于抽出时间来专门学习这个知识点. DHCP:动态主机配置协议,在此就不多做介绍.不清楚的童鞋,可以去百度下 ...

  5. redhat enterprixe 5.0 下DHCP服务器rpm安装配置及其测试

    一.了解DHCP DHCP服务提供动态指定IP地址和配置参数的机制.有动态和静态两种方式. 二.rpm安装 因为配过Samba,所以感觉挺简单. 首先找到主程序和几个附属程序的rpm的安装包.应该都是 ...

  6. [转]详述DHCP服务器的三种IP分配方式

    DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol),它的目的就是为了减轻TCP/IP网络的规划.管理和维护的负担,解决IP地址空间缺乏问题.这种网络 ...

  7. DHCP服务器

    DHCP指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码.首先,DHCP服务器必须是一台安装有Windows 2000 Server/Advanced ...

  8. 实验--DHCP服务器搭建

    系统环境:CentOS PC1: 客户端1(克隆CentOS) PC2: 客户端2(克隆CentOS) Router: 模拟路由器(克隆CentOS)

  9. Linux--NFS和DHCP服务器

     (1) 在网络中,时常需要进行文件的共享,如果都是在Linux系统下,可以使用NFS 来搭建文件服务器,达到文件共享的目的. (2) 在网络管理中,为了防止IP 冲突和盗用,有效的控制IP 资源 ...

随机推荐

  1. Spring3系列5-Bean的基本用法

    Spring3系列5-Bean的基本用法 本篇讲述了Bean的基本配置方法,以及Spring中怎样运用Bean. 主要内容如下: 一.      Spring中Bean的相互引用 二.      Sp ...

  2. 在线PDF编辑网站http://www.pdfescape.com

    网站地址:http://www.pdfescape.com 先转载一个简单介绍的文章 如果你以前很少阅读PDF文档,电脑中也没有PDF阅读器:adobe reader,foxit reader之类的软 ...

  3. 最后关于Pipeline完整的图如下:

    最后关于Pipeline完整的图如下:

  4. 安卓TTS语音合成经验分享(科大讯飞语音+)集成

    应用场景:足浴软件,技师钟房安排调派和队列排序查看,语音播报提醒.老程序是使用双屏显卡,windows系统PC上运行一个无人值守桌面程序.如今安卓机顶盒(WIFI)和MINI电视棒通过HDMI接口和支 ...

  5. Offer_answer_with_SDP_rfc3264

    Network Working Group J. RosenbergRequest for Comments: 3264 dynamicsoftObsoletes: 2543 H. Schulzrin ...

  6. python 字符串替换

    字符串替换可以用内置的方法和正则表达式完成.1用字符串本身的replace方法: a = 'hello word'b = a.replace('word','python')print b 2用正则表 ...

  7. 【Android】与服务器实现JSON数据通信

    一.前言 作为一名移动端开发人员,具备一定的服务端开发能力也是非常必要的,本篇博客讲述如何在Android和服务器之间实现JSON数据通信交互,博客内容基于另外一篇博客:[Web]Eclipse + ...

  8. 【cs229-Lecture15】奇异值分解

    PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的. 内容: PCA  (主成份分析)是一种直接的降维方法,通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降 ...

  9. (转)offsetof与container_of宏[总结]

    1.前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大.offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址 ...

  10. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...