DHCP技术白皮书
关键词:DHCP,BOOTP,DHCP服务器,DHCP中继,DHCP客户端,DHCP Snooping,DHCP安全
摘 要:本文介绍了DHCP的基本原理和典型应用,以及H3C公司DHCP特性解决方案的特点和组网情况。
缩略语:
缩略语 |
英文全名 |
中文解释 |
DHCP |
Dynamic Host Configuration Protocol |
动态主机配置协议 |
BOOTP |
Bootstrap Protocol |
自举协议 |
ARP |
Address Resolution Protocol |
地址解析协议 |
Option 82 |
DHCP Relay Agent Information Option |
DHCP中继代理信息选项 |
TFTP |
Trivial File Transfer Protocol |
简单文件传输协议 |
连接到Internet的计算机需要在发送或接收数据报前知道其IP地址和其他信息,如网关地址、使用的子网掩码和域名服务器的地址。计算机可以通过BOOTP协议获取这些信息。
BOOTP协议(Bootstrap Protocol)是一种较早出现的远程启动的协议,通过与远程服务器通信以获取通信所需的必要信息,主要用于无磁盘的客户端从服务器得到自己的IP地址、服务器的IP地址、启动映像文件名、网关IP地址等等。
BOOTP设计用于相对静态的环境,每台主机都有一个永久的网络连接。管理人员创建一个BOOTP配置文件,该文件定义了每台主机的一组BOOTP参数。由于配置通常保持不变,该文件不会经常改变。典型情况下,配置将保持数星期不变。
随着网络规模的不断扩大、网络复杂度的不断提高,网络配置也变得越来越复杂,在计算机经常移动(如便携机或无线网络)和计算机的数量超过可分配的IP地址等情况下,原有针对静态主机配置的BOOTP协议已经越来越不能满足实际需求。为方便用户快速地接入和退出网络、提高IP地址资源的利用率,需要在BOOTP基础上制定一种自动机制来进行IP地址的分配。为此,IETF设计了一个新的协议,即DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。
DHCP可以说是BOOTP的增强版本。它采用客户端/服务器的通信模式。所有的IP网络配置参数都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;而客户端则会使用服务器分配的IP网络参数进行通信。
针对客户端的不同需求,DHCP提供三种IP地址分配策略:
l 手工分配地址:由管理员为少数特定客户端(如WWW服务器等)静态绑定固定的IP地址,通过DHCP将配置的固定IP地址发给客户端;
l 自动分配地址:DHCP为客户端分配租期为无限长的IP地址;
l 动态分配地址:DHCP为客户端分配有有效期限的IP地址,到达使用期限后,客户端需要重新申请地址。
管理员可以选择DHCP采用哪种策略响应每个网络或每台主机。
DHCP从两个方面扩充了BOOTP:
l DHCP允许计算机快速、动态的获取IP地址。为使用DHCP的动态地址分配机制,管理员必须配置DHCP服务器,使其能提供一组IP地址,称之为地址池。任何时候一旦有新的计算机连接到网络上,该计算机就与服务器联系,并申请一个IP地址。服务器从配置的地址池中选择一个地址,并将它分配给该计算机。
l 与BOOTP相比,DHCP可以为客户端提供更加丰富的网络配置信息。
l DHCP服务器:DHCP服务的提供者,通过DHCP报文与DHCP客户端交互,为各种类型的客户端分配合适的IP地址,并可以根据需要为客户端分配其它网络参数。
l DHCP客户端:是整个DHCP过程的触发者和驱动者,通过DHCP报文和DHCP服务器交互,得到IP地址和其他网络参数。
l DHCP中继:DHCP报文的中继转发者。它在处于不同网段间的DHCP客户端和服务器之间承担中继服务,解决了DHCP客户端和DHCP服务器必须位于同一网段的问题。
l DHCP Snooping:DHCP服务的二层监听功能。利用该功能可以从接收到的DHCP-ACK和DHCP-REQUEST报文中提取并记录IP地址和MAC地址信息。
DHCP报文格式如图1所示
图1 DHCP报文格式
DHCP报文的各个字段的具体说明如下:
l op:报文的操作类型,分为请求报文和响应报文,1为请求报文;2为响应报文。具体的报文类型在option字段中标识。
l htype:硬件地址类型。
l hlen:硬件地址长度。系统目前只对以太网支持,硬件地址长度固定为6。
l hops:DHCP报文经过的DHCP中继的数目。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。
l xid:由客户端软件产生的随机数,用于匹配请求和应答报文。
l secs:客户端进入IP地址申请进程的时间或者更新IP地址进程的时间;由客户端软件根据情况设定。目前没有使用,固定为0。
l flags:标志字段。第一个比特为广播响应标识位,用来标识DHCP服务器响应报文是采用单播还是广播方式发送,0表示采用单播方式,1表示采用广播方式。其余比特保留不用。
l ciaddr:DHCP客户端的IP地址。
l yiaddr:DHCP服务器分配给客户端的IP地址。
l siaddr:DHCP客户端获取IP地址等信息的服务器IP地址。
l giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。
l chaddr:DHCP客户端的硬件地址。
l sname:DHCP客户端获取IP地址等信息的服务器名称。
l file:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。
l options:可选变长选项字段,包含报文的类型、有效租期、DNS服务器的IP地址、WINS服务器的IP地址等配置信息。
由于在IP地址动态获取过程中采用广播方式发送报文,因此要求DHCP客户端和服务器位于同一个网段内。如果DHCP客户端和DHCP服务器位于不同的网段,则需要通过DHCP中继来中继转发DHCP报文。
通过DHCP中继完成动态配置的过程中,客户端与服务器的处理方式与不通过DHCP中继时的处理方式基本相同。下面仅以DHCP客户端与DHCP服务器在同一网段的情况为例,说明DHCP协议的工作过程。DHCP中继的工作过程,请参见“2.4 DHCP中继工作过程”。
为了动态获取并使用一个合法的IP地址,需要经历以下几个阶段:
(1) 发现阶段:即DHCP客户端寻找DHCP服务器的阶段。
(2) 提供阶段:即DHCP服务器提供IP地址的阶段。
(3) 选择阶段:即DHCP客户端选择某台DHCP服务器提供的IP地址的阶段。
(4) 确认阶段:即DHCP服务器确认所提供的IP地址的阶段。
图2 IP地址动态获取过程
IP地址的动态获取过程如图2所示,下面将详细介绍每个阶段的工作过程。
在发现阶段,DHCP客户端通过发送DHCP-DISCOVER报文来寻找DHCP服务器。
由于DHCP服务器的IP地址对于客户端来说是未知的,所以DHCP客户端以广播方式发送DHCP-DISCOVER报文。所有收到DHCP-DISCOVER报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
网络中接收到DHCP-DISCOVER报文的DHCP服务器,会选择一个合适的IP地址,连同IP地址租约期限和其他配置信息(如网关地址,域名服务器地址等)一同通过DHCP-OFFER报文发送给DHCP客户端。
DHCP服务器通过地址池保存可供分配的IP地址和其他配置信息。当DHCP服务器接收到DHCP请求报文后,将从IP地址池中取得空闲的IP地址及其他的参数,发送给DHCP客户端。
DHCP服务器为客户端分配IP地址的优先次序如下:
(1) 与客户端MAC地址或客户端ID静态绑定的IP地址;
(2) DHCP服务器记录的曾经分配给客户端的IP地址;
(3) 客户端发送的DHCP-DISCOVER报文中Option 50字段指定的IP地址;
(4) 在DHCP地址池中,顺序查找可供分配的IP地址,最先找到的IP地址;
(5) 如果未找到可用的IP地址,则依次查询租约过期、曾经发生过冲突的IP地址,如果找到则进行分配,否则将不予处理。
DHCP服务器为客户端分配IP地址时,服务器首先需要确认所分配的IP没有被网络上的其他设备所使用。DHCP服务器通过发送ICMP Echo Request(ping)报文对分配的IP进行探测。如果在规定的时间内没有应答,那么服务器就会再次发送ping报文。到达规定的次数后,如果仍没有应答,则所分配的IP地址可用。否则将探测的IP地址记录为冲突地址,并重新选择IP地址进行分配。
如果有多台DHCP服务器向DHCP客户端回应DHCP-OFFER报文,则DHCP客户端只接受第一个收到的DHCP-OFFER报文。然后以广播方式发送DHCP-REQUEST请求报文,该报文中包含Option 54(服务器标识选项),即它选择的DHCP服务器的IP地址信息。
以广播方式发送DHCP-REQUEST请求报文,是为了通知所有的DHCP服务器,它将选择Option 54中标识的DHCP服务器提供的IP地址,其他DHCP服务器可以重新使用曾提供的IP地址。
收到DHCP客户端发送的DHCP-REQUEST请求报文后,DHCP服务器根据DHCP-REQUEST报文中携带的MAC地址来查找有没有相应的租约记录。如果有,则发送DHCP-ACK报文作为应答,通知DHCP客户端可以使用分配的IP地址。
DHCP客户端收到DHCP服务器返回的DHCP-ACK确认报文后,会以广播的方式发送免费ARP报文,探测是否有主机使用服务器分配的IP地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送DHCP-DECLINE报文给DHCP服务器,通知DHCP服务器该地址不可用,并重新申请IP地址。
如果DHCP服务器收到DHCP-REQUEST报文后,没有找到相应的租约记录,或者由于某些原因无法正常分配IP地址,则发送DHCP-NAK报文作为应答,通知DHCP客户端无法分配合适IP地址。DHCP客户端需要重新发送DHCP-DISCOVER报文来请求新的IP地址。
DHCP客户端每次重新登录网络时,不需要再发送DHCP-DISCOVER报文,而是直接发送包含前一次分配的IP地址的DHCP-REQUEST请求报文,即报文中的Option 50(请求的IP地址选项)字段填入曾经使用过的IP地址。DHCP服务器收到这一报文后,判断DHCP客户端是否可以使用请求的地址:
l 如果可以使用请求的地址,DHCP服务器将回复DHCP-ACK确认报文。收到DHCP-ACK报文后,DHCP客户端可以继续使用该地址进行通信。如图3所示。
图3DHCP客户端可以重新使用曾分配的IP地址
l 如果请求的IP地址已无法再分配给DHCP客户端(例如,此IP地址已分配给其它DHCP客户端使用),则DHCP服务器将回复DHCP-NAK否认报文。DHCP客户端收到此报文后,必须重新发送DHCP-DISCOVER报文来请求新的IP地址。如图4所示。
图4 DHCP客户端不能重新使用曾分配的IP地址
DHCP服务器分配给DHCP客户端的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回分配的IP地址。如果DHCP客户端要延长其IP租约,则必须更新其IP租约。
(1) IP租约期限达到一半(T1)时,DHCP客户端会自动以单播的方式,向DHCP服务器发送DHCP-REQUEST报文,请求更新IP地址租约。如果收到DHCP-ACK报文,则租约更新成功;如果收到DHCP-NAK报文,则重新发起申请过程。
(2) 到达租约期限的87.5%(T2)时,如果仍未收到DHCP服务器的应答,DHCP客户端会自动向DHCP服务器发送更新其IP租约的广播报文。如果收到DHCP-ACK报文,则租约更新成功;如果收到DHCP-NAK报文,则重新发起申请过程。
图5所示,为租约达到87.5%,广播发送DHCP-REQUEST报文后,收到DHCP服务器回应的DHCP-ACK报文,租约更新成功的情况。
图5 更新IP地址租约
DHCP客户端不再使用分配的IP地址时,会主动向DHCP服务器发送DHCP-RELEASE报文,通知DHCP服务器释放IP地址的租约。DHCP服务器会保留这个DHCP客户端的配置信息,以便该客户端重新申请地址时,重用这些参数。
DHCP客户端获取IP地址后,如果需要从DHCP服务器获取更为详细的配置信息,则发送DHCP-INFORM报文向DHCP服务器进行请求。DHCP客户端通过Option 55(请求参数列表选项),指明需要从服务器获取哪些网络配置参数。
DHCP服务器收到该报文后,将通过DHCP-ACK报文为客户端分配它所需要的网络参数。
原始的DHCP协议要求客户端和服务器只能在同一个子网内,不可以跨网段工作。因此,为进行动态主机配置需要在所有网段上都设置一个DHCP服务器,这显然是不经济的。
DHCP中继的引入解决了这一问题,它在处于不同网段间的DHCP客户端和服务器之间承担中继服务,将DHCP协议报文跨网段中继到目的DHCP服务器,于是不同网络上的DHCP客户端可以共同使用一个DHCP服务器。
图6 DHCP中继工作过程示意图
DHCP中继的工作过程如图6所示。DHCP客户端发送请求报文给DHCP服务器,DHCP中继收到该报文并适当处理后,发送给指定的位于其它网段上的DHCP服务器。服务器根据请求报文中提供的必要信息,通过DHCP中继将配置信息返回给客户端,完成对客户端的动态配置。
(1) DHCP中继接收到DHCP-DISCOVER或DHCP-REQUEST报文后,将进行如下处理:
l 为防止DHCP报文形成环路,抛弃报文头中hops字段的值大于限定跳数的DHCP请求报文。否则,继续进行下面的操作。
l 检查giaddr字段。如果是0,需要将giaddr字段设置为接收请求报文的接口IP地址。如果接口有多个IP地址,可选择其一。以后从该接口接收的所有请求报文都使用该IP地址。如果giaddr字段不是0,则不修改该字段。
l 将hops字段增加1,表明又经过一次DHCP中继。
l 将请求报文的TTL设置为DHCP中继设备的TTL缺省值,而不是原来请求报文的TTL减1。对中继报文的环路问题和跳数限制问题都可以通过hops字段来解决。
l DHCP请求报文的目的地址修改为DHCP服务器或下一个DHCP中继的IP地址。从而,将DHCP请求报文中继转发给DHCP服务器或下一个DHCP中继。
(2) DHCP服务器根据giaddr字段为客户端分配IP地址等参数,并将DHCP应答报文发送给giaddr字段标识的DHCP中继。DHCP中继接收到DHCP应答报文后,会进行如下处理:
l DHCP中继假设所有的应答报文都是发给直连的DHCP客户端。giaddr字段用来识别与客户端直连的接口。如果giaddr不是本地接口的地址,DHCP中继将丢弃应答报文。
l DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP应答报文广播发送给DHCP客户端;否则将DHCP应答报文单播发送给DHCP客户端,其目的地址为yiaddr,链路层地址为chaddr。
DHCP具有如下缺点:
(1) 当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;
(2) DHCP服务器不能跨网段与客户端通信,除非通过DHCP中继转发报文。
DHCP安全的主要功能是管理DHCP中继的用户地址表(包括动态添加、手工添加、手工删除以及查询),并通过与ARP模块配合实现禁止非正常获取IP地址的用户上网。这样就可以有效的进行地址规划和分配,实现对用户的控制。
图7 DHCP安全示意图
如图7所示,DHCP安全实现的基本功能如下:
(1) 合法用户IP地址表的管理
确保所有合法用户都记录在DHCP中继的用户地址表项中。
当客户端通过DHCP中继从DHCP服务器获取到IP地址时,DHCP中继可以自动记录客户端IP地址与MAC地址的绑定关系,生成DHCP中继的动态用户地址表项。同时,为满足用户采用合法固定IP地址访问外部网络的需求,DHCP中继也支持静态用户地址表项配置,即在DHCP中继上手工配置IP地址与MAC地址的绑定关系。
DHCP中继还支持用户表项的手工删除和查询功能。
(2) 禁止非正常获取IP地址的用户上网的功能
该功能需要ARP功能配合。对于和用户地址表中MAC地址与IP地址不匹配的ARP请求,DHCP中继不会返回ARP应答。
(3) 表项老化功能
由于某些三层设备无法处理DHCP客户端发出的DHCP-RELEASE报文(单播报文直接进行硬件三层转发,不会送给CPU处理),造成DHCP客户端主动释放IP地址后,DHCP中继用户地址表中依然保留用户的MAC地址与IP地址绑定信息,使用户地址表项无法老化。为了解决这个问题,目前设备提供握手功能来实现DHCP用户地址表项的老化。
握手功能即DHCP中继模拟DHCP客户端定期向DHCP服务器发送握手请求报文DHCP-REQUEST,报文的内容根据用户地址表项的内容来构建,但源MAC地址使用DHCP中继接口的MAC地址,以和正常发送的DHCP-REQUEST报文进行区分。服务器收到DHCP-REQUEST报文后,检测申请的IP地址是否可以分配,若可以分配则回应一个DHCP-ACK报文,若不可以分配则回应一个DHCP-NAK报文。DHCP中继收到服务器回应的报文后,进行判断:
l 若收到了DHCP-ACK报文,则证明用户表项中的IP地址已经被释放,DHCP中继将删除该表项;
l 若收到了DHCP-NAK报文,则证明用户表项中的IP地址还没有被用户释放,DHCP中继将继续保留该表项。
对于部分DHCP服务器,一旦租约过期就会不响应中继的握手请求报文。针对这种情况,设备上设置了握手请求报文的最大发送次数。如果DHCP中继发送DHCP-REQUEST报文的次数达到最大值后,仍没有收到应答,DHCP中继则认为租约已经过期,将该表项删除。
DHCP Snooping即DHCP服务的二层监听功能,开启DHCP Snooping功能后,设备就可以从接收到DHCP-ACK和DHCP-REQUEST报文中提取并记录IP地址和MAC地址信息。
出于安全性的考虑,安全部门需要记录用户上网时所用的IP地址,确认用户申请的IP地址和用户使用的主机的MAC地址的对应关系。可以通过DHCP Snooping功能监听DHCP-REQUEST报文和DHCP-ACK报文,并记录用户获取的IP地址信息。
DHCP Snooping的信任功能,可以为用户提供进一步的安全性保证
DHCP Snooping信任功能可以控制DHCP服务器应答报文的来源,以防止网络中可能存在的伪造或非法DHCP服务器为其他主机分配IP地址及其他配置信息。
DHCP Snooping信任功能将端口分为信任端口和不信任端口:
l 信任端口是与合法的DHCP服务器直接或间接连接的端口。信任端口对接收到的DHCP报文正常转发,从而保证了DHCP客户端获取正确的IP地址。
l 不信任端口是不与合法的DHCP服务器连接的端口。从不信任端口接收到DHCP服务器响应的DHCP-ACK、DHCP-NAK和DHCP-OFFER报文会被丢弃,从而防止了DHCP客户端获得错误的IP地址。
在传统的DHCP动态分配IP地址方式中,同一VLAN的用户得到的IP地址所拥有的权限是完全相同的。网络管理者不能对同一VLAN中特定的用户进行有效的控制。普通的DHCP中继代理不支持Option 82,也不能够区分不同的客户端,从而无法结合DHCP动态分配IP地址的应用来控制客户端对网络资源的访问,给网络的安全控制提出了严峻的挑战。
RFC 3046定义了DHCP Relay Agent Information Option(Option 82),在DHCP请求报文中附加一些选项信息,使DHCP服务器能够更精确的确定用户的位置,从而对不同的用户采取不同的地址分配策略。Option 82包含两个子选项Circuit ID(Sub-option 1)和Remote ID(Sub-option 2)。
图8 Option82原理示意图
如图8所示,Option 82的工作过程为:
(1) 用户未通过认证、未获得动态IP地址前,只有认证报文和DHCP报文可以通过DHCP Snooping/DHCP中继设备。
(2) 客户端向认证服务器发出认证请求,经过DHCP Snooping/DHCP中继设备的转发到达认证服务器。其中,认证服务器能够管理用户的权限信息。
(3) 认证服务器对用户的合法性进行认证之后,通过认证应答报文把用户的权限告知客户端。
(4) 认证通过的合法用户根据认证服务器下发的权限,再向DHCP服务器发起地址请求,同时将权限信息携带在Option 82选项字段中。
(5) 支持DHCP Option 82地址分配策略的DHCP服务器根据Option 82字段中的特定权限值为用户分配相应的IP地址。
通过将Option 82与实际的认证系统、支持Option 82地址分配策略的DHCP服务器结合,能够做到使用Option 82的Circuit ID和Remote ID子选项按不同的用户权限给用户分配不同的IP地址。一方面能更精确的进行IP地址管理,另一方面可以让设备进行“源IP地址”的策略路由,从而达到不同IP地址的用户有不同的路由规则、不同的上网权限的目的。
目前我司产品的DHCP Snooping、DHCP中继均已经支持Option 82功能,能够在DHCP报文中添加和剥离用户的位置信息。
自动配置功能是设备在空配置启动时自动获取并执行配置文件的功能。
当设备在空配置启动时,系统会自动将设备的指定接口(如VLAN接口1或第一个以太网接口)设置为DHCP客户端,并向DHCP服务器获取IP地址及后续获取配置文件所需要的信息(例如:TFTP服务器的IP地址、TFTP服务器名、启动文件名等)。如果获取到相关信息,则DHCP客户端就可发起TFTP请求,从指定的TFTP服务器获取配置文件,之后设备就使用获取到的配置文件进行设备初始化工作。如果没有获取到相关信息,设备就使用空配置文件进行设备初始化工作。
图9 DHCP客户端和DHCP服务器在同一个网段内
DHCP客户端与DHCP服务器处于同一个网段内,以DHCP的方式动态获取IP地址和其他网络参数。
组网时需要保证DHCP服务器上的地址池网段与DHCP服务器的接口IP地址网段相匹配。
图10 DHCP客户端和DHCP服务器不在同一个网段内
用户跨网段申请地址,DHCP服务器与DHCP客户端不在同一个局域网中,客户端通过DHCP中继,以DHCP的方式动态获取IP地址和其他网络参数。
组网时需要把DHCP中继的接口网段与DHCP服务器的地址池网段配置为一致,否则可能会导致DHCP客户端申请的地址不在网关的网段内,致使DHCP客户端无法进行通信。同时,DHCP服务器上需要配置好路由,以保证DHCP中继与DHCP服务器能够单播通信。
图11 Option 82典型组网应用
DHCP客户端与DHCP服务器在同一网段内,二者通过DHCP Snooping通信,以保证DHCP客户端从合法的DHCP服务器获取IP地址。还可以通过DHCP Snooping在DHCP请求报文中添加Option 82,以便DHCP服务器根据DHCP客户端的位置信息为其分配IP地址。
组网时需要注意的是,DHCP Snooping设备所有端口默认为非信任端口,需要配置连接服务器的端口为信任端口,否则会导致DHCP服务器的应答报文无法传递给DHCP客户端。
图12 自动配置典型组网应用
DHCP客户端在空配置启动时,通过DHCP服务器获取IP地址、TFTP服务器地址等信息后,从TFTP服务器获取配置文件并执行。
图13 DHCP应用综合组网图
如图13所示,用户跨网段以DHCP的方式动态获取IP地址,并在二层通过DHCP Snooping提高安全性。
H3C公司支持的DHCP特性是遵循RFC 2131和RFC 2132实现的,目前可以全面支持RFC中所述的DHCP基本及扩展功能,包括:DHCP客户端/BOOTP客户端,DHCP中继,DHCP服务器,DHCP安全,DHCP Snooping和DHCP自动配置功能。
随着网络规模的扩大化和网络环境的复杂化,DHCP服务被应用到越来越多的网络环境中,H3C公司的DHCP特性解决方案具有完整的产品系列,可以为客户提供完善、灵活、便捷的组网配置方案,其主要优势有以下几点:
l 功能完备,可以为客户提供DHCP客户端、中继到服务器的全面功能实现;
l 具有出色的业务支持能力及灵活的组网方案;
l 良好的易用性和可配置性;
l 可以与业界其它主流厂商设备及Windows、Linux服务器实现良好的互通;
l 方便管理、部署经济、设备开销低。
l RFC 951:BOOTSTRAP PROTOCOL(BOOTP)
l RFC 1497:BOOTP Vendor Information Extensions
l RFC 2131:Dynamic Host Configuration Protocol(DHCP)
l RFC 2132:DHCP Options and BOOTP Vendor Extensions
l RFC 3046:DHCP Relay Agent Information Option