目前,可用的IPv4地址资源已基本消耗殆尽,为满足物联网时代“一物一地址,万物皆在线”的海量智能终端联网需求,IPv6规模部署与发展越来越受到关注。在校园部署IPv6和IPv4的双栈网络已经非常普遍,随着应用系统和网络设备对IPv6支持度的不断提升,纯IPv6的校园网络也离我们越来越近。
IPv6的优势在于大幅扩展了地址的可用空间,提供了2128个地址。不仅如此,IPv6没有广播地址,网络管理者不用再考虑类似IPv4地址解析协议(Address Resolution Protocol,ARP)的广播风暴问题。此外,IPv6支持多种地址分配方式。不同终端和系统对无状态地址分配(Stateless Address Autoconfiguration,SLAAC)和IPv6动态主机配置协议(Dynamic Host Configuration Protocol for IPv6,DHCPv6)这两种IPv6地址分配方式的支持度不一样,因此IPv6的部署方式多种并存。
除了显著增加地址空间外,IPv6另一个最显著的特征就是它的即插即用性。RFC4861更新的邻居发现协议(Neighbor Discovery Protocol,NDP)是IPv6协议体系中一个重要的基础协议,定义了使用ICMPv6(互联网控制报文协议第六版)报文实现地址解析、跟踪邻居状态、重复地址检测、路由器发现以及重定向等功能,实现了即插即用的特性。
本文介绍了几种适用校园IPv6全球单播地址的规划和分配方式,并对传统的DHCPv6分配方式进行优化,在此基础上,进行有效的统计和管理。科学规划网络中的IPv6地址,能减少网络配置和维护过程中的人为失误,使得安全策略制定更为容易,降低了故障排除时的工作难度,并为未来扩容预留空间,提高网络可扩展性。
IPv6寻址模式分为三种,即单播地址、组播地址和任播地址。
组播地址(Multicast):表示一组接口的地址,发往多播地址的封包将会被配置该地址的所有接口接收。
任播地址(Anycast):允许相同功能的多个服务器使用同一个单播地址,路由器在收到指向这一地址的数据包时,会把数据包发送到使用此地址的路由距离最近的服务器。
IPv6常用的单播地址包括:全球单播地址、链路本地地址、站点本地地址、特殊地址、过渡地址、环回地址。因为全球单播地址被用来在IPv6网络上进行全局路由和访问,本文只介绍全球单播地址的规划和部署。
IPv6中的全球单播地址是全局可识别和唯一可寻址的。RFC3587定义的IPv6全球单播地址由3部分组成:
全球路由前缀、子网ID和接口标识符,如图1所示。全球路由前缀用来识别分配给一个站点的地址范围。子网ID也称为子网号,一个子网ID与一个链接相关联,以识别站点中某个链接。接口标识符用来识别链接上的某个接口,在该链接上是唯一的。互联网服务提供商(ISP)分配给组织机构的全球路由前缀通常为48位,对于SLAAC来说,48位的全球路由前缀和16位的子网ID合称为子网前缀。
图1 RFC3587定义的IPv6全球单播地址结构
IPv6网络对外访问采用全球单播地址。如前文所述,IPv6有128位超大地址空间,由64位子网前缀和64位接口标识符组成。64位的子网前缀预留了足够大的编址空间,能满足各个机构与ISP之间的编址需求。因为SLAAC自动生成的掩码长度最长是64位,RFC7421建议IPv6子网掩码最长不超过64位。
运营商向大企业分配的常见前缀长度是48位,子网ID为16位,组织或机构可以用16子网位来创建出最多65536个掩码为64的子网。科学的子网划分,能增强网络的管理能力,正确反映网络拓扑结构。
用于子网划分的位数决定了子网划分后新子网的可用地址前缀数量。设计者可以根据地理区域或部门分类来为网络的不同部分分配新的地址前缀。分层结构的各个不同层次选择的位数越多,则在该机构最后一层中可以用于各个子网的可用位数就越少。在任何一个给定的层次中,假设一部分比特位(f)已经分配给了上一层,一部分比特位(s)用于在当前层次中进行子网划分,还有一部分比特位(r)则留给下一个层次。那么,在任何时候,f+s+r=16都成立。
首先使用子网ID的二进制表示,再将划分后的地址前缀转换为十六进制,计算出划分后的新地址前缀。
比如,用3比特位来规划地理位置的区域(f=3),用7比特位来规划行政部门(s=7),这意味着某个地理位置的某个部门还剩下6个比特的子网位(r=6),即每个部门最多只能有64(=26)个子网,如图2所示。
下面以2001:da8:1234::/48的大学校园网为例进行16位的子网划分,如图3所示。
第49-51比特,可能的取值是000-111,共8个数,可以分给8个功能模块或者地理区域;第52-58比特,可能的取值是0000000-1111111,共128个可能的组合,可以分给128个行政单位或者安全组;第59~64比特,可以分给行政单位64个不同楼栋、楼层或者小功能模块。这种分配方式组网灵活,但是牺牲了可读性。
为便于分配和读写,建议按照16进制边界或者比特位边界来制定子网划分方案。如果可以在十六进制边界位划分,则子网划分会变得很简单。因此一个/48可以划分为16个/52,256个/56,4096个/60,65536个/64大小的子网。即满足f+s+r=16同时满足4|f,s,r。
再以2001:da8:1234::48的大学校园网为例进行16位的子网划分,如表1所示。
在核心交换机上,办公楼可以进一步聚合为2001:da8:1234:1000::/50,数据中心可以进一步聚合为2001:da8:1234:c000::/50。IPv6子网前缀可以手动设置,也可以通过RFC3633标准化的DHCPv6前缀代理DHCPv6PD(Prefix Delegation)获取。
IPv6单播地址的后64位用作接口标识符,这个接口标识符在单播IPv6地址的64位子网前缀中是唯一的。
静态配置:手动分配地址,通过接口界面、命令行进行配置。SLAAC:无状态自动配置,根据路由通告报文(RouterAdvertisement,RA)包含的前缀信息自动配置IPv6地址,组成方式是“子网前缀+接口标识符”,接口标识符可以是RFC2464定义的EUI-64恒定接口标识符、RFC4941定义的随机产生接口标识符,或RFC7217定义的稳定语义不透明接口标识符。
DHCPv6:通过DHCPv6服务器进行配置。其中DHCPv6又分为2种:RFC3315定义的有状态DHCPv6(Stateful DHCPv6),IPv6地址、其他参数(如DNS)均通过DHCPv6获取;RFC3736定义的无状态DHCPv6(Stateless DHCPv6),IPv6地址依然通过路由通告RA方式生成,其他参数(如DNS)则通过DHCPv6获取。
除了全球单播地址外,DHCPv6和SLAAC都支持RFC4941定义的IPv6临时地址。RFC4941给出了无状态地址分配的隐私扩展。公共IPv6地址相对稳定不会变动,临时IPv6地址会周期性更换。
在源地址选择机制中,RFC6724建议终端访问公共服务器的主机接口优先使用临时地址。IPv6临时地址的产生,有效保护了终端的隐私性。但临时地址在方便用户使用和保护用户安全的同时,增加了网络中不活跃IP地址的数量,同时也增加了子网被扫描的风险。
SLAAC设计之初不支持DNS下发,RFC6106定义了递归DNS服务器(RDNSS)用来支持DNS。表3是IPv6自动配置部署方法对比。
现阶段并非所有操作系统和网络设备都支持RDNSS,因此园区部署IPv6,通常可以用无状态DHCPv6结合SLAAC的方式部署,通过SLAAC获取全球单播地址,RA获取默认路由和网关信息,DHCPv6获取IPv6的DNS服务器信息;
另一种常见方式是关闭RA的IPv6地址前缀信息下发,RA只发布默认路由,仅通过DHCPv6获取全球单播地址和DNS服务器信息。
在IPv4和IPv6双栈部署时,如果DNS支持AAAA记录,则不需要专用的IPv6DNS服务器,结合IPv4的DNS和IPv6的SLAAC,也可以满足用户的IPv6上网需求。考虑到安卓等部分操作系统对DHCPv6不支持,无线网络适合用SLAAC部署IPv6,有线网络因为终端位置、使用时间相对固定,建议采用DHCPv6部署。
2017年2月,IETF正式发布RFC8064,用RFC7217取代EUI-64模式,RFC7217引入了一种新的稳定语义不透明的地址生成方案。在RFC7943中,DHCPv6定义了类似的稳定不透明的接口标识符产生函数。表4列出这两种接口标识符机制产生的函数。这两种方式产生的接口标识符能够有效地减少用户所面临的地址关联分析和隐私挖掘风险。
终端开启临时地址,网络中IPv6地址数量比终端实际数量多出几倍。在有线网络环境中,终端长期在线,单个终端有1个固定全球单播地址,7个临时地址,整个子网IPv6地址数量是终端数量的5~7倍。在无线网络环境中,设备上下线频繁,临时地址数量比有线网络少,IPv6地址数量是终端数量的2~3倍。子网中IPv6地址增多增加了网络维护的难度。
RFC3315定义当IA_TA(临时地址身份关联)选项置位1时,DHCPv6服务器分配临时地址。现阶段终端支持DHCPv6获取临时地址极少,因此网络中不活跃的IP地址数量大大减少,降低了管理员的维护复杂度。但如果仅采用DHCPv6分配主机IPv6地址,部分终端不支持。虽然子网地址数量相比SLAAC方式少,但由于地址长期保持不变,IPv6单个子网地址范围大,续签地址仍然保持和上次分配的地址一样,导致地址被追踪和扫描的风险变大。
要解决这个问题,本文建议将64位子网再细分为“范围选取段+非范围选取段”,如图4所示。
范围选取段:从接口标志符的64位中取n位,分为k段(1≤k≤n)。依据需要每隔一段时间随机或者轮询从k段中选一段。每次DHCPv6地址分配的范围设为:(64位前缀+2i(n-k)+::,64位前缀+(2(i+1)(n-k)-1)+f?f)(0≤i≤k)。更换选取范围时,主机分配到的IPv6地址也随机变化。这可以解决地址长期不变的问题。但是当地址改变时,如果主机有网络会话连接保持,会话将中断重连。
DHCPv6服务器尽量采用高版本的服务器,并采用随机算法或者RFC7943提到的稳定不透明的接口标识符算法,避免地址呈现连续状态。采用分段的DHCPv6可以避免DHCPv6分配地址段呈现平均分布或者低位分布。
IPv6地址分配方式灵活,临时地址变化频繁,单个终端支持多个地址,导致日志记录变得更加难以分析,这对于管理者是一个挑战。网络运维要求统计内网所有IP地址以及任意IPv6地址可溯源。在IPv4时代,溯源是通过IP地址查找主机对应的网络标识,即MAC地址。MAC地址和IP地址对应关系可以通过查看ARP表或者DHCP的地址租用来获取。在IPv6网络中,仍然通过获取IP地址和MAC地址的对应关系来溯源主机。以下列出三种常用的运维管理方法管理IPv6地址。
使用开源IP地址扫描工具Network Mapper(Nmap),或者使用IP Address Management(IPAM)地址管理工具进行子网IPv6地址扫描。使用Nmap扫描IPv6子网耗时较长,而使用IPAM管理工具可以设置IP地址自动扫描计划,通过集成的DHCP和DNS、AD域(Active Directory Domain,活动目录域)配置管理功能,有效分配IP、管理IP,并通过反向解析(PTR)、AD域账户登录记录,溯源账号信息。
在DHCPv4中使用MAC地址来标识用户;在DHCPv6中,则采取“DUID+IAID”的模式。其中,DHCP唯一标识符(DHCPv6 Unique Identifier,DUID)用来标识系统,DHCP身份关联标识符(Identity Association Identifier,IAID)用来标识接口。标识位和MAC地址是解耦的,因此不能通过DHCPv6获取MAC地址和IPv6地址的关系。
DNS记录了IPv6地址和域名的对应关系,AD域记录了域账号和主机的对应关系,主机加域之后,可以通过PTR查找到IPv6地址。防火墙会话日志记录IP跨区域的访问记录。Radius日志可以利用标准属性Framed-Interface-Id和Framed-IPv6-Prefix上报用户地址信息。镜像抓包工具可以分析网络设备每个镜像接口的实时流量、历史会话记录、子网对应MAC地址等。
NDP分析推荐两种方法:第一种方法是在网关交换机或者路由器上定时获取邻居表的信息。此方法通过Python程序或脚本SSH(安全外壳协议)登录交换机或路由器,并通过查询邻居表获取MAC地址和IPv6地址的信息。
第二种方法是在网关处监听子网的重复地址检测(DAD)的邻居请求报文(Neighbor Solicitation,NS),来分析MAC和IPv6地址的信息。但这种方法需要网关支持,或抓取网关每个接口的镜像流量。因此第一种方法更容易实现。
表5列出IPv6地址管理方法对比,网络管理者可以根据现网终端类型和IPv6部署特征,并结合防火墙、Radius服务器、AD域、日志分析平台网络安全、经济成本等多种因素选择合适的管理方法。
总结来看,IPv6有巨大的地址空间,大学根据园区地理划分、终端类型进行合理的IPv6地址规划,制定合理的IPv6地址分配策略,可以简化IPv6路由表,提高IPv6地址的易读性,简化网络的规划、管理、配置、变更和扩展的工作量,同时提高校园网的安全性,减少IPv6地址被追踪、扫描、暴露隐私的风险。IPv6地址的多样性、终端对地址分配方式的支持程度决定了管理者不能只用一种方法来有效管理IPv6地址。综合利用日志分析、IP扫描、NDP分析来管理是最全面和有效的管理方式。
作者:谢霞、曾祥容、成就、陈衍祚【香港中文大学(深圳)设备与资产管理处】