在IPV6的自动配置中,分为两种技术
在有状态地址自动配置的方式下,DHCPv6服务器分配一个完整的IPv6地址给主机,并提供DNS服务器地址和域名等其它配置信息,这中间可能通过中继代理转交DHCPv6报文,而且最终服务器能把分配的IPv6地址和客户端的绑定关系记录在案,从而增强了网络的可管理性。
DPCHv6地址池的计算,管理全部是服务器端在做,客户端只是简单的从服务器端取得服务器端已经计算好的地址和其他设置应用到自己身上。
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的定义里面
这边的IA_PD就是DHCPV6-PD的方式请求,这时候服务器就会下发带IA_PD的前缀下来,路由器就会把这个前缀设置到br-lan端口,用来给下一级dhcpv6服务器分配IP使用。
如果客户端发送的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
DHCPv6服务器分配给客户端的IPv6地址/前缀具有一定的租借期限。租借期限由有效生命期(Valid Lifetime)决定。
地址/前缀的租借时间到达有效生命期后,DHCPv6客户端不能再使用该地址/前缀。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址/前缀,则需要更新地址/前缀租约。
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
如果DHCPv6客户端发现服务器分配的地址已经被其它节点占用,客户端要向服务器发出DECLINE报文,通知冲突地址的发生,服务器回应以REPLY消息。
DHCPv6客户端链路因某种原因中断又恢复,或者客户端连接到新的链路以后,客户端要向服务器发送CONFIRM报文希望确定当前被分配的地址是否仍然适合连接的链路。服务器回应REPLY报文或不作响应。
最后客户端不再使用分配的地址时,向选定的服务器发送RELEASE消息请求服务器回收分配的IPv6地址。
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协议。
通过DHCPv6中继动态获取IPv6地址/前缀和其他网络配置参数的过程中,DHCPv6客户端与DHCPv6服务器的处理方式与不通过DHCPv6中继时的处理方式基本相同。图 7中只说明DHCPv6中继的转发过程:
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
在无状态地址自动配置方式下,网络接口接收路由器宣告的全局地址前缀(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地址 | 向改地址发送一个邻居发现请求,如果无响应则证实该地址可以用 |
以RADVD为代表的无状态自动配置不需要消耗很多机器资源,也不像传统DHCP一样需要维护一个本地数据库来维护地址分配状态,他只是进行广播前缀地址,客户端收到这种广播后再自己使用EUI64算法生成全球唯一的IPv6地址,进行自我配置。
因此,RADVD不能进行NTP/DNS等其他传统DHCP服务器所能进行的配置。甚至严格的说,她只进行路由广播,地址都是客户端自己根据算法和规范在配置。
那RA服务器广播的ipv6前缀地址是哪里来的?
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的服务器用来下发前缀给路由器。
由于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