本节书摘来自异步社区《IPv6精髓(第2版)》一书中的第3章,第3.8节,作者: 【美】Silvia Hagen 更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.8 链路本地地址和站点本地地址
在IPv4时代,企业经常使用RFC 1918定义的私有IP地址。为私有用途而保留的地址永远也不能被Internet路由器转发出去,只能局限在企业网内部。在连接Internet的时候,需要通过NAT(Network Address Translation,网络地址转换)将内部私有地址转换为已注册的公有IPv4地址。
最初的IPv6规范为链路本地和站点本地范围内的使用分配了两块独立的地址空间(范围),它们都是通过相应的前缀来识别的。由于站点本地地址(site-local address)的使用存在很多问题,因而目前已被废止。链路本地地址(link-local address)用于单条链路,不能被路由,不需要全局前缀,可用于自动配置机制、邻居发现进程以及没有路由器的网络上,因而对于创建临时网络来说是非常有用的。假设在会议室会见朋友时需要共享自己电脑上的文件,通过无线网络或者在两台电脑的以太网接口之间使用交叉电缆来连接电脑,此时只要使用链路本地地址而无需进行任何特殊配置即可共享文件。
替代站点本地地址的是唯一本地IPv6单播地址(unique local IPv6 unicast address),或简称为本地IPv6地址(local IPv6 address)。该规范定义在RFC 4193中。虽然这些地址也是全局唯一的地址,但是不应该被路由到Internet上。该类地址的设计目的是应用于企业站点内部或限制在某些网络内部。
唯一本地IPv6单播地址的特性如下:
- 拥有全局唯一的前缀,可以在网络边界进行过滤;
- 允许站点在不出现地址冲突或者重新编址的情况下,能够进行整合或私下互连;
- 能够独立于ISP;
- 可以在没有Internet连接的情况下用于内部通信;
- 即使不慎被路由到站点之外,也不会与其他地址相冲突;
- 可以像普通全局单播地址那样进行使用。
这些地址的格式如图3-6所示。
如果采用十六进制记法,那么链路本地地址就是通过前缀FE80来标识的。RFC 4193为本地IPv6地址定义了前缀FC00::/7。目前第8比特被置为1并指定由本地管理该前缀,未来可能会将第8比特为0的前缀用作集中管理的地址。目前标准化的只是本地分配的版本,如果未来有足够的需求,也可能会制定集中分配的版本。
对于本地管理的地址来说,目前的前缀是FD00::/8,后面是40比特的全局ID(Global ID)。为了确保最大概率的唯一性,全局ID采取了随机生成的方式;接着是16比特子网ID;最后是64比特接口ID。如果大家接触到早期实现的话,还可能与遇到前缀为FEC0的站点本地地址,但最新的IPv6实现中都不再使用该地址了。
如前所述,这些本地地址都不能被路由到Internet上,应该配置边界路由器过滤这些前缀。本地地址不应该出现在全局DNS服务器上,但是可以用在内部私有的DNS服务器上。
默认情况下,链路本地地址(FE80)采取自动分配方式,本地IPv6地址则必须通过在路由器上配置本地前缀(路由器宣告[Router Advertisement]消息)或者通过DHCPv6的方式进行配置。
如果对已被废止的站点本地地址感兴趣,可以参考RFC 3879。