定义:
IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。
DHCPv6是一种运行在客户端和服务器之间的协议,与IPv4中的DHCP一样,所有的协议报文都是基于UDP的。但是由于在IPv6中没有广播报文,因此DHCPv6使用组播报文,客户端也无需配置服务器的IPv6地址。
IPV6地址分配类型:
IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。
目前IPv6地址的分配方法有以下几种:
• 手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
• 无状态自动地址分配。由接口ID生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
• 有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。
DHCPv6基本架构:
DHCPv6基本协议架构中,主要包括以下三种角色:
DHCPv6 Client:
DHCPv6客户端,通过与DHCPv6服务器进行交互,获取IPv6地址/前缀和网络配置信息,完成自身的地址配置功能。
DHCPv6 Relay:
DHCPv6中继代理,负责转发来自客户端方向或服务器方向的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。一般情况下,DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址/前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继代理来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理。
只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继代理的参与。
DHCPv6 Server:
DHCPv6服务器,负责处理来自客户端或中继代理的地址分配、地址续租、地址释放等请求,为客户端分配IPv6地址/前缀和其他网络配置信息。
DHCPv6基本概念:
一、组播地址
• 在DHCPv6协议中,客户端不用配置DHCPv6 Server的IPv6地址,而是发送目的地址为组播地址的Solicit报文来定位DHCPv6服务器。
• 在DHCPv4协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在IPv6中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6用到的组播地址有两个:
FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。
二、UDP端口号
• DHCPv6报文承载在UDPv6上。
• 客户端侦听的UDP目的端口号是546。
• 服务器、中继代理侦听的UDP端口号是547。
三、DHCP唯一标识符(DUID)
• DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。
• 客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样,通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项。
四、身份联盟(IA)
• 身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。每个IA包括一个IAID和相关联的配置信息。
• 客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
• IA的身份由IAID唯一确定,同一个客户端的IAID不能出现重复。IAID不应因为设备的重启等因素发生丢失或改变。
• IA中的配置信息由一个或多个IPv6地址以及T1和T2生存期组成。IA中的每个地址都有首选生存期和有效生存期。
• 一个接口至少关联一个IA,一个IA可以包含一个或多个地址信息。
DHCP报文结构:
msg-type:1字节,表示报文的类型,取值为1~13。
transaction-ID:3字节,DHCPv6交互ID,也叫事务ID,用来标识一个来回的DHCPv6报文交互。例如Solicit/Advertise报文为一个交互。Request/Reply报文为另外一个交互,两者有不同的事务ID。 交互ID特点如下:
• 交互ID是DHCPv6客户端生成的一个随机值,DHCPv6客户端应当保证交互ID具有一定的随机性。
• 对于DHCPv6服务器响应报文和相应的请求报文,两者交互ID保持一致。
• 如果是DHCPv6服务器主动发起的会话报文,则交互ID为0。
Options:可变长度,表示DHCPv6的选项字段。此字段包含了DHCPv6服务器分配给IPv6主机的配置信息,如DNS服务器的IPv6地址等信息。
报文类型:
DHCPv6工作流程:
DHCPv6服务器为客户端分配地址/前缀的过程分为两类:
DHCPv6有状态自动配置
DHCPv6无状态自动配置
DHCPv6有状态自动配置 - 两步交互
DHCPv6客户端在发送的Solicit消息中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址/前缀和网络配置参数;
如果DHCPv6服务器支持快速分配过程,则直接返回Reply消息,为客户端分配IPv6地址/前缀和其他网络配置参数。如果DHCPv6服务器不支持快速分配过程,则采用交互四个消息的分配过程为客户端分配IPv6地址/前缀和其他网络配置参数。
DHCPv6有状态自动配置 - 四步交互
1。DHCPv6客户端发送Solicit消息,请求DHCPv6服务器为其分配IPv6地址/前缀和网络配置参数。
2. DHCPv6服务器回复Advertise消息,通知客户端可以为其分配的地址/前缀和网络配置参数。
3. 如果DHCPv6客户端接收到多个服务器回复的Advertise消息,则根据消息接收的先后顺序、服务器优先级等,选择其中一台服务器,并向该服务器发送Request消息,请求服务器确认为其分配地址/前缀和网络配置参数。
4.DHCPv6服务器回复Reply消息,确认将地址/前缀和网络配置参数分配给客户端使用。
Solicit 报文中没有携带 Rapid Commit 选项,或 Solicit 报文中携带 Rapid Commit 选项,但服务器不支持快速分配过程,则 DHCPv6 服务器回复 Advertise 报文,进行4个消息交互。
租约更新:
通过Renew更新地址/前缀租约,DHCP中使用的是request报文,这里单独分出来Renew报文进行更新。
如果在T1时(0.5倍生命值)发送的Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文,则DHCPv6客户端会在T2(推荐值为首选生命期的0.875倍)时,向所有DHCPv6服务器组播发送Rebind报文请求更新租约。如果客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约;如果该地址/前缀不可以再分配给该客户端,则DHCPv6服务器回应续约失败的Reply报文,通知客户端不能获得新的租约;如果DHCPv6客户端没有收到服务器的应答报文,则到达有效生命期后,客户端停止使用该地址/前缀。
DHCPv6无状态配置过程:
原理:
这是在IPv6中IPv4中DHCP很大的差别,主要是因为IPv6中不仅仅是可以通过DHCPv6或者IP地址,还可以通过RA/RD报文从自己最近的路由器获取IP地址。 DHCPv6可以向IPv6主机提供有状态的地址配置或无状态的配置设置:
无状态地址自动配置用于对链接本地地址和其他非链接本地地址两者进行配置,方法是与相邻路由器交换路由器请求和路由器公告消息。
DHCPv6无状态过程如下:
客户端以组播的方式向DHCPv6服务器发送information-request报文,该报文中携带Option request选项,指定客户端要从服务器获取的配置参数。
服务器收到information-Request报文后,为客户端分配网络配置参数,并单播发送Reply报文将网络配置参数返回给客户端。
客户端检查Reply报文中提供的信息,如果与information-Request报文中请求的配置参数相符,则按照Reply报文中提供的参数进行网络配置;否则,忽略该参数。如果接收到多个Reply报文,客户端将选择最先收到的Reply报文,并根据该报文中提供的参数完成客户端无状态配置。
DHCPv6中继工作原理:
DHCPv6中继工作过程如图1所示。DHCPv6客户端通过DHCPv6中继转发报文,获取IPv6地址/前缀和其他网络配置参数(例如DNS服务器的IPv6地址等)。
图1 DHCPv6中继工作原理图
DHCPv6中继工作交互过程如下:
1.DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
2.根据DHCPv6中继转发报文有如下两种情况:
如果DHCPv6中继和DHCPv6客户端位于同一个链路上,即DHCPv6中继为DHCPv6客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6中继实质上也是客户端的IPv6网关设备。DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
如果DHCPv6中继和DHCPv6客户端不在同一个链路上,中继收到的报文是来自其他中继的Relay-Forward报文。中继构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
3.DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文的中继消息选项中,并将Relay-Reply报文发送给DHCPv6中继。
DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。
中继+有状态地址配置实验:
前提:
保证Relay与用户相连网段能和Sever互通,因为他们是用这两个IP地址进行通信的,所以需要配置对应的全球单播地址和动态路由,这里省略。
Sever上主要配置:
dhcpv6 pool guest //配置地址池,与中继g0/0/1接口在同一网段
address prefix 2001::/64
excluded-address 2001::1
dns-server 3000::1
interface GigabitEthernet0/0/0 //进入接口下使用地址池
ipv6 enable
ipv6 address 2002::1/64
dhcpv6 server guest
中继上主要配置:
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2002::2/64
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address 2001::1/64
ipv6 nd autoconfig managed-address-flag //设置M位,表示地址和前缀由DHCP服务器分配
ipv6 nd autoconfig other-flag //设置O位,表示DNS等参数由自己分配
dhcpv6 relay destination 2002::1 //设置服务器地址
最后在服务器上查看是否得到了相应的IP地址:成功获取。
这里需要注意的是,DHCPv6不能配置网关,因为网关会根据中继发送的报文的本地链路地址作为自己的网关。
报文抓包:
客户与中继之间:使用的单播地址都是链路本地地址,因为中继和客户端必须在同一网段。
中继与服务器之间:因为在不同的网段所以使用全球单播地址通信。
DHCPv6 PD自动配置
在一个层次化的网络结构中,不同层次的IPv6地址配置一般是手工指定的。手工配置IPv6地址扩展性不佳,不利于IPv6地址的统一规划管理。DHCPv6 PD可以解决这个问题。
DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IA_NA地址和IA_PD前缀。
DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址和前缀。
如果客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器(若服务器优先级一样,则选择带有该客户端需要的配置参数的Advertise报文) ,并向其发送Request报文,请求为其分配地址/前缀。
DHCPv6服务器回复Reply报文,确认将IPv6地址/前缀分配给DHCPv6客户端。
DHCPv6客户端在收到PD前缀后,与终端进行RS/RA报文交互,在RA报文中将携带获取到的PD前缀下发至终端。
DHCPv6 PD一般用于网络中存在路由器(如本例中的DHCPv6客户端)需要继续为下连的IPv6主机分配前缀的场景,实现主机的地址自动配置,从而完成整个IPv6网络的层次化布局。
第1步中,DHCPv6客户端请求DHCPv6服务器为其分配IA_NA地址和IA_PD前缀,IA_NA可以理解为服务器为客户端WAN口分配的地址,IA_PD可以理解为服务器为客户端的LAN侧分配的前缀。
DHCPv6地址确认过程
当客户端有断电、掉线、漫游等情况发生时,客户端会发送Confirm报文确认自己的IPv6地址是否可用。如果客户端确认的地址是合法的,则服务器回应;如果没有回应,则客户端需要重新启动地址申请流程。
DHCPv6地址冲突检测过程
客户端完成地址申请后,会在开始使用该地址前发起DAD探测。如果DAD检测到地址存在冲突,则客户端发送Decline消息通知服务器,并不再使用该地址。