IPv6地址配置方法

由于路由器、交换机和服务器等设备经常用来提供服务,其IPv6地址不易频繁变动,需要使用固定的IPv6地址,所以需要采用手动方式为其配置固定IPv6地址。路由器和三层交换机有时也被用作网关,向终端设备通告网络前缀,并提供数据转发服务,IPv6地址需要被固定下来。同样,考虑到稳定性和易管理性,服务器也不宜频繁变动地址或使用不可知也不好记忆的IPv6地址,有必要为其手动配置固定IPv6地址。

根据IPv4的使用经验,在手动配置IP地址后,Windows主机总是将固定的地址作为服务监听地址以及对外访问时的源地址,但在IPv6中,情况却并非如此。即便手动给Windows主机配置了固定的IPv6地址,对应的网络接口往往还会通过其他方式(例如无状态自动配置、DHCPv6等方式,本章后面会陆续介绍)获取到其他的IPv6地址。Windows主机主动访问外部网络时,系统选择的往往也不是手动配置的固定IPv6地址,这是因为Windows主机默认开启了自动配置功能,会获取到其他的IPv6地址。由于Windows主机默认启用了强制私密性,自动获取的IPv6地址比手动配置的固定IPv6地址有更高的私密性,会被优先使用,为了避免这种情况,可以关闭系统地址的自动配置功能。

这里我们统一使用下面的拓扑结构进行测试、详细的内容如下。

image-20220214204829479

基础配置信息:

R1#conf terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ipv6 unicast-routing
R1(config)#interface ethernet 0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 add 2022::1/64
R1(config-if)#no ipv6 nd ra suppress
R1(config-if)#no shutdown

注:基础信息配置完成以后、我们来看看第一个测试;如何手动配置IPv6地址。

1、手动配置IPv6地址

1.1、手动配置IPv6地址

我们直接打开Windows操作系统的网络和共享中心–网卡状态–属性–Internet协议版本6(TCP/IPv6)–属性、直接填入IPv6地址和子网前缀长度即可。配置信息如下:

image-20220215133540221

前面我们给路由器的接口配置一个IPv6地址为:2022::1/64,这里我们给WIN10客户端配置相同网段的地址为:2022::abcd/64;配置完成以后我们在终端和路由器上分别测试一下网络连通性。

# 在路由器上测试
R1#ping 2022::abcd
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2022::ABCD, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/10 ms
R1#

# 在WIN10终端上测试
C:\Users\Administrator>ipconfig
Windows IP 配置

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2022::abcd
   IPv6 地址 . . . . . . . . . . . . : 2022::8467:b31f:dbd3:6847
   临时 IPv6 地址. . . . . . . . . . : 2022::c4f4:393b:3b2a:9a2f
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe00:100%4

C:\Users\Administrator>ping 2022::1

正在 Ping 2022::1 具有 32 字节的数据:
来自 2022::1 的回复: 时间=1ms
来自 2022::1 的回复: 时间=1ms
来自 2022::1 的回复: 时间=1ms
来自 2022::1 的回复: 时间=1ms

2022::1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 1ms,最长 = 1ms,平均 = 1ms

C:\Users\Administrator>

注:从上图我们可以看到,除了我们手动配置的IPv6地址以外;还有公共IPv6地址、临时IPv6地址和链路本地地址;公共IPv6地址和临时IPv6地址都是通过无状态自动配置生成的(后面我们会详细讲解无状态自动配置的机制和过程)。这是运行1天以后查看的结果,如果系统运行不足1天,则只能看到1个临时IPv6地址。进一步使用netsh interface ipv6 show address命令查看IPv6地址的详细情况:

# 查看IPv6地址
C:\Users\Administrator>netsh interface ipv6 show address

接口 1: Loopback Pseudo-Interface 1

地址类型   DAD 状态    有效寿命   首选寿命   地址
---------  ----------- ---------- ---------- ------------------------
其他         首选项           infinite   infinite ::1

接口 5: isatap.{54BEB64E-22A2-4C4A-B00B-E3E45DB8F292}

地址类型   DAD 状态    有效寿命   首选寿命   地址
---------  ----------- ---------- ---------- ------------------------
其他         反对            infinite   infinite fe80::5efe:169.254.104.71%5

接口 4: 以太网

地址类型   DAD 状态    有效寿命   首选寿命   地址
---------  ----------- ---------- ---------- ------------------------
手动         首选项           infinite   infinite 2022::abcd
公用         首选项        29d23h57m53s 6d23h57m53s 2022::8467:b31f:dbd3:6847
临时         首选项        6d23h10m53s   23h1m38s 2022::c4f4:393b:3b2a:9a2f
其他         首选项           infinite   infinite fe80::8467:b31f:dbd3:6847%4

C:\Users\Administrator>

# 改变临时IPv6地址有效寿命和首选寿命
C:\WINDOWS\system32> netsh interface ipv6 set privacy maxvalidlifetime=60m

注:maxpreferredlifetime=30m store=active 中的maxvalidlifetime是临时IPv6地址的有效寿命,maxpreferredlifetime是临时IPv6地址的首选寿命,有效寿命的值要大于首选寿命;60m中的“m”表示分钟,“d”表示天,“h”表示小时;store=active,表示计算机重启后失效,换成persistent表示永久有效。

从上我们可以看到、以太网接口下有4个IPv6地址,第一个2022::abcd是手动配置的IPv6地址,有效寿命和首选寿命都是infinite(无限);第二个2022::8467:b31f:dbd3:6847是公用IPv6地址,有效寿命还有29天23小时多,首选寿命还有6天23小时多,公用IPv6地址的有效寿命和首选寿命是由路由设备发出的RA报文指定(公用IPv6地址的时间是由路由器的RA报文通告的。RA通告的时间也会影响临时IPv6地址的时间,若临时IPv6地址的剩余时间大于RA报文通告的时间,则临时IPv6地址显示的时间也将被RA报文刷新;若临时IPv6地址的剩余时间小于RA报 文通告的时间,则临时IPv6地址显示的时间将不变)。这个时间值是逐减的,当收到RA报文时;系统重新刷新这两个时间值,正常情况下这两个时间都不会减小到零,因路由设备发送RA报文的时间周期都比较短,例如思科路由器是200秒。正常情况下,这个公用IPv6地址会一直有效。这个公用IPv6地址的接口ID与链路本地地址的接口ID相同;

第三个2022::c4f4:393b:3b2a:9a2f是临时IPv6地址,有效寿命还有6天23小时多,首选寿命还有23小时多,Windows中临时IPv6地址默认的最大有效寿命是7天,默认的首选寿命是1天,从下面可以看到这些默认值,每个临时IPv6地址的首选寿命是24小时,Windows每隔24小时,会自动生成一个新的临时IPv6地址。当然、我们可以在管理员命令窗口中通过下面的命令改变临时IPv6地址有效寿命和首选寿命。第四个fe80::8467:b31f:dbd3:6847%4是链路本地地址,%4是以太网接口的编号,这个地址的有效寿命和首选寿命都是infinite(无限)。

在WIN10终端上进行ping命令测试的时候、我们同步在路由器上开启debug模式;收集IPv6 ICMP信息:

R1#debug ipv6 icmp 
  ICMPv6 Packet debugging is on
R1#
*Feb 17 09:27:01.716: ICMPv6: Received echo request, Src=2022::C4F4:393B:3B2A:9A2F, Dst=2022::1
*Feb 17 09:27:01.716: ICMPv6: Sent echo reply, Src=2022::1, Dst=2022::C4F4:393B:3B2A:9A2F
*Feb 17 09:27:02.319: ICMPv6: Sent Unreachable code 0, Src=2022::1, Dst=2022::A923:E1E4:2EFD:9D7E
R1#
*Feb 17 09:27:03.317: ICMPv6: Sent Unreachable code 0, Src=2022::1, Dst=2022::A923:E1E4:2EFD:9D7E
*Feb 17 09:27:04.333: ICMPv6: Sent Unreachable code 0, Src=2022::1, Dst=2022::A923:E1E4:2EFD:9D7E
R1#

从上面我们可以看到、首次收包和发包的地址是:2022::C4F4:393B:3B2A:9A2F;但是为什么不是我们手动配置的IPv6地址呢?那是因为在IPv6中是临时地址优先。实际上临时IPv6地址只有1天的生命周期、到期之后会生成一个新的临时IPv6地址。现在很多的认证系统都是基于IPv6来做的、这样导致的问题就是我们需要再次重新认证;这种操作方法和逻辑就和IPv4的逻辑不太一样。那么我们如何才能用手动指定的IPv6地址进行通信呢?

1.2、禁止地址自动配置

如果我们想用手动指定的IPv6地址进行通信、这里有两种方案;第一种就是在终端上关闭临时IPv6地址,第二种就是在路由器上关闭RA通告,这样终端就无法使用无状态自动配置获取IPv6地址和网关;但是我们不能因为某一台终端不想获取临时IPv6地址就在路由器上关闭RA通告,从而导致全网都不能获取RA通告;所以比较靠谱的办法还是第一种。下面我们在WIN10终端上关闭IPv6临时地址:

# 查看IPv6临时参数设置
C:\Users\Administrator>netsh interface ipv6 show privacy
查询活动状态...

临时地址参数
---------------------------------------------
使用临时地址                        : enabled
重复地址检测次数                    : 3
最大有效寿命                        : 7d
最大首选寿命                        : 1d
重生成时间                          : 5s
最大随机时间                        : 10m
随机时间                            : 9m15s

C:\Users\Administrator>

# 禁用临时IPv6地址
C:\Windows\System32>netsh interface ipv6 set privacy state=disable store=persistent
确定。

C:\Windows\System32>netsh interface ipv6 show privacy
查询活动状态...

临时地址参数
---------------------------------------------
使用临时地址                        : disabled
重复地址检测次数                    : 3
最大有效寿命                        : 7d
最大首选寿命                        : 1d
重生成时间                          : 5s
最大随机时间                        : 10m
随机时间                            : 9m15s

C:\Windows\System32>
# 注:这里需要注意一下、禁用临时IPv6地址需要进入system32系统目录下面操作。

# 再次查看IPv6地址
C:\Windows\System32>ipconfig

Windows IP 配置

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2022::abcd
   IPv6 地址 . . . . . . . . . . . . : 2022::8467:b31f:dbd3:6847
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe00:100%4

C:\Windows\System32>

从上面我们可以看到临时IPv6地址已经没有了、我们再次执行ping命令;然后查看路由器上的debug信息如下:

R1#debug ipv6 icmp 
  ICMPv6 Packet debugging is on
R1#
*Feb 17 10:02:32.945: ICMPv6: Received N-Solicit, Src=2022::ABCD, Dst=FF02::1:FF00:1
*Feb 17 10:02:32.981: ICMPv6: Sent N-Advert, Src=2022::1, Dst=2022::ABCD
*Feb 17 10:02:32.982: ICMPv6: Received echo request, Src=2022::ABCD, Dst=2022::1
*Feb 17 10:02:32.982: ICMPv6: Sent echo reply, Src=2022::1, Dst=2022::ABCD
R1#

R1#
*Feb 17 10:02:42.929: ICMPv6: Received N-Solicit, Src=FE80::8467:B31F:DBD3:6847, Dst=FE80::A8BB:CCFF:FE00:100
*Feb 17 10:02:42.937: ICMPv6: Sent N-Advert, Src=FE80::A8BB:CCFF:FE00:100, Dst=FE80::8467:B31F:DBD3:6847
R1#

从上面我们可以看到现在收包和发包的地址是我们手动指定的地址:2022::ABCD,但是上面我们还可以看到公共IPv6地址的通信信息,我们可以通过在终端上禁用路由发现功能来关闭公共IPv6地址:

# 禁用路由发现功能
C:\Windows\System32>netsh interface ipv6 set interface "4" routerdiscovery=disable
确定。

C:\Windows\System32>ipconfig

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2022::abcd
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . :

C:\Windows\System32>

禁用路由发现功能以后、我们可以看到现在只有手动指定的IPv6地址了、默认网关也没有了;我们只能通过手动指定默认网关来通信了。

注:这里需要说明一下。Windows服务器的默认配置与客户端的默认配置不同,服务器默认禁用了临时IPv6地址功能。拓扑中的Winserver服务器是Windows Server 2016服务器,可以在其上使用ipconfig或netsh interface ipv6 show privacy命令进行验证,也可使用netsh interface ipv6 set interface “ID号” routerdiscovery=disabled命令禁用自动配置地址功能。

2、自动配置IPv6地址

2.1、地址自动配置机制及过程

前面我们介绍了手动配置IPv6地址的方法,考虑到IPv6地址的复杂性,多数情况下,我们会选择“即插即用”的配置方式来获取IPv6地
址和其他配置参数。主机自动配置IPv6地址的工作机制和过程与IPv4的不同,主机自动配置IPv6地址分为无状态自动配置、有状态DHCPv6和无状态DHCPv6。对于IPv6主机,它的地址自动配置机制及过程大致如下。

首先是生成链路本地地址:接口在启用IPv6协议后直接使用fe80::/64前缀。如果禁止使用随机化接口标识符,则使用基于EUI-64格式的标识符,否则随机化生成一个接口标识符。然后使用fe80前缀和接口标识符来构建一个临时状态的链路本地地址。

然后就是链路本地地址DAD检测:通过发送NS报文对这个临时的链路本地地址执行DAD,NS报文中的目标地址设置为该临时链路本地地址。当接口标识符是随机生成的时候,通过DAD的可能性更大。如果主机收到响应NS报文的NA报文,则该临时的链路本地地址是重复地址。主机需重新生成另一个链路本地地址,再次执行DAD。

以链路本地地址发送RS报文:如果没有收到上述NA报文,则说明该临时链路本地地址是唯一的。然后就可以在接口上把该地址的状态更改为首选合法状态,以正式生效。发送RS报文,以获得网络配置信息。

接口RA报文:收到路由器回应的RA报文后,使用RA报文中的前缀自动生成地址。如果一直没收到RA报文,则使用DHCPv6来配置地址,即向代表DHCPv6服务器或中继的组播地址FF02::1:2和FF05::1:3发送DHCPv6请求报文,以完成地址配置。

M位和O位:如果收到RA报文,则检查RA报文中的“路由器生存期”字段,如果值不为0,则将RA发送方设为自己的默认网关。继续检查RA报文中的M位,如果是1,且未收到携带允许自动配置的前缀信息的RA报文,则只采用有状态DHCPv6获取地址。当收到允许自动配置的前缀信息的RA报文时,有状态DHCPv6和无状态自动配置将并存,且一般情况下无状态自动配置的地址的首选优先级高于有状态DHCPv6配置的地址。继续检查RA报文中的O位,如果是1,则采用DHCPv6获取地址外的其他参数信息。无论RA报文中的M位和O位是什么,只要收到携带有允许自动配置的前缀信息的RA报文,主机都将提取RA报文中所有的前缀。如果前缀状态为Off-link,则放弃将该前缀加入前缀列表(即路由表)中,只将状态是On-link的前缀加入自己的前缀列表中。

生成公用地址和临时地址:继续检查前缀列表中每一个前缀的“自动配置”字段,如果允许自动配置,则自身生成基于EUI-64格式的标识符或以随机方式生成接口标识符,再加上前缀列表中的前缀以构成公用IPv6地址,当然默认也生成临时IPv6地址。

公用地址和临时地址DAD检测:对公用IPv6地址和临时IPv6地址做DAD,如果通过检测,则将地址状态转成首选状态。主机的IPv6地址有4种状态:临时状态、首选状态、超时状态、无效状态。临时状态通过DAD后变为首选状态,临时状态和首选状态都存在首选寿命。超过首选寿命后,则变为超时状态,除非在超时前通过重新获取的RA报文或DHCPv6报文刷新了首选寿命时间。超时状态下,该地址不会作为主机地址与外界通信,但仍有转为首选的可能。当超时一段时间后,地址将转为无效状态,最终从主机系统中删除。

2.2、SLAAC(无状态地址自动配置)

对于需要固定地址的服务器采用手动配置的方式比较合适,该工作一般由网络或系统管理员来完成。对于普通用户来说,自动配置IPv6地址的方式更为常见。IPv6地址的自动配置主要分为无状态和有状态。所谓无状态,就是指负责地址分配的网关或服务器并不需要关心和记录客户获得的IPv6地址,大多数情况下只是在RA报文中携带前缀信息选项并通告给客户端,由客户端提取报文中的前缀信息。如果前缀信息的自动配置标志位为1,则使用该前缀结合本机接口ID(EUI-64格式或随机接口ID)来生成公用地址和临时地址,若通过DAD则正式
成为有效地址。这就是RFC 2462中定义的无状态地址自动配置(Stateless Address Auto Configuration,SLAAC)的工作原理,其工作步骤大致如下。

客户端主机发送RS报文,源地址是通过DAD的以FE80开头的链路本地地址,目的地址是FF02:1:FFD3:6847。报文格式如下图中的编号24所示。

image-20220216165741798

客户端主机收到RA报文。报文如下图中的编号27所示。值得注意的是,RA报文的目标IPv6地址并不是发送RS时的源地址,而仍然是ff02::1(所有IPv6节点的组播地址)。这个过程相当于有一台主机发送RS报文来询问网关和前缀信息。路由器在收到RS报文后,并不是只针对发问的主机进行回答,而是向所有的IPv6节点发送了一个RA报文。当然,发送RS请求的主机也能收到这个RA报文。

image-20220216171052946

根据RA报文设置跳数限制、MTU等参数信息。如果路由器生存期字段不为0,则将RA发送方作为默认网关。在上图中我们可以看到hop
limit是64,MTU是1500,路由器生存期(lifetime)字段是1800(行号7)。

提取RA报文中的所有前缀信息,将On-link标志位为1的前缀加入前缀列表(即路由表)中。在上图还可以看到On-link标志位是1。在前缀列表中,如果自动地址配置标志位为1,则用其前缀结合接口标识符生成公用地址。接口标识符既可以基于EUI-64格式,也可以是随机化接口标识符。在图4-11中可以看到Autonomousaddress-configuration flag(自动地址配置标志位)是1。进行DAD检测,直到公用地址成为有效地址。当系统允许使用临时(公用)地址时(有关如何禁用临时地址,请见实验4-2),还会多生成一个通过DAD的临时地址,并且在通信时将该地址作为首选地址。

注:从上图我们还可以看到其他的信息,比如我们前面提到的M位和O位,以及IPv6地址前缀和生命周期时间等信息。

在IPv6自动地址配置中,采用SLAAC配置的地址是最优先的。只要允许网关发送RA报文,且RA报文携带了允许用于自动配置地址的前
缀,则无论是否启用了DHCPv6,启用自动配置地址的客户主机都会用收到的前缀自动生成IPv6地址,且这个地址首选的优先级高于DHCPv6获得的地址。一个RA报文携带的前缀选项的格式如下表所示(上图佐证了选项格式)。

image-20220216171844635

类型值为3表示选项为前缀选项,前缀长度一般是64。需要注意的是,如果主机获取的前缀长度+接口标识符的长度大于128,那么将不能进行地址自动配置。L位表示该前缀是否可以用于判断一个地址是否在本链路上,即前缀是On-link还是Off-link。如果是默认的Onlink,则此前缀可以用于判断某个地址是否在本地链路中,即在路由表中有相应的表项,否则路由表中不会有此前缀。A位表示该前缀是否可以用于地址自动配置。在SLAAC中,RA可以通告多个前缀,但至少得有一个前缀的A位是1,才能保证主机能获得至少一个前缀用于地址的自动配置。前缀有两个生存期:一个是有效寿命(上图中2592000秒对应的时间是30天);另一个是首选寿命(上图中604800秒对应的时间是7天),且有效寿命不小于首选寿命。对于一个在首选寿命内使用前缀构造的地址,主机的任何应用都可以不受限制地使用该地址。如果超过了首选寿命,但还没超过有效寿命,则老的应用还可以继续使用这个前缀构造的地址,但新的应用不允许再使用该前缀构造的地址。若前缀构造的地址超过了有效寿命,则任何应用都不再使用该地址。

SLAAC是最简单也是最常用的IPv6地址配置方式,它的优点是配置简单,支持几乎所有的网络终端。尽管SLAAC很便利,但它至少有3个
缺点:路由器网关或服务器并不记录客户主机分配的IPv6地址信息,不利于溯源管理等;不能为指定主机或终端分配固定的IPv6地址;客
户主机只能获得可通信的全局IPv6地址,并不能获取到其他诸如IPv6、DNS等信息,只能在客户主机是双栈的情况下依赖IPv4的DNS来保证与互联网的正常通信。所以,SLAAC一般在IPv6部署早期使用。

2.3、SLAAC实验配置

下面我们来演示一下如何在路由器等三层设备上配置发送RA报文,以使主机进行SLAAC(无状态地址自动配置)。通过表4-1可以看出,只要修改RA报文前缀选项中的L位和A位,就可以确定某些前缀是否可以用于自动配置,以及是否可以将前缀加入主机的前缀列表(即路由表)中。对于主机来说,只要开启地址自动配置即可。在本实验中,路由器接口配置了多个地址,对每个地址对应的前缀进行不同的配置,并观察在客户主机上获取IPv6地址的情况,以加深对SLAAC的理解;我们继续打开上面的基础拓扑开始实验。

R1基础配置信息如下:

R1>en
R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ipv6 unicast-routing 
R1(config)#int ethernet 0/0
R1(config-if)#ipv6 enable 
R1(config-if)#ipv6 add 2018::1/64
R1(config-if)#ipv6 add 2019::1/64
R1(config-if)#ipv6 add 2020::1/64 
R1(config-if)#ipv6 add 2021::1/64
R1(config-if)#ipv6 add 2022::1/64
# 不通告前缀
R1(config-if)#ipv6 nd prefix 2018::/64 no-advertise
# 前缀处于off-link状态
R1(config-if)#ipv6 nd prefix 2019::/64 3600 1800 off-link
# 前缀处于no-onlink状态
R1(config-if)#ipv6 nd prefix 2020::/64 3600 1800 no-onlink
# 前缀不用于自动配置
R1(config-if)#ipv6 nd prefix 2021::/64 3600 1800 no-autoconfig 
R1(config-if)#no shutdown 

为了说明不同的前缀选项所产生的不同效果,这里我们给同一个接口配置了5个IPv6地址,同时对5个地址对应的前缀进行不同的配置处
理,以观察客户主机的情况。配置中的3600表示3600秒,是前缀的有效寿命;1800表示1800秒,是前缀的首选寿命。在默认情况下,系统会通告每一个前缀,且on-link和autoconfig都是1,以表示此前缀用于地址的本地链路检测和地址自动配置,这也是SLAAC中最基本的配置要求。本实验默认允许发送RA报文,但RA携带不同的前缀选项,具体如下。

2018::/64前缀不通告。客户主机不能得到这个前缀的相关信息。通告2019::/64前缀,但该前缀处于off-link状态,autoconfig为默认值,即允许自动配置。

2020::/64与2018::/64一样,前缀都会被通告。no-onlink和offlink是同一个意思,表示该前缀不加入主机前缀列表(即路由表)中。

2021::/64前缀不允许自动配置,但默认处于on-link状态,即该前缀会加入主机的前缀列表(即路由表)中。配置中没有对前缀2022::/64进行额外的配置,也就是保持其默认值,该前缀会通告,也会被加入主机的前缀列表(即路由表)中。

我们打开Win10主机,将网卡设置成自动获取IPv6地址,然后使用ipconfig命令查看自动获取的IPv6地址,如下:

Microsoft Windows [版本 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>ipconfig

Windows IP 配置


以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2019::8467:b31f:dbd3:6847
   IPv6 地址 . . . . . . . . . . . . : 2020::8467:b31f:dbd3:6847
   IPv6 地址 . . . . . . . . . . . . : 2022::8467:b31f:dbd3:6847
   临时 IPv6 地址. . . . . . . . . . : 2019::e97d:e434:d525:3bd2
   临时 IPv6 地址. . . . . . . . . . : 2020::e97d:e434:d525:3bd2
   临时 IPv6 地址. . . . . . . . . . : 2022::e97d:e434:d525:3bd2
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%5
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe00:100%5

C:\Users\Administrator>

我们可以看到,2018::/64前缀因为没有通告,所以没有用于IPv6地址的前缀;2021::/64前缀因为指明了no-autoconfig(不用于自动配置),所以也没有用于IPv6地址的前缀;2019::/64、2020::/64和2022::/64的autoconfig都是1,即允许自动配置,所以这3个前缀都用于地址的自动配置。至于on-link和off-link的差别,就要查看主机的路由表了。可使用命令route print -6查看,如下:

C:\Users\Administrator>route print -6
===========================================================================
接口列表
  5...50 00 00 03 00 00 ......Intel(R) PRO/1000 MT Network Connection
  3...50 00 00 03 00 01 ......Intel(R) PRO/1000 MT Network Connection
  1...........................Software Loopback Interface 1
  6...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
  2...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================

IPv6 路由表
===========================================================================
活动路由:
 接口跃点数网络目标                网关
  5    266 ::/0                     fe80::a8bb:ccff:fe00:100
  1    306 ::1/128                  在链路上
  2    306 2001::/32                在链路上
  2    306 2001:0:348b:fb58:243a:f523:8735:3f99/128
                                    在链路上
  5    266 2019::8467:b31f:dbd3:6847/128
                                    在链路上
  5    266 2019::e97d:e434:d525:3bd2/128
                                    在链路上
  5    266 2020::8467:b31f:dbd3:6847/128
                                    在链路上
  5    266 2020::e97d:e434:d525:3bd2/128
                                    在链路上
  5    266 2021::/64                在链路上
  5    266 2022::/64                在链路上
  5    266 2022::8467:b31f:dbd3:6847/128
                                    在链路上
  5    266 2022::e97d:e434:d525:3bd2/128
                                    在链路上
  3    266 fe80::/64                在链路上
  5    266 fe80::/64                在链路上
  2    306 fe80::/64                在链路上
  2    306 fe80::243a:f523:8735:3f99/128
                                    在链路上
  3    266 fe80::4c75:d54:4d3d:15fd/128
                                    在链路上
  5    266 fe80::8467:b31f:dbd3:6847/128
                                    在链路上
  1    306 ff00::/8                 在链路上
  3    266 ff00::/8                 在链路上
  5    266 ff00::/8                 在链路上
  2    306 ff00::/8                 在链路上
===========================================================================
永久路由:
  无

C:\Users\Administrator>

从上面的输出信息我们可以看到,在主机的IPv6路由表中,由于2019::/64和2020::/64都是off-link状态,所以路由表中并没有这两个64位前缀,只有128位的主机路由。有意思的是,2021::/64前缀虽然不允许自动配置,即主机的IPv6地址中没有这个前缀构成的地址,但这个前缀却加入了主机的路由表中,可以不用理会。2022::/64是正常的默认值,64位前缀和128位主机路由都存在。

当然、上面这个实验只是为了说明如何配置前缀选项,以及前缀选项对主机获取地址及前缀列表(路由表)的影响。实际应用中一般只需要配置一个IPv6地址,且允许发送RA报文即可。配置的IPv6地址所对应的前缀默认就会作为RA报文的前缀选项发送给同网段内的主机,以用于地址自动配置并加入主机的前缀列表中。

推荐文章