DHCP是什么
1.1 DHCP定义
DHCP( Dynamic Host Configuration Protocol, 动态主机配置协议)定义:
存在于应用层(OSI)
前身是BOOTP(Bootstrap Protocol)协议
是一个使用UDP(User Datagram Protocol,用户数据报协议)协议工作的,被用于局域网的一个网络协议
主要是给网络快速自动地分配IP地址,能够帮助我们将IP地址和相关IP信息分配给网络中的计算机
常用的2个端口:67(DHCP server), 68(DHCP client)
1.2 DHCP服务器
一些运行有DHCP服务器端软件的特殊电脑
普通电脑中都内置有DHCP客户端模块,电脑接上网络后,DHCP客户端发现新连通的网络,会在该网络上找DHCP服务器。DHCP服务器将给电脑提供合理的网络配置,并把设置信息传回本机,本机和DHCP服务器之间的通信,都是通过DHCP协议进行的
1.3 DHCP主要作用
减少管理员的工作量
避免输入错误的可能
避免IP地址的冲突
提高了IP地址的利用率
方便客户端的配置:使client动态的获得IP地址、给设备配置正确的子网掩码,默认网关,DNS服务器地址信息等
2.DHCP的工作方式
2.1 DHCP的分配方式
自动分配
DHCP为客户端分配 租期为 永久的(无限长)的IP地址
手工分配
由 管理员为少数特定客户端(如WWW服务器等) 静态绑定固定的IP地址,通过DHCP将配置的固定IP地址发给客户端
动态分配
DHCP给主机指定一个有时间限制的IP地址,到达使用期限后或主机明确表示放弃这个地址时,客户端需要重新申请地址; 如果客户端没有重新申请,则这个地址将可能被其它的主机使用; 绝大多数客户端得到的都是这种 动态分配的地址(可以解决IP地址不够用的困扰)
2.2 DHCP的工作原理
租约(租约四部曲)
(1).发现阶段(DISCOVER)
DHCP客户端启动时,计算机发现本机上没有任何IP地址设定,将以广播方式通过UDP 67端口发送DHCP DISCOVER请求报文(客户端的MAC地址信息),来寻找DHCP服务器,请求IP地址租约,因为客户机还不知道自己属于哪一个网络,所以封包的源地址为0.0.0.0,目的地址为255.255.255.255,向网络发送特定的广播信息。
网络上每一台安装了TCP/IP协议的主机都会接收这个广播信息,但只有DHCP服务器才会做出响应。
请求获得IP,子网掩码,默认网关,DNS等信息
(2).提供阶段(OFFER )
该客户对应的租约已存在且未被再次分配(包括租约到期和未到期的租约),则直接分配已记录的地址信息
该客户对应的租约不存在,服务器响应DHCP OFFER,会从对应的地址池中查找(注意:该处地址池应该有个前提条件,就是可用的地址池:应当和接收口的IP为同一网段,或同giaddr字段同一网段,否则无法分配);然后从尚未出租的IP地址中挑选一个最前面的ip地址连同其它的参数设定,响应给客户端一个DHCP OFFER (单播)报文,报文里面包括客户机MAC地址信息,TCP/IP的一些配置信息
(3).选择阶段(REQUEST)
DHCP客户端可以接收到多个DHCP服务器的DHCP OFFER数据包,但只会挑选其中一个 DHCP OFFER(通常只接受收到的第一个DHCP OFFER数据包),然后会向网络发送一个DHCP REQUEST广播报文(报文中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等),告诉所有DHCP服务器它将指定接受哪一台服务器提供的 IP 地址,这样其他的服务器就会释放之前预分配给客户端的IP地址。同时,客户端还会向网络发送一个ARP 报文,查询网络上面有没有其它设备使用该 IP 地址,如果发现该 IP 已经被占用,客户端则会送出一个DHCP DECLIENT报文给 DHCP 服务器,拒绝接受其 DHCP OFFER,并重新发送 DHCP DISCOVER信息
此时,由于还没有得到DHCP服务器的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播。
(4).确认阶段(ACK )
当DHCP Server收到DHCP Client发送的DHCP Request后,确认要为该DHCP Client提供的IP地址,并根据客户机的MAC地址记录该次租约行为后,并便向该DHCP Client响应一个ACK报文(包含该IP地址,默认网关,DNS服务器等网络配置信息),来告诉DHCP Client可以使用该IP地址了,并告知客户端这个网络参数租约的期限,并且开始租约计时。然后DHCP Client就可以将该IP地址与网卡绑定,完成初始化过程。另外其他DHCP Server都将收回自己之前为DHCP Client提供的IP地址
客户端在接收到DHCP ACK后,会向网络发送针对此IP地址的ARP解析请求以执行冲突检测,查询网络上有没有其它机器使用该IP地址;如果发现该IP地址已经被使用,客户机会发出一个DHCP DECLINE数据包给DHCP服务器,拒绝此IP地址租约,并重新发送DHCP DISCOVER信息.
当用户不再需要使用分配IP地址时,就会"主动"向DHCP服务器发送RELEASE报文,告知服务器用户不再需要分配IP地址,DHCP服务器会释放被绑定的租约(在数据库中清除某个MAC对某个IP的租约记录,这样,这个IP就可以分配给下一个请求租约的MAC)
续约
DHCP客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCP REQUEST消息包;如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%
如果在租期过去50%的时候没有更新,则DHCP客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系;如果还不成功,到租约的100%时候,DHCP客户机必须放弃这个IP地址,重新申请
如果此时并没有DHCP可用,DHCP客户机会使用169.254.0.0/16中随机一个地址,并且每隔5min在进行尝试
2.3 DHCP协议包的组成
op: 1.client发送给server的封包,设为1 2.server发送给client的封包,设为2 htype: 硬件类别,1表示10Mb/s的以太网(Ethernet)的硬件地址 hlen: 硬件地址长度 hops:跳数,若封包需经过router传送,每站加 1,若在同一网内,为0(客户端初始设置为0) xid:DHCP REQUEST 时随机生成的一段字符串,服务器和客户端用来在它们之间交流请求和响 应,客户端用它对请求和应答进行匹配两个数据包拥有相同的xid说明他们属于同一次会话 seconds: 由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数 flags: 从0到15共16 bits 最左1Bit为1时表示 server将以广播方式传送封包给client 最左1Bit为0时表示 server将以单播方式传送封包给client ciaddr: 客户端会在发送请求时将自己的ip地址放在此处 yiaddr: 服务器会将想要分配给客户端的ip地址放在此处 siaddr: 一般来说是服务器的ip地址.但是注意:根据openwrt源码给出的注释,当报文的源地址、siaddr、option>server_id字段不一致(有经过跨子网转发)时,通常认为option>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip giaddr: 如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址 sname: 服务器主域名 file: 启动文件名,是一个空结尾的字符串。 options: 可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息 |
|
2.4 DHCP中继
2.4.1 DHCP中继是什么
(1).在大型的网络中,可能会存在多个网段,DHCP客户机通过网络广播消息获得DHCP服务器的响应后得到IP地址。但广播消息是不能跨越网段的,因此,如果DHCP客户机和服务器在不同的网段内,即被路由器分割开来时,客户机向服务器申请IP地址的时候,就要用到DHCP中继
(2).当企业的内部网络规模较大时,通常被划分为多个不同的子网,网络内配置了VLAN,VLAN能隔离广播,而DHCP协议使用广播,DHCP服务器在哪个VLAN中,就只有在相同VLAN内的客户机能从DHCP服务器那里获取IP地址。所以,将DHCP这种特殊的广播信息在不同网段的VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器那里获得IP地址,就要用到DHCP中继
(3).DHCP中继代理实际上是一种软件技术,安装了DHCP中继代理的设备(路由器,交换机,服务器)称为DHCP中继代理服务器,它承担不同网段间的DHCP客户机和服务器的通信
2.4.2 DHCP中继原理:
(1). DHCP客户机申请IP租约,发送DHCP Discover包
(2). 中继代理收到该包,并转发给另一个网段的DHCP服务器
(3). DHCP服务器收到该包,将DHCP Offer包发送给中继代理
(4). 中继代理将地址租约(DHCP Offer)转发给DHCP客户端,接下来的过程,DHCP Request包从客户机通过中继代理转发到DHCP服务器,DHCP ACK消息从服务器通过中继代理转发到客户机
3.DHCP攻防
3.1 DHCP攻击的原理
(1).先使用攻击软件,不断向DHCP服务器发出 DHCP Request 报文请求,耗尽DHCP服务器的资源,让客户机不能上网 (2).自己伪造DHCP服务器,并“冒充”为一这个网段中的合法DHCP服务器,向客户端提供DHCP服务,这时候客户端的网关就是伪造的DHCP服务器的地址,攻击者就可以截获流量,并且还可以将数据包正常转发到网络上,不影响客户端的正常通信,只不过客户端上网的流量都在攻击者监控下,并且非法DHCP+攻击程序容易拿到用户信息,比如用户操作系统的账号密码,结果DHCP客户端将从非法DHCP服务器处获得不正确的IP地址、网关、DNS等配置参数 |
|
3.2 非法DHCP服务的防范
(1).在DHCP服务器上进行IP与MAC地址的绑定: 在通过DHCP服务器进行客户端IP地址等参数分配的网络中,对于一些重要部门的用户,可以通过在DHCP服务器上绑定IP与MAC地址,实现对指定计算机IP地址的安全分配 (2).使用DHCP Snooping信任端口: 能够过滤来自网络中非法DHCP服务器或其他设备的非信任DHCP响应报文.一旦将交换机的某一个端口设置为指向正确DHCP服务器的接入端口,那么交换机会自动丢弃从其他端口上接收到的DHCP响应报文.因为非信任端口,所以非法的DHCP服务器虽然接收到了信息,也发出了响应报文,但是在不信任端口处被阻断了,内网设备就不会得到不信任DHCP发送的响应报文了,就是不管你响应有多快,但是都半路夭折了。 |
|
4.DHCPv6介绍
4.1 DHCPv6定义
DHCPv6(Dynamic Host Configuration Protocol for IPv6,支持IPv6的动态主机配置协议)是针对IPv6编址方案设计的,为主机分配IPv6前缀、IPv6地址,DNS等其他网络配置参数的协议
基于UDPv6协议工作的
常用的2个端口:547(DHCP server,relay), 546(DHCP client)
由于在 IPv6中 没有广播报文,使用组播(默认所有DHCPv6服务器都会加入并侦听该组播组:FF02::1:2)报文,客户端也无需配置服务端的IPv6地址
4.2 DHCPv6协议的优势
可以为主机分配IPv6地址
可以为主机分配IPv6前缀,DNS服务器、域名等网络配置参数
可以为特定主机分配特定的地址/前缀
便于全网络的自动配置和网络层次性管理
4.3 DHCPv6的工作原理
4.3.1 DHCPv6网络构成
|
|
4.3.2 分配过程
交互两个消息的快速分配过程
(1) DHCPv6客户端在发送的Solicit消息中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址/前缀和网络配置参数 (2) 如果DHCPv6服务器支持快速分配过程,则直接返回Reply消息,为客户端分配IPv6地址/前缀和其他网络配置参数。如果DHCPv6服务器不支持快速分配过程,则采用交互四个消息的分配过程为客户端分配IPv6地址/前缀和其他网络配置参数 |
|
交互四个消息的分配过程
发现阶段
客户端发送Solicit报文来发现 DHCPv6 服务器,并请求DHCPv6 服务器为其分配 IPv6 地址和网络配置参数,由于客户端不知道 DHCPv6 服务器的 IPv6 地址,所以客户端用组播地址:FF02::1:2向同一链路范围内的所有DHCPv6服务器发送Solicit报文;Solicit报文中携带了客户端的DUID、需要请求的非临时地址、以及其他网络配置参数等信息
提供阶段
DHCPv6 服务器接收到Solicit报文后,选择按照 IPv6 地址从小到大的顺序采用循环查找方式,选择最新找到的可供分配的 IPv6 地址,然后通过Advertise报文以单播方式回应给客户端;Advertise报文里面携带了服务器的DUID、客户端的DUID、分配给客户端的IPv6地址及租期等信息
选择阶段
因为Solicit报文是组播发送的,所以如果同一链路范围内存在多个 DHCPv6 服务器,则接收到Solicit报文的服务器都会回应Advertise报文,如果有多个 DHCPv6 服务器向DHCPv6客户端回应Advertise报文,则 DHCPv6 客户端选择服务器优先级最高的Advertise报文,然后客户端以组播方式向同一链路范围内的所有 DHCPv6 服务器发送Request报文,该报文中包含客户端选择的 DHCPv6 服务器的DUID、客户端的DUID、客户端IPv6地址
确认阶段
当 DHCPv6 服务器收到Request报文后,对报文中携带的服务端DUID信息进行判断:
若报文中携带的服务端DUID不是本服务端的DUID,则对该Request报文不回应,同时将Request报文中请求的IPv6地址回收
若报文中携带的服务端DUID是本服务端的DUID,则以单播方式回应Reply报文,确认Request报文中请求的IPv6地址分配给客户端使用
|
|
4.4 DHCPv6报文格式
5.DHCPv4 vs DHCPv6
(1). 相同点
使用DHCP client, DHCP relay and DHCP server概念
使用scopes and leases概念
使用4个消息包的完整交互 (DHCP for IPv4使用Discover/Offer/Request/Acknowledge (DORA), DHCPv6使用Solicit/Advertise/Request/Reply (SARR))
使用DHCP options为终端节点提供附加信息(DHCPv6的type code长度为16-bit)
支持Rapid Commit功能
(2). 差异点
标识客户端方式:DHCPv6使用DHCP Unique Identifiers (DUID) (RFC 6355),DHCPv4使用MAC地址.
消息类型名称不同,大部分功能类似
DHCPv4基于IPv4包传输,DHCPv6基于IPv6包传输
DHCPv6使用IPv6组播消息,DHCPv4使用广播的IPv4消息
DHCPv6中client与relay/server(RFC 6939)通信时使用link-local地址, DHCPv4使用unsolicited广播地址
监听的UDP端口不同, DHCPv4 relay/server监听udp端口67 client监听udp端口68, relay/server监听udp端口547 client监听udp端口546
DHCPv4可以在路由器上配置, stateful DHCPv6一般不能在路由器上配置
DHCPv4为客户端提供默认网关地址,DHCPv6不包含这个option,IPv6节点通过ICMPv6 RA消息学习到first hop路由器地址
DHCPv4地址池可能耗尽; DHCPv6网段通常为64位耗尽可能性接近0
好了,DHCP讲解到此结束