蓝汛IPv6的基础迁移和安全

蓝汛IPv6的基础迁移和安全

2017年11月“两办”印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,使得IPv6开始落地,并强制执行。计划提出要用5到10年时间,形成下一代互联网自主技术体系和产业生态,建成全球最大规模的IPv6商业应用网络。

到2018年末,市场驱动的良性发展环境基本形成,IPv6活跃用户数达到2亿,在互联网用户中的占比不低于20%。

到2020年末,市场驱动的良性发展环境日臻完善,IPv6活跃用户数超过5亿,在互联网用户中的占比超过50%,新增网络地址不再使用私有IPv4地址。

到2025年末,我国IPv6网络规模、用户规模、流量规模位居世界第一位,网络、应用、终端全面支持IPv6,全面完成向下一代互联网的平滑演进升级。

由此可见,针对2018年底要求完成2亿活跃用户的目标,对于ISP、ICP都是一个很大的挑战。而且,对于国家机关的网站的IPv6迁移也是硬性指标。这给CDN市场带来了新机遇,有很大的机会为客户、潜在客户快速安全地实现IPv6业务合规上线和迁移。本文将为大家介绍IPv6的关键技术知识点。

IPv6地址

IPv4的地址长度为32位,地址空间为2的32次方,约42亿个(世界上平均3个人有2个IP地址)。

IPv6的地址长度为128位,地址空间为2的128次方,约3.4×10^38个。

IPv6地址的表示

IPv4地址表示

二进制:10101100 00010000 00000001 00000001

十进制:172.16.1.1

IPv6地址表示

十六进制:2001:0410:0000:0001:0000:0000:0000:45ff

IPv6地址与IPv4地址表示方法有所不同,用十六进制表示,4位一组,中间用“:”隔开。

IPv6地址的压缩表示

如图可见,地址中,以“0”开头的组,就可以省略0,而多个连续的全0字段,则通过“::”来压缩代替。

IPv6 地址 = 前缀 + 接口标识

其中,前缀相当于IPv4地址中的网络ID,接口标识则相当于IPv4地址中的主机ID。前缀长度就是和IPv4地址标识一样,采用/xx来表示,如:2001:da8:207::8207/64。

IPv6地址分类

单播地址(unicast address)

如同 IPv4 的Unicast模式,适用在单一节点对单一节点的数据传送。标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。

这种类型的IPv6地址可区分为Global、Site-Local、Link-Local和IPv4-Compatible 4种型态。

下面针对这几种类型加以介绍:

Global 地址

前3bits为首码,内容固定是001,最后的64bits为接口标识(Interface ID)。Interface ID的功能如同IPv4的主机地址(Host ID)。

Site-Local 地址

前10bits为首码,内容固定为1111111011,间隔38bits的0之后,接着16bits 的子网地址(Subnet ID),最后才是 64bits的接口标识。

Link-Local 地址

也是用前10bits为首码,内容固定为1111111010,接着是连续54bits的0,最后的64bits也是接口标识。

IPv4-Compatible 地址

没有所谓的首码与接口标识,只有原本32bits的IPv4地址前面,加上96bits的0。

组播地址 (multicast address)

IPv6的组播整合了IPv4的Multicast及广播传送 (Broadcast),适用于单一节点对多节点的传送。标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。

而4-bit的lifetime如果取值0,则为永久属性,而取值1,则为临时属性。

常见的组播地址有:

任播地址 (anycast address)

Anycast的特殊之处在于:一个Anycast地址可以被多个节点使用,但是传送给此地址的报文,并非真的将它送到这些节点来,而仅仅是送给距离最近或成本最低(根据路由表来判断)的一个节点。

以RFC4291的规定,目前的Anycast地址只能分配给路由器,不能分配给电脑使用,而且不能作为发送端的地址。这种IPv6地址的首码长度不固定,首码以外的位元都是0。

设备IPv6地址的设置方式

由前文可知,设备的后64bit的地址是和设备相关的。因此如何设置这64bit的地址段则就是设备相关的。

目前,共有4种设置方式:

通过EUI-64设置的

通过自动生成的伪随机数设置的

通过DHCPv6设置

手动设置

EUI-64

EUI-64就是通过设备的MAC地址来生成这64bit地址字段。而由于MAC地址是48bit,通过将48bit的MAC地址对分为两段,两段之间填入0xFFFE来补齐为64bit。

自动生成的伪随机数

针对EUI-64有可能造成的主机MAC地址和IPv6地址对应关系所引发的安全隐患,采用自动生成的伪随机数来规避的方法。

ICMPv6 和Neighbor Discovery

ICMPv6 是基于RFC 2463,相对于IPv4的ICMP的演进,基本的信令模式是类似的,但是信令的种类和code进行了变化。

ICMPv6,提供了以下信息的承载:

错误信息

提示类信息

MTU的路径探测

Neighbor Discovery

ICMPv6的错误信息

目标不可达 (ICMP packet type1)

目标不可达会通过解释码来告知不可达的原因:

o 0 - No route to destination

o 1 - Access is administratively prohibited

o 3 - Address unreachable

o 4 - Port unreachable

数据包太大 (ICMP packet type2)

说明数据包大于IPv6链路的MTU。由于IPv6不会根据MTU而将数据包分包,所以会通过ICMP信息通知源数据包大于MTU。

超时 (ICMP packet type3)

超出了跳数。

参数错 (ICMP packet type4)

同样的,有个解释码来告知原因:

o 0 - Erroneous header field

o 1 - Unrecognized next-header type

o 2 - Unrecognized IPv6 option

Neighbor Discovery

Neighbor Discovery Protocol提供了IPv6下设备使能的能力:

自动配置地址和地址前缀的发现

冲突地址的发现

MTU的发现

路由发现

地址解析

IPv6的路由器定期发送Router Advertisement (RA),来提示路由的存在和提供主机的配置信息。RA信息是ICMP type 134 信息,从发送路由器的单播地址作为源,目的地址是link-scope all-nodes的组播地址。RA设置255为跳数限制,而且不能发送到local link之外的网络。

主机通过RA来进行本机的路由配置,而主机也可以通过发送Router Solicitation( RS) 来请求RA 。

IPv6和DNS

相对于IPv4的DNS中,hostname到IP的解析,IPv6的DNS中,从host那么到IP的解析是什么样的呢?

IPv6中,相对于IPv4的A记录,是AAAA记录,比如:

AAAA record:

www.abc.test AAAA 2001:db8:C18:1::2

而IPv6中,相对于IPv4的PTR记录,其PTR就要长的多了:

PTR record:

2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.8.1.c.0.

8.b.d.0.1.0.0.2.ip6.arpa PTR www.abc.test.

IPv6下的移动IP

RFC 3775将移动IPv6协议定义为:不管IPv6节点位于IPv6网络的何处以及与移动IPv6节点通信的其他节点是否支持移动IPv6,始终可以对IPv6节点进行访问。

移动IPv6从移动IPv4中借鉴了许多概念和术语,例如:

移动节点(MN)

家乡代理(HA)

家乡地址

家乡链路

转交地址

外地链路

移动IP的机制实现

当移动节点在家乡链路时,它与通信节点采用传统的路由方式进行通信。

当移动节点移动到外地链路,通过无状态自动配置或有状态自动配置转交地址。然后移动节点注册它的primary转交地址到家乡链路的一个路由器上,请求这个路由器充当它的家乡代理,这个过程称为“绑定”。移动节点通过发送“binding update”的消息,然后家乡代理回应“binding acknowledgement”来完成“绑定”过程。

在这样的场景下,移动节点可以有两种方式和通信节点进行通信:

【1】 双向隧道模式

通信节点不要求支持移动IPv6,也不需要移动节点和通信节点间绑定注册。通信节点不知道移动节点的转交地址,它就像向其他任何固定节点发送数据包那样向移 动节点发送数据包。通信节点只是将移动节点的家乡地址(它知道的唯一地址)放入目的IPv6地址域中,并将它自己的地址放在源IPv6地址域中,然后将数 据包进行转发。这样,数据包将被送往移动节点的家乡链路,就像移动IPv4中那样。在家乡链路上,家乡代理上使用“代理邻居协议”(proxy ND),截获这个数据包,然后把这个包作为净荷,在其上面再加上一层IPv6报头,把新的数据包发送到移动节点的转交地址,这个过程应用的是“隧道技术”。移动节点将送过来的包拆封,发现内层数据包的目的地是它的家乡地址,于是将内层数据包交给高层协议处理。从移动节点发往通信节点的从“反向隧道”发往家乡代理,然后按照传统的路由方式发送到移动节点。

【2】路由优化的通信模式

需要通信节点必须支持移动IPv6,而且移动节点注册了它的绑定连接到通信节点。当通信节点发送报文到移动节点时,首先从其绑定缓存中查找包含移动节点的 IP地址的条目,如果找到,则使用type 2 路由头来发送报文(报文的目的IP地址为移动节点的转交地址),type 2路由头里包含了移动节点的家乡地址,当报文到达移动节点的转交地址时,移动节点把路由头里的Home address作为报文最后的目的地址,然后移动节点判断报文的目的地址为自己的家乡地址,则将内层数据包交给高层协议处理。类似的,移动节点使用home address option来通知通信节点自己的家乡地址。路由优化消除了与双向隧道向关联的传输延迟。