在IPV6的自动配置中,分为两种技术
- 一种是传统的有状态(stateful),典型代表就是与IPv4时代相对应的DHCPv6,
- 一种是IPv6的无状态(stateless)自动配置,这是IPv6协议的一个突出特点:支持网络节点的地址自动配置。
1. 有状态地址自动配置
在有状态地址自动配置的方式下,DHCPv6服务器分配一个完整的IPv6地址给主机,并提供DNS服务器地址和域名等其它配置信息,这中间可能通过中继代理转交DHCPv6报文,而且最终服务器能把分配的IPv6地址和客户端的绑定关系记录在案,从而增强了网络的可管理性。
DPCHv6地址池的计算,管理全部是服务器端在做,客户端只是简单的从服务器端取得服务器端已经计算好的地址和其他设置应用到自己身上。
1.1 DHCPv6协议下客户端与服务器端的交互与DHCPv4类似采用如下图所示的4步交互:
- (1)客户端向所有DHCP中继代理和服务器多播地址 (FF02::1:2)发出SOLICIT消息希望发现合适的DHCPv6服务器
- (2)任何能够满足该请求的服务器都会发送一个ADVERTISE消息给客户端,其中包含可分配的配置信息以及服务器的身份标识(DUID)和该服务器的优先值信息。
- (3)客户端可能接收到多个这样的通告消息,依据某种策略(如选择服务器优先值选项中优先值最高的服务器)选择其中一个服务器,然后向选定服务器发送REQUEST消息请求服务器分配通告的IPv6地址和其它配置参数
- (4)被选择的服务器回应以REPLY消息,其中包含确认的IPv6地址和其它配置参数,客户端收到REPLY消息提取地址和配置参数完成DHCPv6配置任务。
sequenceDiagram
DHCPv6 client->>DHCPv6 server: Solicit
DHCPv6 server->>DHCPv6 client: Advertise
DHCPv6 client->>DHCPv6 server: Request
DHCPv6 server->>DHCPv6 client: Reply
在客户端发送Solicit消息的时候,报文里面会附带很多信息说明
查看IPV6详解卷2-4.2.2 DHCPv6的定义里面
1.1.1 DHCP唯一标识符DUID(客户端和服务器之间标识符的唯一性)
- 硬件类型
- 时间
- 链路层地址
1.1.2 身份关联IA(Identity Association)
- 非临时地址身份关联IA_NA(正常情况都是使用这个IA进行请求)
- 临时地址身份关联IA_TA
- 前缀代理身份关联IA_PD(路由器请求的时候会带这个,用于下一级DHCP的分配)
这边的IA_PD就是DHCPV6-PD的方式请求,这时候服务器就会下发带IA_PD的前缀下来,路由器就会把这个前缀设置到br-lan端口,用来给下一级dhcpv6服务器分配IP使用。
1.2 快速交互过程
如果客户端发送的SOLICIT消息包含快速回复(Rapid Commit)选项,则服务器直接回应以REPLY消息,其中包含IPv6地址和配置参数,即通过一次消息交换完成DHCPv6配置任务。由于省去了服务器选择过程,使用Rapid Commit选项要确保同一链路只有一个DHCPv6服务器提供地址服务。
sequenceDiagram
DHCPv6 client->>DHCPv6 server: Solicit(Contains a Rapid Commit option)
DHCPv6 server->>DHCPv6 client: Reply
1.3 续约
DHCPv6服务器分配给客户端的IPv6地址/前缀具有一定的租借期限。租借期限由有效生命期(Valid Lifetime)决定。
地址/前缀的租借时间到达有效生命期后,DHCPv6客户端不能再使用该地址/前缀。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址/前缀,则需要更新地址/前缀租约。
- (1)地址租借时间到达时间T1(推荐值为首选生命期Preferred Lifetime的一半)时,客户端向服务器单播发送RENEW消息,请求延续所分配的IPv6地址的生存期 。
- (2)如果客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约;如果该地址/前缀不可以再分配给该客户端,则DHCPv6服务器回应续约失败的Reply报文,通知客户端不能获得新的租约。
- (3)当客户端发送RENEW报文得不到回应,经过一段时间后在T2(推荐值为首选生命期的0.8倍)时,客户端会向FF05::1:3地址发送REBIND报文给网络中所有可能的DHCPv6服务器,希望延续地址的生存期或更新其它配置参数,匹配到客户端信息的DHCPv6服务器回应以REPLY消息。
sequenceDiagram
DHCPv6 client->>DHCPv6 server: Renew(T1)
DHCPv6 server->>DHCPv6 client: Reply
sequenceDiagram
DHCPv6 client->>DHCPv6 server: Renew(T1)
DHCPv6 client->>DHCPv6 server: ...
DHCPv6 client->>DHCPv6 server: Rebind(T2)
DHCPv6 server->>DHCPv6 client: Reply
1.4 地址冲突
如果DHCPv6客户端发现服务器分配的地址已经被其它节点占用,客户端要向服务器发出DECLINE报文,通知冲突地址的发生,服务器回应以REPLY消息。
1.5 租约确认
DHCPv6客户端链路因某种原因中断又恢复,或者客户端连接到新的链路以后,客户端要向服务器发送CONFIRM报文希望确定当前被分配的地址是否仍然适合连接的链路。服务器回应REPLY报文或不作响应。
1.6 释放地址
最后客户端不再使用分配的地址时,向选定的服务器发送RELEASE消息请求服务器回收分配的IPv6地址。
1.7 DHCPv6和DHCPv4消息对比
DHCPv6 消息 | 描述 | 等效的 DHCPv4 消息 |
---|---|---|
要求(solicit) | 由客户端发送以定位服务器。 | DHCPDiscover |
公告(advertise) | 由服务器对“要求”消息进行响应时发送以指明可用性。 | DHCPOffer |
请求(request) | 由客户端发送以请求来自特定服务器的地址或配置设置。 | DHCPRequest |
确认(confirm) | 由客户端发送给所有服务器,以确定对于已连接的链接客户端的配置是否有效。 | DHCPRequest |
更新(renew) | 由客户端发送给特定服务器以延长分配地址的生存期并获取更新的配置设置。 | DHCPRequest |
重新绑定(rebind) | 未接收到对“更新”消息的响应时由客户端发送给任何服务器。 | DHCPRequest |
应答(reply) | 对要求、请求、更新、重新绑定、信息请求、确认、发布或拒绝消息进行响应时由服务器发送给特定客户端。 | DHCPAck |
发布(release) | 由客户端发送以指明客户端不再使用分配的地址。 | DHCPRelease |
拒绝(decline) | 由客户端发送给特定服务器以指明分配的地址已在使用中。 | DHCPDecline |
重新配置(reconfigure) | 由服务器发送给客户端以指明该服务器具有新的或更新的配置设置。客户端随后发送“更新”或“信息请求”消息。 | N/A |
信息请求(information-request) | 由客户端发送以请求配置设置(但不包括地址)。 | DHCPInform |
中继转发(relay-forw) | 由中继代理发送以转发消息给服务器。中继转发包含封装为 DHCPv6 中继消息选项的客户端消息。 | N/A |
中继应答(relay-reply) | 由服务器发送以通过中继代理发送消息给客户端。中继应答包含封装为 DHCPv6中继消息选项的服务器消息。 | N/A |
IPv6支持无状态的自动分配地址,但这并不意味着DHCP会随着IPv6的出现以及IPv6设备的大量部署而退出历史舞台。不仅是在这么一个过渡时期,DHCP是不可或缺的,即便是在将来,DHCP仍将发挥重要作用。思科公司的Droms预计,大部分的企业都将花钱来支持DHCPv6。他说:“网管员们都想知道网络上连接着什么样的主机和设备,以及这些设备的地址,因此,他们将希望使用DHCPv6。”
DHCPv6较DHCPv4更为复杂,也有很多不同的地方,如DHCPv4使用67和68端口,而DHCPv6使用546和547端口;不同的报文结构以及交互方式,DHCPv6设备都要使用DUID来互相认证等。但他们的原理类似,具备DHCPv4知识的技术人员在熟悉IPv6的基础上可以很快掌握DHCPv6协议。
2. DHCPV6中继工作原理
通过DHCPv6中继动态获取IPv6地址/前缀和其他网络配置参数的过程中,DHCPv6客户端与DHCPv6服务器的处理方式与不通过DHCPv6中继时的处理方式基本相同。图 7中只说明DHCPv6中继的转发过程:
- (1) DHCPv6客户端向所有DHCPv6服务器和中继的组播地址FF02::1:2发送请求;
- (2) DHCPv6中继接收到请求后,将其封装在Relay-forward报文的中继消息选项(Relay Message Option)中,并将Relay-forward报文发送给DHCPv6服务器;
- (3) DHCPv6服务器从Relay-forward报文中解析出客户端的请求,为客户端选取IPv6地址和其他参数,构造应答消息,将应答消息封装在Relay-reply报文的中继消息选项中,并将Relay-reply报文发送给DHCPv6中继;
- (4) DHCPv6中继从Relay-reply报文中解析出服务器的应答,转发给DHCPv6客户端;
DHCPv6客户端根据DHCPv6服务器分配的IPv6地址/前缀和其他参数进行网络配置。
sequenceDiagram
DHCPv6 client->>DHCPv6 realy agent: DHCPv6 message from clint
DHCPv6 realy agent->>DHCPv6 server: Relay-froward
DHCPv6 server->>DHCPv6 realy agent: Realy-Relay
DHCPv6 realy agent->>DHCPv6 client: DHCPv6 message to clint
3. 无状态地址自动配置/SLAAC/RA
在无状态地址自动配置方式下,网络接口接收路由器宣告的全局地址前缀(64位),再结合接口ID得到一个128位的可聚集全局单播地址(接口地址实际上就是MAC地址,由于MAC地址是48位的,所以这里要用到一个IEEE提供的EUI64转换算法,可以将48位的MAC地址换算为64位)。
首先,为配置接口,主机需要前缀信息(类似于IPV4地址的网络部分),因此它会发送一条路由器请求(RouterSolicitation,RS)消息。该消息以组播方式发送给所有路由器。这实际上是一种ICMPv6消息,并用编号进行标识,RS消息的ICMPv6类型为133。
路由器使用一条路由器通告(Router-Advertisement,RA)消息进行应答,其中包含请求的前级信息。RA消息也是组播分组,被发送到表示所有节点的组播地址,其ICMPv6类型为134。RA消息是定期发送的,但主机发送RS消息后,可立即得到响应,因此无需等待下一条定期发送的RA消息,就能获得所需的信息。
最后主机向该地址发送一个邻居发现请求(Neighbor DiscoveryRequest),如果无响应,则证明网络地址是唯一的。
获得前缀 | 缀上接口ID | 证实可用 |
---|---|---|
主机通过监听路由器通告获取全局地址前缀(64位) | 缀上自己通过MAC地址算出的64位接口ID,得到128位全局IP地址 | 向改地址发送一个邻居发现请求,如果无响应则证实该地址可以用 |
3.1 RADVD服务器
以RADVD为代表的无状态自动配置不需要消耗很多机器资源,也不像传统DHCP一样需要维护一个本地数据库来维护地址分配状态,他只是进行广播前缀地址,客户端收到这种广播后再自己使用EUI64算法生成全球唯一的IPv6地址,进行自我配置。
因此,RADVD不能进行NTP/DNS等其他传统DHCP服务器所能进行的配置。甚至严格的说,她只进行路由广播,地址都是客户端自己根据算法和规范在配置。
那RA服务器广播的ipv6前缀地址是哪里来的?
- 如果是链接的运营商的宽带,那这个值就是运营商下发给路由器,路由器再转发给路由器的ra服务器,然后再转发给其他设备。
- 如果连接自己搭建的服务器,那radvd服务器自己配置个前缀(prefix)即可。
interface eth0 {
AdvSendAdvert on;
AdvCurHopLimit 64;
MinRtrAdvInterval 198;
MaxRtrAdvInterval 600;
AdvDefaultLifetime 1800;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvDefaultPreference low;
AdvHomeAgentFlag off;
AdvOtherConfigFlag on;
AdvManagedFlag off;
prefix 2016:ac11:5cad:0::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvValidLifetime 2400;
AdvPreferredLifetime 1800;
};
RDNSS fe80::2224:7ff:fe26:3014 {
AdvRDNSSPreference 8;
AdvRDNSSLifetime 1200;
};
};
在ubuntu搭建isc-dhcp服务器之后,win直接链接到后端可以获取到ipv6地址
然后把华为路由器链接到后端,在把win链接到华为路由器后端,发现路由器一直再发送ICMPv Type=133给isc-dhcp服务器,但是isc-dhcp服务器一直不返回ICMPv type134告诉路由器ipv6的前缀。
所以ubuntu需要再搭建一个radvd的服务器用来下发前缀给路由器。
4. RA和DHCPv6的配合使用
- 有状态DHCPv6(Stateful DHCPv6):IPv6地址、其他参数(如DNS)均通过DHCPv6获取
- 无状态DHCPv6(Stateless DHCPv6):IPv6地址依然通过路由通告RA方式生成,其他参数(如DNS)通过DHCPv6获取
由于DHCPv6不能告知客户端默认路由,默认路由的广播只能靠RA,这样就必须在RA报文里面,不报告“A”(自动配置),只报告“R”(路由前缀),让客户端通过DHCPv6去获取默认路由。
DHCPv6服务器也能提供无状态DHCPv6服务,即DHCPv6服务器不分配IPv6地址,仅需向主机提供DNS服务器地址和域名等其它配置信息,主机IPv6地址仍然通过路由器公告方式自动生成,这样配合使用就弥补了IPv6无状态地址自动配置的缺陷。
DHCPv6客户端选择了服务器以后,向服务器发送INFORMATION-REQUEST报文请求提供相关配置参数,服务器收到请求回应以REPLY报文提供请求的配置参数发送给客户端。无状态DHCPv6服务允许和有状态DHCPv6服务同时使用,DHCPv6服务器根据客户端的请求类型决定不同的应答方式。
因此,为了兼容EUI64算法,Radvd所能进行管理的地址段要比DHCPv6小很多,如果你希望这种无序的自动化管理,并且只是配地址,你可以使用Radvd,反过来,你的想重用一个/64的isatap隧道给自己家的设备都分配IPv6地址什么的,你如果希望为客户端指定更加详细的DNS设定,NTP设定等等,你可以考虑DHCPv6+Radvd(stateless),或者一种细致的地址管理,您应该选择DHCPv6+Radvd(statefull)
sequenceDiagram
DHCPv6 client->>DHCPv6 server: Information-request(include an request option)
DHCPv6 server->>DHCPv6 client: Realy(include the requested options)
DHCPv6协议还提供了DHCPv6前缀代理的扩展功能,上游路由器可以自动为下游路由器分派地址前缀,从而实现了层次化网络环境中IPv6地址的自动规划,解决互联网提供商(ISP)的IPv6网络部署问题。
https://blog.ihipop.info/2012/06/3218.html
https://blog.csdn.net/chuanzhangYangfan/article/details/6853300
https://blog.csdn.net/chuanzhangYangfan/article/details/6761417
网友评论