DHCP
动态主机配置协议(Dynamic Host Configuration Protocol)是一种用于集中对用户IP地址进行动态管理和配置的技术。
终端设备需要配置IP地址才能接入网络,当设备过多,就可以使用动态分配IP
客户端使用的UDP端口号是67
服务器、中继使用的UDP端口号是68
DHCP角色
DHCP客户端:通过DHCP协议请求获取IP地址等网络参数的设备。例如,IP电话、PC、手机、无盘工作站等。
DHCP服务器:负责为DHCP客户端分配网络参数的设备。
DHCP中继:负责转发DHCP服务器和DHCP客户端之间的DHCP报文,协助DHCP服务器向DHCP客户端动态分配网络参数的设备。
DHCP报文是基于UDP协议传输的。DHCP客户端向DHCP服务器发送报文时采用67端口号,DHCP服务器向DHCP客户端发送报文时采用68端口号。
报文类型
DHCP DISCOVER:客户端用来寻找DHCP服务器(携带了客户端的MAC地址、需要请求的参数列表、广播标志位0单播1广播)
DHCP OFFER:服务器用来响应DISCOVER,携带了各种配置信息
DHCP REQUEST:客户端收到Offer后广播回复,客户端重启后广播确认先前分配的IP地址,客户端和IP绑定后更新租期
DHCP ACK:服务器对请求的确认回复
DHCP NAK:服务器对请求的拒绝回复
DHCP RELEASE:客户端可通过发送此消息主动释放服务器分配给它的IP地址,当服务器收到此消息后,可将这个IP地址分配给其它的客户端。
DHCP DECLINE:当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此消息来通知服务器,并且会重新向服务器申请地址。
DHCP INFORM:DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP-INFORM请求消息。
报文字段
OP(Opcode):1客户端请求报文,2服务器响应报文
Hops:当前DHCP报文经过的DHCP中继的数目,每经过一个DHCP中继时,该字段加1,最大16
xid:由客户端选择的一个随机数,客户端用它对请求和应答进行匹配
flags:最高位为广播响应标志位,其余的位均被置为0,最高位0:客户端请求服务器以单播形式发送响应报文,1:客户端请求服务器以广播形式发送响应报文
ciaddr (client ip address):表示客户端的IP地址。可以是服务器分配给客户端的IP地址或者是0.0.0.0用于请求时的临时地址,不是有效的地址
yiaddr (your client ip address):表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。
siaddr (server ip address):DHCP客户端获得启动配置信息的服务器的IP地址。
giaddr (gateway ip address):该字段表示第一个DHCP中继的IP地址(注意:不是地址池中定义的网关)
chaddr (client hardware address):该字段表示客户端的MAC地址
DHCP的Option字段
主要由三部分组成:
1、Type:Options号
2、Length:该字段表示后面信息内容的长度
3、Value:信息内容
Options号:
1:设置子网掩码选项。
3:设置网关地址选项。
6:设置DNS服务器地址选项。
15:设置域名选项。
50:设置请求IP选项。
51:续约总时间100%
53:设置DHCP消息类型。
54:设置服务器标识(表示哪一台服务器)。
55:设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值。
58:续约Time1,默认50%
59:续约Time2,默认87.5%
82:中继代理信息选项,该选项记录了DHCP客户端的位置信息,中继和snooping收到客户端的请求报文后,会添加该字段发给服务器
地址池
接口地址池:为连接到同一网段的主机或终端分配IP地址(dhcp select interface)优先级高
全局地址池:为所有连接到DHCP服务器的终端分配IP地址(dhcp select global)
当服务器没有空闲地址可以分配的时候,会选择冲突地址进行分配,减少分配的地址冲突
工作原理:
发现阶段
DHCP客户端广播(255.255.255.255)发送Discover报文查找服务器,同一网段内所有DHCP服务器或中继都能收到此报文。
DHCP DISCOVER报文中携带了客户端的MAC地址(DHCP DISCOVER报文中的chaddr字段)、需要请求的参数列表选项(Option55中填充的内容,标识了客户端需要从服务器获取的网络配置参数)、广播标志位(DHCP DISCOVER报文中的flags字段,表示客户端请求服务器以单播或广播形式发送响应报文)等信息。
提供阶段
同一网段内如果有多个服务器或者中继都能收到此报文,每个服务器可能会部署多个地址池,服务器通过地址池来管理可供分配的IP地址等网络参数,为了防止分配出去的IP地址跟网络中其他客户端的IP地址冲突,DHCP服务器在发送DHCP OFFER报文前可以通过发送源地址和目的地址都为预分配出去IP地址的ICMP ECHO REQUEST报文对分配的IP地址进行地址冲突探测,如果收到应答报文则把该地址标记为冲突地址,如果未收到则通过Offer报文单播发给客户端(如果16s内没收到客户端的响应,就可以给其他客户端)
选取规则:
1.DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。
2.客户端以前曾经使用过的IP地址,即客户端发送的请求报文中请求IP地址选项的地址
3.DHCP服务器上记录的曾经分配给客户端的IP地址。
4.如果在DHCP地址池中未找到可供分配的空闲IP地址从大到小,则依次查询超过租期、发生冲突的IP地址,如果找到可用的IP地址,则进行分配,否则发送DHCP NAK报文作为应答,通知DHCP客户端无法分配IP地址。DHCP客户端需要重新发送DHCP DISCOVER报文来申请IP地址。
选择阶段
因为DHCP Discover报文是广播发送的,所以会收到多个服务器的Offer,客户端会选择第一个接收到的Offer,广播发送Request,请求报文中包含了请求的IP地址(Option50填入服务器响应的yiaddr (your client ip address)字段的IP地址)和想选择的DHCP服务器(Option54)
确认阶段
当服务器收到Request报文后会回复 ACK,表示请求的地址可以使用,当客户端收到ACK报文后,会发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的该IP地址,如果未收到,则表示该地址可以使用,如果收到响应,则客户端会发送Decline报文(源地址0.0.0.0目的IP255.255.255.255),重新请求分配IP地址,服务器会标记该地址为冲突地址
DHCP Relay
发现阶段
检查DHCP报文中的hops字段如果大于16就丢弃,否则就加一(表示经过了一次DHCP中继),hops字段表明经过了几次中继,从服务器或者客户端出发都是0,设备最大支持16台设备
检查DHCP报文中的giaddr字段,如果是0,就将giaddr字段改为接收DHCP Discover报文的接口IP,该字段用来标识客户端网关的IP地址,如果服务器和客户端不在同一网段内,经过了多台中继,只有第一台中继会把自己的IP地址填入此字段,后面的DHCP中继不修改,服务器根据这个网段来分配IP地址
将目的地址改为DHCP服务器或下一个中继地址,源地址设为中继连接客户端的接口IP地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继
提供阶段
服务器接收到DHCP Discover报文后,选择与报文中giaddr字段为同一网段的地址池,为客户端分配IP地址然后向giaddr字段的中继单播发送Offer报文
当客户端首次发送申请地址时,中继检查报文的广播标志位
如果广播位置位1中继就将DHCP应答报文(ACK/NAK)以广播形式发送给DHCP客户端
如果广播位置位0中继就将DHCP应答报文(ACK/NAK)以单播形式发送给DHCP客户端
在配置DHCP中继的时候需要将DHCP的服务器地址告诉中继
DHCP中继,为了DHCP服务器和DHCP客户端不在同一网段
将DHCP客户端的请求透明的传递到DHCP服务器,也可以将DHCP服务器的响应透明的传递到DHCP客户端
需要在具体的接口上配置IP中继地址,来指定DHCP服务器
当DHCP客户端启动并进行DHCP初始化时,它在本地网络广播配置请求报文即DHCP DISCOVER报文。与本网络相连的、带DHCP中继功能的网络设备收到该广播报文后,进行适当处理并转发给指定的、其它网络上的DHCP服务器。
1、DHCP服务器根据DHCP客户端提供的信息进行相应的配置,并通过DHCP中继将配置信息发送给DHCP客户端。
2、DHCP客户端向DHCP中继发送广播的DHCP REQUEST报文来回应服务器的DHCP OFFER报文。
3、DHCP中继会将此报文以单播的形式发送给DHCP服务器。
4、DHCP服务器对DHCP客户端通过DHCP中继发送单播的确认响应报文或者拒绝响应报文。
DHCP地址续租
1、DHCP服务器会给客户端租期更新的值,默认为1天,当剩下50%租期的时候客户端会向服务器发送单播请求延长IP地址的租期,服务器会单播回应一个ACK或NAK
2、如果客户端发送的续租请求没有得到回复在租期剩余12.5%的时候认为原来的DHCP服务器不可用,就会重新发送广播DHCP请求报文,这时其他服务器可以答复ACK或者NAK
3、如果收到ACK,则重新绑定,重置租期,如果收到NAK,则停止使用现在的IP地址,重新申请IP地址
分配给DNS服务器和自己接口的IP地址会保留,避免IP地址冲突
客户端在租期到之前不想使用分配的IP地址(例如客户端网络位置需要变更),会触发DHCP客户端向DHCP服务器发送DHCP RELEASE报文,通知DHCP服务器释放IP地址的租期。DHCP服务器会保留这个DHCP客户端的配置信息,将IP地址列为曾经分配过的IP地址中,以便后续重新分配给该客户端或其他客户端。
DHCP重用曾经使用的地址
当DHCP客户端非首次接入网络时,可以重用曾经使用过的地址
1、客户端广播发送包含前一次分配的IP地址的DHCP REQUEST报文,报文中的Option50(请求的IP地址选项)字段填入曾经使用过的IP地址。
2、DHCP服务器收到DHCP REQUEST报文后,根据DHCP REQUEST报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回DHCP ACK报文,通知DHCP客户端可以继续使用这个IP地址。否则,保持沉默,等待客户端重新发送DHCP DISCOVER报文请求新的IP地址。
DHCP多地址池选择
1、如果discovery报文中gateway ip address (relay agent address)被填充地址,则分配该IP地址所在网段的地址。
2、如果discovery报文中gateway ip address 为空,则分配discovery报文接收端口所在IP网段的地址。
DHCP配置
在系统视图下使能DHCP功能 dhcp enable
在接口视图下开启接口地址池功能dhcp select interface
在接口视图下开启全局地址池功能dhcp select global
在接口视图下开启中继功能dhcp select realy
在接口视图下配置客户的主机名 dhcp client hostname DHCPClient
在接口视图下配置服务器下发给客户端的路由表项优先级 dhcp client default-route preference 100
地址池配置
在系统视图下创建地址池 ip pool 地址名
在地址池中设置网关 gateway-list 10.10.10.10
在地址池中设置地址网段 network 10.0.10.0 mask 255.255.255.0
在地址池中设置不被分配的地址 excluded-ip-address
在地址池中设置分配给客户端的DNS的IP地址 dns-list 1.1.1.1 2.2.2.2
DHCPv6
DHCPv6服务器负责客户端IPv6地址/前缀以及其他配置信息(地址前缀和DNS服务器地址)的分配
DHCPv6承载在UDPv6上
客户端使用的UDP端口号是546
服务器或中继使用的UDP端口号是547
FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。
使用hop limit为最大承载中继数量,默认255
IPv6地址分配
Pv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。
- 手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
- 无状态自动地址分配。由接口ID(EUI-64)生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
- 有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
1、DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式(RA)自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。
2、DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
DUID
设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个DUID
DUID生成方法:
1、基于链路地址
2、基于链路地址与时间结合
通过Option-code字段来区分是客户端标识符还是服务器标识符
身份联盟(IA)
- 身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。
- 客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
- 报文中的Identity Association:
Time1:首选生存期
Time2:有效生存期
IAID:唯一的ID,设备重启也不改变
IA Address:一个接口至少管理一个IA,一个IA可以包含多个地址信息
报文字段
msg-type:取值1~13报文的类型
transaction-ID:DHCPv6交互ID,事务ID,由客户端随机产生的一个数,对于服务器响应和请求报文,事务ID需要相同
Options:包含了DHCPv6服务器分配给IPv6主机的配置信息
DHCPv6报文类型
相比于DHCPv4除了名字变更,新加了4种类型:
CONFIRM:DHCPv6客户端向任意可达的DHCPv6服务器发送Confirm报文检查自己目前获得的IPv6地址是否适用与它所连接的链路。
RECONFIGURE:DHCPv6服务器向DHCPv6客户端发送Reconfigure报文,用于提示DHCPv6客户端,在DHCPv6服务器上存在新的网络配置信息。
RELAY-FORWARD:中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
RELAY-REPLY:DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。
DHCPv6地址分配方式
DHCPv6有状态自动分配(IPv6地址、服务器配置信息:DNS、SNTP)
服务器接收到Solicit报文后,查看报文中没有Rapid Commit选项,或服务器未开启快速分配功能,分为四步交互地址(未开启)和两步交互地址(开启)
四步交互地址:
1、客户端发送Solicit确定服务器位置报文,请求服务器分配地址和网络参数
2、如果Solicit报文中没有携带Rapid Commit(快速分配)选项,或服务器未开启快速分配,服务器回复Advertise报文,携带了IPv6地址和其他网络参数
3、如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。
4、被选定的服务器回复Reply,确认将IPv6地址和网络配置参数分配给客户端使用
两步交互地址:
1、DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。
2、DHCPv6服务器直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Replay报文中也携带Rapid Commit选项
DHCPv6无状态自动分配(不包括IPv6地址)
1、客户端以组播方式向服务器发送Information-Request报文,该报文中携带Option Request选项,用来指定客户端需要从服务器获取的配置参数。
2、服务器收到Information-Request报文后,为客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给客户端。
DHCPv6中继
DHCPv6中继代理不是必须的角色。如果DHCPv6客户端和DHCPv6服务器位于同一链路范围内,或DHCPv6客户端和DHCPv6服务器直接通过单播交互完成地址分配或信息配置的情况下,是不需要DHCPv6中继代理参与的。只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继代理的参与。
1、DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
2、如果中继和客户端在同一网段,将其封装在Relay-Forward报文中转发给服务器或者下一个中继,如果中继和客户端不在同一网段,则构造一个新的Relay-Forward转发下去
3、DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数封装在Relay-Reply报文发送给DHCPv6中继。
4、DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。
Relay-Forward报文字段:
hop-count:从客户端收到的时候为0,从中继收到+1(目的地址是组播地址时为32,目的地址为单播地址时为255)
Likn address:从客户端收到设置为报文入接口的全球单播地址或者链路本地地址,从其他中继收到设置为0
peer address:消息出接口的IPv6全球单播地址。
DHCP Snooping
DHCP Snooping是DHCP(Dynamic Host Configuration Protocol)的一种安全特性,用于保证DHCP客户端从合法的DHCP服务器获取IP地址,并记录DHCP客户端IP地址与MAC地址等参数的对应关系,防止网络上针对DHCP攻击。
信任功能
信任接口正常接收DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文。
非信任接口在接收到DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文后,丢弃该报文。
分析功能
开启DHCP Snooping功能后,设备能够通过分析DHCP的报文交互过程,生成DHCP Snooping绑定表,绑定表项包括客户端的MAC地址、获取到的IP地址、与DHCP客户端连接的接口及该接口所属的VLAN(Virtual Local Area Network)等信息。
DHCP Snooping绑定表根据DHCP租期进行老化或根据用户释放IP地址时发出的DHCP Release报文自动删除对应表项。
DHCP Snooping功能需应用于二层网络中的接入设备或第一个DHCP Relay上。
DHCP会遭受的攻击
在二层设备需要在vlan中配置(在指令后面要加上interface 接口)
在中继设备需要在接口中配置
伪服务器攻击
当网络中存在DHCP Server仿冒者时,会回应给DHCP Client仿冒信息,如错误的网关地址、错误的DNS服务器、错误的IP等,从而使Client无法访问网络或访问到不正确的网络
使用DHCP Snooping的“信任(Trusted)/不信任(Untrusted)”工作模式来隔离DHCP服务器仿冒者攻击
在接口视图下 dhcp snooping trusted
dhcp snooping untrusted
配置在离DHCP Server最近的设备上效果最好
在接口视图下 dhcp server detect
开启探测功能,会检查并在日志中记录所有的DHCP回应报文中携带的服务器地址和端口,由管理员判断是否是伪服务器
DHCP服务器拒绝攻击
如果设备接口下存在大量攻击者恶意申请IP地址,会导致DHCP Server中IP地址快速耗尽而不能为其他合法用户提供IP地址分配服务。DHCP Server通常仅根据DHCP Request报文中的CHADDR(Client Hardware Address)字段来确认客户端的MAC地址。如果某一攻击者通过不断改变CHADDR字段向DHCP Server申请IP地址,同样将会导致DHCP Server上的地址池被耗尽,从而无法为其他正常用户提供IP地址。
在接口视图下开启Snooping最大绑定数 dhcp snooping max-user-number 10
在接口视图下开启客户端MAC与报文CHADDR字段是否一致检测 dhcp snooping check mac-address enable
DoS攻击
对于攻击者不断改变数据帧头部源MAC的攻击方式,可以通过MAC地址限制来解决,但如果攻击者改变的不是数据帧头部的源MAC,而是通过改变DHCP报文中的CHADDR(Client Hardware Address)值来不断申请IP地址,而设备仅根据数据帧头部的源MAC来判断该报文是否合法,那么MAC地址限制不能完全起作用,这样的攻击报文还是可以被正常转发,会导致DHCP Server中IP地址快速耗尽而不能为其他合法用户提供IP地址分配服务。
可以通过在设备上检查DHCP请求报文中的CHADDR字段来防止攻击
在接口视图下开启客户端MAC地址检测 dhcp check chaddr enable
配置后影响用户接入性能
仿冒DHCP续租报文
已获取到IP地址的合法用户通过向服务器发送DHCP Request或DHCP Release报文用以续租或释放IP地址。如果攻击者冒充合法用户不断向DHCP Server发送DHCP Request报文来续租IP地址,会导致这些到期的IP地址无法正常回收,以致一些合法用户不能获得IP地址;而若攻击者仿冒合法用户的DHCP Release报文发往DHCP Server,将会导致用户异常下线。
在设备上使能防止仿冒DHCP续租报文攻击功能,检查请求报文中携带的信息是否与DHCP Snooping绑定表匹配
在接口视图下绑定表匹配检查 dhcp snooping check dhcp-request enable
配置后影响用户接入性能
中间人攻击
中间人攻击,通过arp机制,使PC1的IP报文经过PC2,再传给服务器,让PC2窃取到IP报文中的信息,进行篡改或其他的破坏行为,从而达到直接攻击DHCP目的
在接口视图下开启Snooping绑定 arp dhcp-snooping-detect enable
静态绑定DHCP Snooping
在接口下配置静态 dhcp snooping bind-table static ip-address ip-address [ mac-address mac-address ] [ vlan vlan-id [ ce-vlan ce-vlan-id ] ]
DHCP警告
dhcp snooping alarm arp enable
dhcp snooping alarm ip enable
dhcp snooping alarm dhcp-chaddr enable
dhcp snooping alarm dhcp-request enable
dhcp snooping alarm dhcp-reply enable