免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5070 | 回复: 4
打印 上一主题 下一主题

求助一个DHCP服务器的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-28 15:55 |只看该作者 |倒序浏览
假设有A,B,C,D4个子网,DHCP服务器在A网段里。如果一台在D网段里的终端机向A里的DHCP服务器发送获取IP地址的请求,那DHCP服务器是如何判断出这个消息是来自D网段,而不是其他的网段的呢?

论坛徽章:
0
2 [报告]
发表于 2004-06-28 16:35 |只看该作者

求助一个DHCP服务器的问题

DHCP协议讲解



目  录

第1章 DHCP协议基础知识... 1-1

1.1 DHCP协议概述.. 1-1

1.1.1 IP网络主机配置方法概述.. 1-1

1.1.2 DHCP协议主机配置的优缺点.. 1-2

第2章 协议的报文格式... 2-1

2.1 DHCP协议的封装.. 2-1

2.2 DHCP协议的报文格式.. 2-2

2.3 DHCP协议报文的种类.. 2-5

第3章 DHCP协议的实现过程... 3-1

3.1 DHCP CLIENT的行为.. 3-1

3.2 DHCP SERVER的行为.. 3-2

3.3 DHCP RELAY的行为.. 3-3

3.4 DHCP交互过程.. 3-4

第4章 DHCP在具体组网中的应用实例... 4-1

4.1 DHCP在MA5200中的应用.. 4-1

4.1.1 组网说明及数据规划.. 4-1

4.1.2 结合抓报所得数据分析DHCP协议实现原理.. 4-2

4.2 宽带产品相关的数据配置.. 4-9

4.2.1 ESR8850中与DHCP RELAY相关的数据配置.. 4-9

4.2.2 S3526中与DHCP RELAY相关的数据配置.. 4-10

第5章 DHCP协议的发展方向... 5-1





关键词:

BOOTP,DHCP,DHCP CLIENT,DHCP RELAY,DHCP SERVER

摘    要:

DHCP协议是目前应用比较广泛的一个协议,详细的了解该协议对于问题的处理是有好处的。本文是对IP网络中的DHCP协议(动态主机配置协议)一个比较全面的培训材料,详细的介绍了DHCP协议的框架结构,报文格式和实现机理,并结合在具体产品(MA5200)中的实现进行讲解,适用于从事宽带、数通的工程师作为学习性质的读物。

在文章的最后,我们介绍了目前黑客对DHCP进行攻击的常用手段及在ESR8850产品中相应的解决方法,并对DHCP协议的发展进行了一些展望。

缩略语清单:

BOOTP:Bootstrap Protocol    引导程序协议

DHCP:Dynamic Host Configuration Protocol   动态主机配置协议

DHCP CLIENT:DHCP  客户端

DHCP RELAY:DHCP 中继   

DHCP SERVER:DHCP服务器

参考资料清单:

DHCP协议相关RFC:RFC 951,RFC1541,RFC1542

数据通信协议研究管理部:《DHCP协议培训教材》、《DHCP协议说明书》





第1章  DHCP协议基础知识
1.1  DHCP协议概述
1.1.1  IP网络主机配置方法概述
IP网络是目前乃至将来可能最有前途的网络。正如同传统的电话网中要为每个电话分配一个电话号码以唯一标识这个电话一样,在IP网络中,每一台终端要想与其他的终端进行通信,也需要为每一个接入终端分配一个唯一标识号,这就是IP网络上的地址 -IP地址。

IP地址是IP网络上唯一标识一个接入终端最原始和最有效的标识符。 给终端分配IP地址的方法有多种方式,如 PPP协议的自协商方式,用户自己静态配置,管理员统一分配、配置等方式,但这些配置IP地址的方式都有着一些这样或那样的缺点。PPP自协商方式虽然不用用户自己动手操作,但是需要安装专门的客户端软件,而且需要服务器处事先配置好用户的帐号和密码,否则用户无法上网,当然其优点是安全性高。 用户自己静态配置方式对于熟悉IP网络的人来说是一件很简单的事情,但对于普通用户来说,可真是难以理解,而且还须提防IP地址冲突的情况。管理员统一分配、配置的方式,需要有专人维护,规划整个网络,不仅成本高,而且管理员工作量太大。

更重要的是许多终端启动时不仅需要IP地址,而且还需要动态的获取更多的启动配置信息,如无盘工作站,CABLE MODEM就需要获得启动配置文件名和TFTP SERVER 的IP地址等信息,其他一些特殊终端还需要获取其他一些特殊的信息,如EPHONE 需要CALL SERVER的IP地址,IDT需要控制服务器的IP地址等。这些动态信息是前面几种主机配置方式所无法完成的。正是基于这些要求,新的主机配置方式应运而生,最早的主机配置方式就是BOOTP协议(即引导程序协议),它是一种较老的系统引导协议,主要用于无盘工作站启动时从服务器上获取IP地址和启动文件名,多与TFTP协议配合使用,后来为了功能的扩展,又发展了DHCP 协议,但DHCP 协议兼容BOOTP协议。BOOTP和RARP类似,是用于相对静态的环境,其中每个主机都有一个永久的网络连接。管理人员创建一个BOOTP配置文件来定义每个主机的BOOTP参数。在计算机经常移动和实际计算机数目超过了可获得的IP主机地址时,这种只提供从主机标识到主机参数的静态映射就不适用了。

DHCP从两个方式上扩充了BOOTP:

l           DHCP可使计算机用一个消息获取它所需要的所有配置信息,即传送配置信息的协议;

l           DHCP允许计算机快速、动态的获取IP地址,即动态分配IP地址的机制。

DHCP支持三种类型的地址分配:

l           自动分配方式中DHCP给主机指定一个永久的IP地址;

l           动态分配方式中DHCP给主机指定一个有时间限制的IP地址,到时间或主机明确表示放弃这个地址时,这个地址可以被其他的主机使用;

l           手工分配方式中主机的IP地址是由网络管理员指定的,DHCP只是把指定的IP地址告诉主机。

在这三种方式中,只有动态分配的方式可以对已经分配给主机但现在此主机已经不用的IP地址重新加以利用。这样,在给一台临时连入网络的主机分配地址或者在一组不需要永久的IP地址的主机中共享一组有限的IP地址时,动态分配显得特别有用。当一台新主机要永久的接入一个网络时,而网络的IP地址非常有限,为了将来这台主机被淘汰时能回收IP地址,这种情况下动态分配也是一个很好的选择。

1.1.2  DHCP协议主机配置的优缺点
1、DHCP协议主机配置方式最重要的特征就是整个配置过程自动实现,而且所有配置信息在一个地方集中控制,这就是DHCP SERVER的作用。

2、很明显,DHCP协议采用CLIENT-SERVER方式实现,而且DHCP 协议是基于UDP层之上的应用,DHCP CLIENT将采用知名端口号68,DHCP SERVER采用知名端口号67进行交互。

3、最初的BOOTP/DHCP协议是在同一个物理子网中使用广播方式实现的,无法穿越路由器扩展到不同的物理子网中,也就是要使用DHCP协议的每一个网络中必须配置一台DHCP 服务器,为了克服这一缺陷,采用了DHCP RELAY的方式使得BOOTP/DHCP协议能够穿越路由器实现。

4、BOOTP协议主要用于一些较简单的终端设备,如无盘工作站等,通过BOOTP获取的信息也就相对较少,但它的CLIENT-SERVER间的交互过程比较简单。DHCP协议功能较全面,可以获取的信息也较多,但CLIENT-SERVER间的交互过程比较复杂。下面将会详细讲解。

5、DHCP协议一般采用终端的硬件地址(如果是以太网,就是我们常说的MAC地址)来唯一标识一个终端设备。

6、DHCP协议通过设置IP地址使用租期,可以达到IP地址的分时复用效果,解决IP地址资源短缺的问题。

7、DHCP协议基本上是一个单向驱动协议,SERVER完全是被动的,其动作、行为基本完全由CLIENT的请求行为而激发,即SERVER端无法主动控制CLIENT端。因此其交互性和安全性就没有PPP协议那么完善,这是DHCP协议的致命缺点。



第2章  协议的报文格式
2.1  DHCP协议的封装
DHCP 协议是基于UDP层之上的应用,DHCP CLIENT将采用知名端口号68,DHCP SERVER采用知名端口号67。其报文内容的封装如图1所示:

链路层头
IP头
UDP头
DHCP报文


图1  DHCP报文封装格式

其中:

链路层头:承载报文的链路层信息头,常见的有Ethernet_II格式、802.1Q格式、 IEEE802.3格式、令牌环链路层头格式等。

IP头:标准的IP协议头,IPV4中长度为20bytes,包括了SrcIp,DstIp等信息。

UDP头:8bytes,包括了SrcPort,DstPort,报文长度及UDP校验和等信息。

DHCP报文:具体的DHCP报文内容。

由于DHCP协议是初始化协议,更简单的说,就是让终端获取IP 地址的协议,既然终端连IP地址都没有,何以能够发出IP报文呢?SERVER给CLIENT回送的报文该怎么封装呢?正是为了说明这个问题,上面才会介绍DHCP报文的封装格式。

为了解决这个问题,DHCP报文的封装采取了如下措施:

1、首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文。在Ethernet_II格式的网络中,就是DstMac为全1。

2、由于终端没有IP地址,IP头中的SrcIp规定填为全0。

3、当终端发出DHCP请求报文,它并不知道DHCP SERVER的IP地址,因此IP头中的DstIp填为有限的子网广播IP——全1,以保证DHCP SERVER的IP协议栈不丢弃这个报文。

4、上面的措施保证了DHCP SERVER能够收到终端的请求报文,但仅凭链路层和IP层信息,DHCP SERVER无法区分出DHCP报文,因此终端发出的DHCP请求报文的UDP层中的SrcPort 为68,DstPort为67。即DHCP SERVER通过知名端口号67来判断一个报文是否是DHCP报文

5、DHCP SERVER给终端的响应报文将会根据DHCP报文中的内容决定是广播还是单播,一般都是广播形式。广播封装时,链路层的封装必须是广播形式,在Ethernet_II格式的网络中,就是DstMac为全1,IP头中的DstIp 填为有限的子网广播IP——全1。单播封装时,链路层的封装是单播形式,在Ethernet_II格式的网络中,就是DstMac为终端的网卡MAC地址(此MAC地址存在于DHCP报文中)。 IP头中的DstIp 填为有限的子网广播IP——全1或者是即将分配给用户的IP地址(当终端能够接收这样的IP报文时)。两种封装方式中的UDP层都是相同的,SrcPort 为67,DstPort为68。终端通过知名端口号68来判断一个报文是否是DHCP SERVER的响应报文。

2.2  DHCP协议的报文格式
DHCP使用BOOTP的报文格式,但修改了一些字段的内容和含义。DHCP报文格式如图2所示


图2  DHCP协议的报文格式

下面详细介绍DHCP报文内容:

“op”字段:表示当前报文是client的请求还是server的应答,为1时表示是client的请求,为2时表示是server的应答。

“htype”,“hlen”字段:分别表示client 的网络硬件地址类型、长度,如“htype”为1,表示client 的网络硬件是10MB的以太网类型,“hlen”为6,表示client 的网络硬件地址长度是6bytes(即以太网类型的6bytes的MAC地址)

“跳数”字段:表示当前的DHCP报文经过的DHCP RELAY的数目,类似于IP头中的跳数字段,但含义完全不同,client或server发出DHCP报文时,此字都初始化为0,每经过一个DHCP RELAY,此字段就会加1,此字段的作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃。

“事务ID"字段:client每次发送DHCP请求报文时选择的随机数,用来匹配server的响应报文是对哪个请求报文的响应。client会丢弃“xid”不匹配的响应报文。

“秒数”字段:用来表示client开始DHCP请求后的时间流逝秒数,此字段一般没有多大意义,最初设计此字段是为了让DHCP SERVER在繁忙时,优先处理此字段大的DHCP请求(因为此字段越大说明这个client等的时间就越长)

“标志”字段:在 BOOTP中此字段是保留不用的,在DHCP协议中也只使用了其左边的最高位,其格式如图3所示:


图3  DHCP报文中“flags”字段格式

整个字段占16比特,其中,最左边比特被解释为广播响应标识位,所有其它比特保留备用,必须被client设置为0,server和DHCP RELAY忽略这些比特。当client不能接收单播的DHCP响应报文时,必须把广播响应标识位置1,否则置0。而DHCP SERVER在回响应报文时是广播还是单播,就将根据此广播响应标识位是否置位来判断,目前的client如WINDOWS 98 一般都能接收单播DHCP响应报文。

“客户机IP地址”字段:表示client自己的IP地址。可以是server分配给client的IP地址,也可以是client已有的IP地址。此字段不为0的原则就是client能够使用此IP地址接收IP报文。DHCP SERVER发现此字段不为0时,可以直接将响应报文单播给client。

“你的IP地址”字段:表示server分配给client的IP地址。当DHCP SERVER响应client的DHCP请求时,将把分配给client的IP地址填入此字段。

“服务器IP地址”字段:表示client 获取启动配置信息的服务器IP地址,一般是TFTP SERVER 的IP地址。

“中继代理IP地址”字段:记录第一个DHCP RELAY agent的IP地址。当client发出DHCP请求报文后,如果网络中存在DHCP RELAY,则第一个DHCP RELAY转发这个DHCP请求报文时,就会把自己的IP地址填入此字段(随后的DHCP RELAY将不再改写此字段,只是把“hops”加1)。DHCP  

将会根据此字段为用户分配IP地址,并把响应报文转发给此DHCP RELAY agent,由DHCP RELAY agent再转发给client。

“客户机硬件地址”字段:记录client的实际硬件地址内容。当client发出DHCP请求报文时,将把自己的网卡硬件地址填入此字段,DHCP SERVER一般都会使用此字段来唯一标识一个client。而且此字段与前面的“htype”“hlen”字段必须一致。如当“htype”“hlen”分别为1和6时,此字段必须填入6bytes的以太网MAC地址。

“服务器的主机名”字段:记录client 获取启动配置信息的服务器名字。此字段由DHCP SERVER填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。

“启动文件名”字段:记录client 的启动配置文件名。 此字段由DHCP SERVER填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。

“选项”字段:对于BOOTP,又称之为“vendor”字段。 此字段中包含了大量可选的终端初始配置信息和网络配置信息,如决定终端的IP特性配置信息,域名信息,标识终端的特殊信息,终端的默认网关IP地址,DNS 服务器的IP地址,WINS 服务器的IP地址,用户使用IP地址的有效租期等等信息。正是因为有了此字段,DHCP协议才能够给client提供大量的配置信息,此字段采用“CLV”方式构成,即Code:标识号,唯一标识后面的信息内容,占1bytes;length:长度,表示后面信息内容的长度,占1bytes; value:信息内容,其长度为 length 所指定,以bytes为单位。

选项字段是可选字段,它是变长的,其中对于我们最重要的一个选项是

"server identifier",它标识了server 的IP地址,并把它带给client。

如图4所示:

图 4  DHCP报文的“option”字段编码方式

当需要新的信息时,可以按照这种编码方式申请新的选项即可,目前DHCP协议已经支持即成为标准的option已有近80项,具体内容可以参考RFC1541。

由于选项不断扩展,可以从最新的RFC中得到最新的选项集合。其中最常用的选项包括Dhcp message type, router Ip,DNS Ip, Wins Ip,client id, server id等选项。

Dhcp message type:code = 53, length = 1, value= 1----8,此字段表示DHCP报文类型;

router Ip:code = 3, length = IP地址长度, value=client的默认网关的 IP地址;

DNS Ip :code = 6, length = IP地址长度的倍数, value= client的DNS服务器的IP地址序列;

Wins Ip :code = 44, length = IP地址长度的倍数, value= client的WINS服务器的 IP地址序列;

client id :code = 61, length = client的网络硬件地址的长度+2, value=“htype”+“hlen”+ client的网络硬件地址;

server id :code = 54, length = IP地址长度, value= DHCP SERVER的IP地址;

对于BOOTP协议,此字段为64bytes,对于DHCP协议,此字段为64---312 bytes,当client想要更长时,可以与DHCP SERVER协商。

2.3  DHCP协议报文的种类
DHCP协议采用CLIENT-SERVER方式进行交互,其报文格式共有8种,由“选项”字段中的“Dhcp message type ”选项的value值来确定,后面括号中的值即为相应类型的值,具体含义如下:

1:DHCPDISCOVER(0x01),此为client开始DHCP过程的第一个报文

2:DHCPOFFER(0x02),此为server对DHCPDISCOVER报文的响应

3:DHCPREQUEST(0x03),此报文是client开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文

4:DHCPDECLINE(0x04),当client发现server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知server禁止使用IP地址

5:DHCPACK(0x05),server对client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6:DHCPNAK(0x06),server对client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7:DHCPRELEASE(0x07),client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的client。

8:DHCPINFORM(0x08),client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。

既然DHCP兼容BOOTP,那么如何从报文中区分是DHCP还是BOOTP呢?前面说过,BOOTP协议比DHCP简单,而且client,server间的交互过程也简单:一个来回,两个报文就完成了,而且也没有IP地址续延的问题(因此采用BOOTP协议进行配置时,就必须一个终端一个IP地址的事先配置好,就没有DHCP协议那么灵活了)。BOOTP没有DHCP 那么多的报文类型,因此当发现在一个DHCP报文的“选项”字段中没有“Dhcp message type ”选项时,那么这个报文就是BOOTP报文。所以可见,DHCP报文“选项”字段中的“Dhcp message type ”选项是个非常重要的参数。



第3章  DHCP协议的实现过程
3.1  DHCP CLIENT的行为
所有支持DHCP 协议并能够发起DHCP过程的终端都称之为DHCP CLIENT,包括普通PC机,各种特殊设备如CABLEMODEM,IDT等。

DHCP CLIENT自己必须能够发出DHCPDISCOVER.、DHCPREQUEST、DHCPDECLINE等报文 (DHCPINFORM报文也是DHCP CLIENT发出,但实际中很少见),并且必须能够处理从服务器收到的以下几种报文:DHCPOFFER、DHCPACK和DHCPNAK。

当DHCP CLIENT处于初始化状态,即还没有获取IP地址的状态时,DHCP CLIENT将会发出一个广播的DHCPDISCOVER报文从而开始DHCP过程,其间与DHCP SERVER的交互过程下面详述。DHCP CLIENT自己应该具备超时机制,当此次DHCP不成功时,再自动开始新的DHCP过程。而且DHCP CLIENT还要根据“xid”字段来检查收到的DHCP 响应报文是否与自己发出的请求报文相匹配。

一旦DHCP CLIENT获得一个具有有限使用期限的IP地址后,它将自动维护一个定时器,在IP地址使用期限的50%的时刻,自动启动单播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则,在IP地址使用期限的87.5%的时刻,自动启动广播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则在IP地址使用期限到期时,DHCP CLIENT将不再使用此IP地址,而是开始新的DHCP过程再次申请IP地址。



图5  DHCP CLIENT 行为图

当DHCP CLIENT曾经获得过IP地址,然后重启初始化时,DHCP CLIENT仍优先想使用以前的IP地址,此时,DHCP CLIENT会直接启动广播续延IP地址租期的过程,如若续延成功,则使用租期相应向前延长,否则开始新的DHCP过程再次申请IP地址。 DHCP CLIENT的DHCP过程状态图如图5所示。

3.2  DHCP SERVER的行为
相对DHCP CLIENT,DHCP SERVER的行为比较简单,这只是仅从DHCP协议实现的角度来说的。因为在DHCP SERVER上必须提供给DHCP  CLIENT分配IP地址和配置相关初始配置信息的功能,也就是通常所说的地址池管理功能,这又是个比较繁杂的工作,但是,这却不是DHCP 协议本身的工作。

除了上述的地址池管理功能外,DHCP Server的行为完全由DHCP客户端来驱动,因此其行为相对简单,只需根据收到的DHCP CLIENT的各种请求报文,相应的响应不同的DHCP 响应报文即可。

当DHCP SERVER收到DHCPDISCOVER报文后,会从地址池中分配一个空闲IP,并获得DHCP CLIENT请求的参数,构造DHCPOFFER报文响应DHCP CLIENT;当DHCP SERVER收到DHCPREQUEST报文时,就会根据报文中记录的DHCP CLIENT的硬件地址查找其地址分配表,如若找到,则响应DHCPACK报文,DHCP CLIENT成功获得IP地址和配置信息,否则,响应DHCPNAK报文,DHCP CLIENT会自动重新开始DHCP过程;当DHCP SERVER收到DHCPRELEASE报文后,会解除这个IP地址与某个DHCP CLIENT的绑定,回收这个IP地址重新分配;当DHCP SERVER收到DHCPDECLINE报文后,会禁用报文中“客户机IP地址”字段的IP地址,不再分配这个IP地址。

注意: DHCP SERVER应该把收到的请求报文中的“xid”字段原封不动地拷贝到响应报文的“xid”字段,否则DHCP CLIENT不会接受这个响应报文。

DHCP SERVER是如何知道给DHCP CLIENT分配哪个网段的IP地址呢?DHCP SERVER收到DHCP请求报文后,将会首先查看“中继代理IP地址”字段是否为0 ,如果不为0,则就会根据此IP地址所在网段从相应地址池中为CLIENT分配IP地址,并且把响应报文直接单播给这个“中继代理IP地址”指定的IP地址,就是DHCP RELAY AGENT,而且UDP的目的端口号填为67,而不是68,如果为0,则DHCP SERVER认为CLIENT与自己在同一子网中,将会根据自己的IP地址所在网段从相应地址池中为CLIENT分配IP地址。

3.3  DHCP RELAY的行为
由于DHCP报文都采用广播方式,是无法穿越多个子网的,当要想DHCP报文穿越多个子网时,就要有DHCP RELAY的存在。DHCP RELAY可以是路由器,也可以是一台主机,总之,在具有DHCP RELAY功能的设备中,所有具有UDP目的端口号是67的局部传递的UDP信息,都被认为是要经过特殊处理的,所以,DHCP RELAY要监听UDP目的端口号为67的所有报文。

当DHCP RELAY收到一个这样的报文时,会首先判断是否是用户的请求报文,如果是用户的请求报文,它会先查看“跳数”字段的值,如果该值超过了16,这个报文会被丢弃,目前一般“跳数”字段的缺省值被设置为4,即如果“跳数”的值大于4,就将用户的请求报文丢弃。

如果“跳数”字段的值在规定范围之内,并且DHCP RELAY决定传播该报文,它必须检查“中继代理IP地址”字段的值,如果这个字段的值为0,则DHCP RELAY就会将接受到请求报文的端口的IP地址填入此字段,如果该端口有多个IP地址,DHCP RELAY会挑选其中的一个并持续用它传播全部的DHCP报文;如果这个字段的值不是0,则这个字段的值不能被修改,也不能被填充为广播地址。在这两种情况下,报文都将被单播到新的目的地(或DHCP SERVER),当然这个目的地(或DHCP SERVER)是可以配置的,以实现DHCP报文穿越多个子网的目的。

当DHCP RELAY发现这是DHCP SERVER的响应报文时,它也应当检查“中继代理IP地址”字段、“你的IP地址”字段和“客户机硬件地址”字段等,这些字段给DHCP RELAY提供了足够的信息将响应报文传送给客户机。

“中继代理IP地址”字段的值(非0)常常被用来标示一个用来传播响应报文的逻辑端口,如果这个值不能匹配任何一个与DHCP RELAY直连的逻辑端口,则这个响应报文将被丢弃。

同样DHCP RELAY也会检查“标志”字段中的广播标志位的值,如果为1,将广播封装好的报文,否则单播封装好报文后,传送给DHCP CLIENT,标准的DHCP RELAY的功能相对来说也比较简单,只是重新封装、续传DHCP报文。

下面的图6很好的标示出了对于不同的请求报文,其相应的响应报文的方式。



图6  不同的请求报文多对应的响应报文方式

其中: B表示广播的标志位。

X表示并不关心相应的字段取什么值。

normal表示从给定的IP地址进行正常的IP路由转发或用ARP转发。

3.4  DHCP交互过程
标准的DHCP server 和client的交互过程如图7所示:

图7  DHCP交互过程时序图

下面首先讲解DHCP SERVER与CLIENT的标准交互过程:

1、CLIENT首先发出广播的DHCPDISCOVER报文,广播的目的是让DHCP SERVER能够收到这个请求报文。在这个报文中,CLIENT可以在“选项”字段中加入“request paramter list”选项,表明自己想要获得的各种参数,而且四个IP地址字段都必须为0。

2、由于DHCPDISCOVER报文是广播,那么所有的DHCP SERVER都能够收到,所有的DHCP SERVER都会响应一个DHCPOFFER报文,其中“你的IP地址”字段就是DHCP SERVER能够提供给CLIENT使用的IP地址,而且DHCP SERVER会把自己的IP地址放在“选项”字段中以便CLIENT区分不同的DHCP SERVER,发出此报文后,在DHCP SERVER上就会存在一个已分配IP地址的记录。

3、CLIENT能够收到所有的DHCPOFFER报文,但CLIEN只能处理其中的一个,一般的原则是CLIENT接收、处理最先收到的那个DHCPOFFER报文。CLIENT会再发出一个广播的DHCPREQUEST报文,在“选项”字段中会加入选中的DHCP SERVER的IP地址和用户想要的IP地址,之所以广播是因为要通知所有的DHCP SERVER进行相应的处理。

4、DHCP SERVER收到DHCPREQUEST报文,判断“选项”字段中的DHCP SERVER的IP地址是否与自己的地址相同,不相同,则不做任何处理,如果自己发出过DHCPOFFER报文,则清除相应IP地址记录;当“选项”字段中的DHCP SERVER的IP地址是与自己的IP地址相同时,DHCP SERVER就会响应一个DHCPACK报文,其内容同DHCPOFFER类似,并在“选项”字段中增加了IP地址使用租期选项。

5、CLIENT收到DHCPACK报文后(经过上面的处理后,有且只有一个DHCPACK报文),会检查DHCP SERVER分配给自己的IP地址是否能够使用,如在以太网类型的网络中,CLIENT会发出免费的ARP请求来确定DHCP SERVER分配的IP地址是否已经被别人使用,如果可以使用,则CLIENT成功获得IP地址,并根据IP地址使用租期自动启动续延过程。

6、如果CLIENT发现DHCP SERVER分配的IP地址已经被别人使用,则CLIENT会发出DHCPDECLINE报文通知DHCP SERVER禁用这个IP地址以免引起IP地址冲突。然后CLIENT又开始新的DHCP过程,从第1步开始。

7、当CLIENT成功获取IP地址后,会根据IP地址使用租期自动启动续延过程,在使用租期过去50%时刻处,向DHCP SERVER发送单播DHCPREQUEST报文续延租期,如果成功即收到DHCP SERVER的DHCPACK报文,则租期相应向前延长,如果失败即没有收到DHCPACK报文,则CLIENT继续使用这个IP地址。在使用租期过去87.5%时刻处,向DHCP SERVER发送广播DHCPREQUEST报文续延租期,如果成功即收到DHCP SERVER的DHCPACK报文,则租期相应向前延长;如果失败即没有收到DHCPACK报文,则CLIENT继续使用这个IP地址。在使用租期到期时,CLIENT应自动放弃使用这个IP地址,并开始新的DHCP过程,从第1步开始。

8、CLIENT在成功获取IP地址后,随时可以通过发送DHCPRELEASE报文释放自己的IP地址,DHCP SERVER收到DHCPRELEASE报文后,会回收相应的IP地址重新分配。

当存在DHCP RELAY时,所有的DHCP报文都会经过DHCP RELAY进行转发,整个DHCP交互过程同上面类型,只是在报文封装时,稍有不同。

由上面的叙述可以看出,DHCP SERVER的行为完全由CLIENT来驱动,DHCP SERVER无法控制CLIENT的行为。因此DHCP协议的安全性比较差。





第4章  DHCP在具体组网中的应用实例
4.1  DHCP在MA5200中的应用
4.1.1    组网说明及数据规划
DHCP的实际应用,下面结合DHCP在MA5200上的应用来进行说明。

在MA5200的动态VLAN接入业务中,用户的IP地址都是通过DHCP方式分配,并且用户上网的起点就是进行DHCP过程。为了能够对用户进行合法性检查和标识用户,MA5200使用VLANID来标识用户,MA5200接入板支持802.1Q协议,并采用基于端口的VLAN划分方式来标识用户。用户通过支持802.1Q协议的二层交换机接入MA5200,二层交换机的每一个接入物理端口都会打上一个缺省的VLANID,即PVID,同一个接入物理端口下的所有用户上网时发出的报文都会被二层交换机打上相同的VLANID,MA5200就通过VLANID来控制用户的合法性。组网图如下:



图8  MA5200 VLAN业务组网图

由于VLANID是完全可信的,因此只要在MA5200上限制每个VLANID下能够接入的用户数目,就完全可以控制用户的数目,不至于出现用户大量发送非法DHCP报文造成DHCP SERVER地址池中地址耗尽的情况。对于用户仿冒IP地址和MAC地址的情况,采用了IP-VLAN-MAC三者绑定的方式来唯一标识一个用户,从而解决这个问题。

MA5200上实现了内置或外接DHCP Server功能,将虚模板作为DHCP Relay的接口地址,由于有内置DHCP Server,所以我们一般采用内置的Server,内置DHCP Server的地址可以设置成自环地址127.0.0.1或任意的接口地址。

MA5200的数据规划:

DHCP Server:(Virtual-template 1)172.16.0.1/24

IP Local Pool:172.16.0.2~172.16.0.100

DNS: Primary-IP:210.52.149.2

Second-IP:210.52.207.2

4.1.2  结合抓报所得数据分析DHCP协议实现原理
用户上网过程如下:

1、 用户开机后,发出DHCPDISCOVER报文;



图9  用户开机发出DHCPDiscover广播报文

客户机在开始启动的时候没有地址(假定用户上网的方式采用DHCP协议动态获得地址),它就会发出一个DHCPDiscover报文,该报文是广播报文,所有的具有DHCP Server功能的服务器都会收到该报文。在图9中我们可以看到该报文在链路层中发的确实是广播报文,在图10中我们要注意Transaction ID=2585989945和DHCP Message Type一项中type=Discover,前一项表示会话ID,即DHCP Server发回的响应报文中该结构的数值要与发出去的DHCP Discover中的该结构数值一样,后一项说明DHCP报文类型为Discover类型报文。



图10  客户机发出DHCPDiscover报文的帧结构



2、MA5200收到此报文后,根据VLANID,用户的MAC地址来判断用户是否合法,若不合法,拒绝此用户的请求,否则5200记录用户信息,续传报文给内置的DHCP SERVER;

3、内置的DHCP SERVER回送DHCPOFFER报文,5200续传给用户;

从DHCP Server回应的DHCPOffer报文中我们要注意以下几项:OP Code=2,表示这是DHCP报文中的回应报文; Transaction ID=2585989945,表示这个报文是与图9中的DHCPDiscover报文相关的报文,因为二者标示一致;Client IP Address=0.0.0.0,表示客户机还没有使用该地址;Your IP Address=172.16.0.2表示DHCP Server分配给该客户机的IP地址; DHCP Message Type一项中type=Offer表示这是一个DHCPOffer报文,是对DHCPDiscover的回应报文;Subnet mask=255.255.255.0表示这个地址的网段是一个标准的C类地址网段;Domain Name Server=210.52.149.2和210.52.207.2表示该用户可以使用这两个域名服务器;最主要的是DHCP Server ID一项:它标示了客户机下一次发出DHCPRequest报文时,哪个DHCP Server会发出回应!详细的请参见图11。



图11  DHCP Server回应的DHCPOffer报文的帧格式





4、用户发出DHCPREQUEST报文,5200续传给内置的DHCP Server,我们主要注意DHCP Message Type一项中type=Request表示这是一个请求报文,见图12;



图12 DHCP Request报文的帧格式和相关参数



5、内置的DHCP SERVER回送DHCPACK报文,5200 把用户的IP-VLAN-MAC信息绑定通知业务板用户上线成功,并续传报文给用户,用户获得IP地址,我们主要注意DHCP Message Type一项中type=Ack表示这是一个对DHCP Requset报文响应的应答报文,并且再一次强调了地址租期,见图13。

图13  DHCP Server回应的DHCP Ack报文的帧格式和相关

6、用户下网或IP地址的租约到期,客户机会发出一个DHCP Release报文,我们主要注意DHCP Message Type一项中type=Release表示这是一个释放IP地的报文,它所对应的代码值为0x07,见图14。

图14  客户机释放IP地址时的DHCP Release报文

4.2  宽带产品相关的数据配置
4.2.1    ESR8850中与DHCP RELAY相关的数据配置
ESR8850地址分配也分为内部分配和外挂DHCP SERVER分配两种方式,内部分配是PPP方式协商获得,外部分配是采用DHCP的方式,在此介绍外置方式,内置部分请参看开局指导书。

从 标题可以看出,ESR8850实现的是DHCP RELAY的功能,所以它的配置比较简单,只要在相应的接口下配置DHCP SERVER的地址即可。

1、配置DHCP RELAY

(1)进入接口配置模式

接口可以为FE、GE或VE,假设使用的VE2/0/0接口,则执行命令为:

ISN8850(config)#interface virtual-ethernet 2/0/0

(2)配置接口的DHCP服务器

假设DHCP SERVER 的IP地址为210.52.0.117

ISN8850(config-virtual-e2/0/0)#ip helper-address 210.52.0.117

4.2.2  S3526中与DHCP RELAY相关的数据配置
S3526系列交换机实现的也是DHCP RELAY的功能,它可支持配置 20个 DHCP 服务器组,每个服务器组可以配置 2个 IP 地址,分别是主服务器地址和备份服务器地址,DHCP服务器组的设置可以让不同的用户群到不同的 DHCP服务器组申请 IP 地址,即可以让某些 VLAN到一个服务器组申请 IP,另外一些 VLAN到另一个服务器组申请 IP 地址,这样做可以满足不同的需求,可以为某些特殊用户提供单独的DHCP服务,另外也可以使 DHCP服务器遭恶意攻击引起的影响降到最小范围。

1、配置DHCP RELAY

(1)配置 DHCP服务器组对应的 DHCP Server的 IP 地址

假设DHCP服务器组为1,对应的主备DHCP SERVER的地址为210.52.100.2和210.52.100.4,则执行命令为:

Quidway(config)# dhcp-server 1 ip 210.52.100.2  210.52.100.4

(2)配置 VLAN接口对应的 DHCP Server组

假设相应的VLAN接口为2,所对应的DHCP服务器组为1,则执行命令为:

Quidway(config-vlan2)# dhcp-server 1



第5章  DHCP协议的发展方向
DHCP协议虽然可以实现为客户机动态分配地址,但它的安全性有致命的弱点,表现在以下几个方面:

1、由于DHCP SERVER无法控制CLIENT行为,无法识别CLIENT的真假。因此DHCP SERVER的安全性较差,很容易遭到非法用户的恶意攻击,如用户大量发送非法DHCP报文时,造成DHCP SERVER 地址池中地址的耗尽。

2、无法发现非法用户仿冒其他用户的IP地址,MAC地址的情况。

基于上面安全性的问题,目前黑客采用的攻击方法主要有以下几个几种:

(1)重复执行ipconfig -release_all。

【解决方法】:在实际情况中,重复执行ipconfig -release all,实际上只发出了DHCP Request报文,并没有申请新的IP地址,DHCP服务器回一个DHCP Ack报文,允许用户继续使用该IP地址,攻击失败。

(2)先执行一次正常的DHCP过程,用NetXRay把报文截取下来,再修改MAC地址,把报文按顺序发出去,但没有发ARP广播报文,结果导致DHCP server被骗去一个IP地址,黑客工具Azrael就是利用这个原理骗取IP地址。

【解决方法】: 在正常情况下,用户申请到动态IP地址后,都要发一个ARP广播,目的IP地址是分配给它的IP,想看看是否有IP地址冲突。可以利用这一点检查用户动态申请IP地址后是否发ARP广播,如果不发就认为是假的用户,就通知DHCP服务器把该IP地址释放。

(3)黑客在方法2的基础上再加一条ARP广播,就可以骗过DHCP Relay,申请到的IP地址不会被释放,结果大量模拟发送这种报文就可以把DHCP地址池耗尽。 星天平台的Vlan Dial可以实现这种原理的攻击。

【解决方法】:由于现在的网络主要是ATM网和IP网,而IP网络中最盛行的是以太网,在以太网中为了抑制广播,采用了VLAN的技术。由此我们可以想到要从根本上防止DHCP攻击,可以采用限制单个PVC/VLAN上的用户数的方法。经过限制PVC/VLAN上的接入用户数,黑客工具再厉害也不能获得很多IP地址。

从上面的攻击中可以看出,在实际应用中,仅仅按照DHCP的标准协议内容来实现DHCP功能是远远不够的,除非在一个完全可以信任的网络中如企业内部网。在实际应用中除了实现DHCP的标准功能外,还必须考虑对于用户的控制,虽然这超出了DHCP协议本身的内容,但没有这些控制功能,连网络的安全性都无法保证,DHCP也就失去了意义。

为了克服其缺点,DHCP协议也在不断的发展和完善。现在已经有了DHCP+协议的提法。简单的说,DHCP+协议就是在现在的DHCP协议基础上增加了用户认证功能以克服其缺陷,既然要认证,那么用什么信息来标识用户呢? 至于怎么实现目前还没有统一的说法。各个公司都有着自己的方法:如有DHCP+WEB认证的方式,两次DHCP的方式等,其实不难看出,MA5200的DHCP实现方式也是一种DHCP+模式,只是用户的控制和认证是在DHCP RELAY处,即MA5200内部做了捆绑完成的,而且是以VLANID来标识用户的。

就目前来说,感觉最现实,改动最少的方法还是在DHCP RELAY处进行用户认证,因为如果要在DHCP SERVR处实现用户认证,则就必须改动现存的DHCP SERVER软件,而目前DHCP SERVER软件都是集成在操作系统中的,如 NT,UNIX,这意味着要改动操作系统,肯定不是短时间能够支持的。而DHCP RELAY是新增的附加软件,改动容易,在DHCP RELAY处实现用户认证后,DHCP SERVER完全不用改动。

论坛徽章:
0
3 [报告]
发表于 2004-06-28 16:39 |只看该作者

求助一个DHCP服务器的问题

前几天因为要为一公司的分公司做DHCP分配IP(通过广域网),现在算是做完的了,还好,我也是在网上找的文章,可能有用。

论坛徽章:
0
4 [报告]
发表于 2004-06-28 16:55 |只看该作者

求助一个DHCP服务器的问题

简单的说,是通过网关来判断从哪个子网来的

论坛徽章:
0
5 [报告]
发表于 2004-06-30 15:16 |只看该作者

求助一个DHCP服务器的问题

在三层交换机或路由器上使用ip help-address DHCP,其他网段的机器能通过三层交换机或路由器转发DHCP请求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP