前面我们讲了IPv6地址配置方法,并且测试了SLAAC无状态自动配置。SLAAC的优点就是即插即用,几乎不用配置,而且它支持所有的终端设备。但是SLAAC也有缺点,它的缺点就是无法溯源,无法为特定终端分配预留,无法分配DNS等信息。考虑到SLAAC的缺点,RFC 3315提出了DHCPv6的地址配置方式。那么,什么是DHCPv6呢?

DHCPv6 (Dynamic Host Configuration Protocol for IPv6)是一个用来分配 IPv6 地址、前缀以及DNS等配置的有状态地址自动配置协议。DHCPv6 是一种运行在客户端和服务端之间的协议,与 IPv4 中的 DHCP 一样,所有的协议报文都是基于 UDP 的(客户端使用UDP 端口号546,服务端使用端口号547)。但是由于在 IPv6中 没有广播报文,因此 DHCPv6 使用组播(默认所有DHCPv6服务器都会加入并侦听该组播组:FF02::1:2)报文,客户端也无需配置服务端的IPv6地址。当然、与其他IPv6地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:首先,DHCPv6可以更好地控制IPv6地址的分配,DHCPv6方式不仅可以记录为IPv6主机分配的地址,还可以为特定的IPv6主机分配特定的地址,以便于网络管理。其次,DHCPv6支持为网络设备分配IPv6前缀,便于全网络的自动配置和网络层次性管理。除了为IPv6主机分配IPv6地址/前缀外,还可以分配DNS服务器IPv6地址等网络配置参数。我们在以下3种情况下,采用自动配置的客户主机将使用DHCPv6来获取地址。

1、如果客户主机在发送RS报文后未收到任何RA报文,则客户主机默认使用DHCPv6来获取地址和相关参数。

2、即便收到RA报文,但RA报文并没有携带用于地址自动配置的前缀信息,那么客户主机仍然也会采用DHCPv6来获取地址。

3、如果收到的RA报文中携带有用于地址自动配置的前缀信息,主机也将采用DHCPv6来获取地址。

相对于SLAAC,DHCPv6是一种有状态地址配置协议,即DHCPv6服务器会像DHCPv4那样分配除了默认网关信息的完整的IPv6地址,并记录IPv6地址与主机的对应关系。需要注意的是,DHCPv6服务器默认情况下记录的是IPv6地址与客户主机的身份关联标识符(Identity Association Identifier,IAID)和DHCP唯一标识符(DHCP UniqueIdentifier,DUID)的对应关系(后文有详解),而不是像IPv4网络那样记录IP与MAC地址的对应关系。大多数情况下,客户主机DUID的末48位为接口的物理地址,因此可以像DHCPv4那样做到溯源追踪。

1、DUID和IAID

在详细了解DHCPv6之前,我们先来看看DUID和IAID。DUID(DHCPv6 Unique Identifier)是DHCP设备的唯一标识符,每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。客户端DUID和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。这两个选项的格式是一样的,通过Option字段的取值来区分是Client Identifier(字段值1)还是Server Identifier(字段值2)选项。RFC3315中规定DUID不允许用于其他用途,它的长度是可变的,但不能超过128字节,且一旦DUID固定,中途不允许更改。DUID的类型主要有3种:DUID-LL(Link-Layer address),最常用;DUIDLLT(Link-Layer address plus Time);硬件厂商自定义的DUID。通常情况下,DUID组成部分的末48位就是接口的MAC地址。

而IAID身份关联(Identity Association,IA)是服务器和客户主机都能识别、分组及管理的一个IPv6地址结构,这个地址结构包括一个IA的标识(即IAID)和相关联的配置信息。在DHCPv4中,客户主机只需要携带自身的MAC地址就可以向服务器申请地址,而在DHCPv6环境下,客户主机在DHCPv6申请报文中携带的是一个地址结构,即IA。通常情况下,请求报文的IA结构至少包括(DUID,IA-TYPE,IAID)三元组。其中DUID是客户主机的标识符,IA-TYPE是需要申请到的地址类型,主要包括非临时地址(Non-temporary Address,IA-NA)、临时地址(Temporary Address,IA-TA)和前缀分配(Prefix Delegation,IA-PD)。其中IA-NA最常见,IA-PD用来标识客户主机申请的不是地址而是前缀(后面章节会有介绍)。一个DHCPv6客户主机必须为每个接口至少分配一个IA以向服务器申请地址或前缀,IAID可唯一地标识一个IA。同一个客户主机的IAID不能重复出现,IAID也不能因主机重启等原因丢失或改变。IA中的配置信息(分配给客户主机的IA-NA地址等)由服务器来分配,一个IA也可以包含多个地址信息。简单的理解就是,DHCPv6客户主机的接口使用携带IAID标识的IA去向服务器申请地址或前缀(类型由IA-TYPE决定,以IA-NA最常见),服务器以IA为分配单元,将分配的地址或前缀等信息回复给客户主机,同时在本地记录下分配情况表。一个客户主机只能有一个DUID,但每个接口至少有一个IA。对于Windows主机来说,可以使用命令ipconfig /all来查看IAID和DUID。

下面的内容是我的电脑上面真实的网卡信息、我们可以看到DHCPv6 客户端 DUID为:00-01-00-01-28-D8-0B-4D-84-A9-38-1B-33-EF。在DHCPv6中,服务器、中继或客户主机有且只有一个DUID,但每个接口至少有一个IA。对于Windows主机来说,可以使用命令ipconfig /all来查看IAID和DUID(如下);后面我们也会通过抓包来验证DUID的数据包。

C:\Users\z0ukun>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : X1Carbon
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX201 160MHz
   物理地址. . . . . . . . . . . . . : 20-1E-88-16-94-73
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv6 地址 . . . . . . . . . . . . : 240e:369:51ff:411::96(首选)
   获得租约的时间  . . . . . . . . . : 2022年2月18日 17:21:30
   租约过期的时间  . . . . . . . . . : 2022年2月18日 20:21:30
   本地链接 IPv6 地址. . . . . . . . : fe80::8c94:9df3:4d20:cddc%13(首选)
   IPv4 地址 . . . . . . . . . . . . : 10.10.10.116(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   获得租约的时间  . . . . . . . . . : 2022年2月18日 17:21:28
   租约过期的时间  . . . . . . . . . : 2022年2月18日 20:22:59
   默认网关. . . . . . . . . . . . . : fe80::f62a:7dff:fe2e:eabd%13
                                       10.10.10.254
   DHCP 服务器 . . . . . . . . . . . : 10.10.10.254
   DHCPv6 IAID . . . . . . . . . . . : 136322696
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-28-D8-0B-4D-84-A9-38-1B-33-EF
   DNS 服务器  . . . . . . . . . . . : 240e:369:50ff:400:f62a:7dff:fe2e:eabd
                                       114.114.114.114
                                       202.103.24.68
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

C:\Users\z0ukun>

对于支持IPv6的路由器/交换机等网络设备来说,可以使用命令show ipv6 dhcp来查看DUID,结果如下:

R1#show ipv6 dhcp
This device's DHCPv6 unique identifier(DUID): 00030001AABBCC000100
R1#

我们还可以使用命令show ipv6 dhcp interface 来查看DUID和接口的IAID,结果如下:

Router#show ipv6 dhcp interface e0/0
Ethernet0/0 is in client mode
  Prefix State is IDLE
  Address State is OPEN
  Renew for address will be sent in 3d19h
  List of known servers:
    Reachable via address: FE80::A8BB:CCFF:FE80:200
    DUID: 000100005A915C23500000050000
    Preference: 0
    Configuration parameters:
      IA NA: IA ID 0x00030001, T1 345600, T2 552960
        Address: 2023::BED7/128
                preferred lifetime 691200, valid lifetime 1036800
                expires at Mar 07 2016 12:41 PM (1022368 seconds)
      DNS server: 240C::6666
      Information refresh time: 0
  Prefix Rapid-Commit: disabled
  Address Rapid-Commit: enabled
Router#

注:感兴趣的小伙伴可以自行测试。

2、DHCPv6常见报文类型

DHCPv6报文封装在UDP中,不同类型的报文有着不同的用途。常见的报文类型如下。

Solicit报文:类型值为1,客户主机以组播形式发送该报文,用于寻找DHCPv6服务器。图4-14中的行号1就是Solicit报文,可在Info栏下看到Solicit字样。

Advertise报文:类型值为2,服务器用此报文回复客户主机的Solicit报文,此报文是单播报文。图4-14中的行号2就是Advertise报文,在行号10中可以看到“Message Type:Advertise(2)”。此报文中包括DHCPv6服务器要分配的IPv6地址等信息。

Request报文:类型值为3,客户主机以组播方式发送此报文,选择分配IPv6地址等信息的服务器。图4-14中的行号3就是Request报文。有些读者可能会问,既然是选择分配IPv6地址的服务器,为何不是单播报文呢?试想一下,如果网络中有2台DHCPv6服务器,它们都会收到客户主机的Solicit报文,都会分配IPv6地址,客户主机可能选择的是某一台DHCPv6服务器分配的IPv6地址,客户主机使用组播报文通告它选择了某台DHCPv6服务器分配的IPv6地址,另一台没被选择的DHCPv6服务器也会收到此组播报文,得知自己没有被选择,收回分配出去却没有被选择的IPv6地址。简言之,就是客户主机使用Request组播报文通告它选择了谁,没有选择谁。

Reply报文:类型值为7,用于回复Solicit、Request等报文,此报文是单播报文。图4-14中的行号4就是Reply报文。

Release报文:类型值为8,客户主机用此报文通知服务器释放地址。

Decline报文:类型值为9,客户主机用此报文通知服务器分配的地址已被占用。

Information-request报文:类型值为11,客户主机使用此报文向服务器申请地址之外的其他参数,如DNS等信息。需要注意的是,在DHCPv4中,可以分配默认网关地址和IP掩码给客户主机,但在DHCPv6中,并不能分配默认网关地址,默认网关地址仍然需要RA报文来完成。

Relay-forward报文:类型值为12,当服务器与客户主机不在同一网段时,通信由中继代理完成。中继代理使用该报文封装客户主机的Request报文并转发到服务器。

Relay-reply报文:类型值为13,服务器使用此报文封装回复消息并转发到中继代理。中继代理对服务器与客户端之间的通信进行封装和拆封。

DHCPv6中还有其他报文类型和选项,读者可以参考相关RFC文档,这里不做过多介绍。需要注意掌握的是,在DHCPv6中,地址请求报文是由类型值为3的Request报文来完成的,而DNS等参数信息则是由类型值为11的Information-request报文来完成的。Relay-forward报文和Relay-reply报文用于在服务器和中继代理之间通信,与客户主机无关。DHCPv6不能为客户主机分配默认网关地址,而且在客户主机上也无法看到DHCPv6的地址,这一点与DHCPv4不同。

3、DHCPv6地址分配流程

DHCPv6的地址分配流程与DHCPv4的类似,大致流程如下。首先、DHCPv6客户主机向组播地址FF02::1:2发送查询(Solicit)报文,寻找DHCPv6服务器。客户主机也可以携带rapid-commit选项以快速申请地址。DHCPv6服务器收到Solicit报文后,如果Solicit报文中携带有rapid-commit选项,且服务器自身支持rapid-commit,则直接为客户主机分配完整的IPv6地址,地址分配完成。否则,服务器向客户主机发送单播报文,通告(Advertise)报文中携带可以为客户主机提供地址和其他网络参数。客户主机向服务器发送组播Request报文,通告它选择了哪台DHCPv6服务器为其分配的IPv6地址。服务器发送Reply报文,被选中的DHCPv6服务器发送Reply报文,确认把该IPv6地址分配给客户主机。客户主机在获得IPv6地址后,仍然要进行DAD,通过检测后地址才能使用。

注:这里需要注意的是,客户主机必须支持DHCPv6客户端才行,Windows 7以上的系统默认都支持DHCPv6客户端服务,因此可以通过DHCPv6获取地址。需要注意的是,目前原生的安卓系统尚不支持DHCPv6。

4、有状态DHCPv6

要想使用有状态DHCPv6,可以在路由器网关的RA中设置M位为1,以通知客户主机使用DHCPv6来获取IPv6地址。另外,O标志位设置为1时表示将通过DHCPv6获取IPv6地址外的其他参数信息,比如IPv6 DNS地址等。同时必须屏蔽网络中可能导致SLAAC的其他RA报文,当网络中既有DHCPv6服务器(或中继),RA报文也携带用于地址自动配置的前缀时,主机可通过SLAAC获取地址,也可通过DHCPv6获取地址。由于SLAAC获取的地址的首选优先级比DHCPv6获得的地址首选优先级要高,所以会导致主机无法使用通过DHCPv6获得的地址。为了避免这种情况的发生,在确定使用有状态DHCPv6时,一定要禁止SLAAC。

我们按照下面的网络拓扑图、并把基本的IPv6配置信息配置完成(小伙伴们自行配置、要可以参考后文的路由器配置DHCPv6部分的配置内容)。

image-20220223170514628

DHCPv6的通信过程与DHCPv4的一样,都是服务器和客户主机在不同的UDP端口上进行监听。服务器本地监听端口为547,客户机本地监听端口为546端口。下图就是我们捕获的DHCPv6通告报文:

image-20220223175625065

从上图中我们可以看到,红色1号数字是DHCP客户端发送的地址查询(Solicit)报文,这是一个组播报文,源IPv6地址是链路本地地址,目的IPv6地址是ff02::1:2。红色2号数字是DHCP服务器对DHCP客户端请求的通告(Advertise)报文,这是一个单播报文,源IPv6地址是DHCP服务器的IPv6地址,目的IPv6地址是DHCP客户端的链路本地地址。红色3号数字是DHCP客户端的请求(Request)报文,这是一个组播报文,源IPv6地址是链路本地地址,目的IPv6地址是ff02::1:2。红色3号数字下面是DHCP服务器的回答(Reply)报文,这是一个单播报文,源地址是DHCP服务器的IPv6地址,目的IPv6地址是DHCP客户端的链路本地地址。

红色4号数字的DHCP报文是UDP报文,服务器的端口是547,客户端的端口是546。DHCPv6服务器及中继都会加入本地链路多播地址组ff02::1:2中。初次通信时,客户主机会向本地链路多播地址发送DHCPv6查询报文,服务器会直接回应DHCP查询报文,中继则转发该报文到指定的DHCPv6服务器上;我们还可以看到画红圈的部分是我们前面讲到的DUID和IAID。

好了、讲了这么多;下面我们就一起来看看如何在路由器和Windows服务器上配置DHCPv6。

3.1、路由器配置DHCPv6

在IPv4环境下,我们经常使用路由器和交换机作为DHCP服务器来为客户主机分配地址,并且可以通过查看DHCP绑定表来追踪具体的分
配情况。在IPv6环境下,很多主流厂商的网络设备也已经可以作为DHCPv6服务器来分配地址或其他信息了。下面我们就通过一个实验来测试一下,如何在路由器上通过DHCPv6为交换机和Win10分配IPv6地址。另外,在同时开启DHCPv6和SLAAC的情况下,观察Win10主机获得地址的情况。

这里我们还继续沿用上一小节的拓扑结构、基础配置如下:

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#hostname R1
R1(config)#ipv6 unicast-routing 
# 定义一个IPv6 DHCP分配次,名称是DHCPv6
R1(config)#ipv6 dhcp pool dhcpv6
# 定义地址分配范围
R1(config-dhcpv6)#address prefix 2022::/96
# 定义下发给终端主机的DNS地址
R1(config-dhcpv6)#dns-server 240c::6666
R1(config-dhcpv6)#exit
# 启用DHCP服务(有一些默认关闭需要手动启动)
R1(config)#service dhcp 
R1(config)#int ethernet 0/0
R1(config-if)#ipv6 enable 
R1(config-if)#ipv6 address 2022::1/64
# 设置M位,告诉终端主机使用DHCPv6分配地址
R1(config-if)#ipv6 nd managed-config-flag 
# 设置O位,告诉终端主机使用DHCPv6分配其他信息
R1(config-if)#ipv6 nd other-config-flag 
# 通告前缀,但禁止分配地址
R1(config-if)#ipv6 nd prefix 2022::/64 3800 1900 no-autoconfig 
# 使用DHCPv6地址池为终端主机进行分配
R1(config-if)#ipv6 dhcp server dhcpv6 rapid-commit 
R1(config-if)#no shutdown 

这里我们还需要针对上述操作做详细的描述如下。本实验所使用的思科路由器暂不支持定义起始地址到终止地址范围的地址池,但是可以通过设置地址池中的前缀位数来确定范围。这个前缀位数的值一定要大于接口地址本身的前缀位数值。如步骤3中的2022::/96,对于128位的IPv6地址来说,只有128-96=32位可用来分配地址,所以可分配的地址范围就是2022::0000:0000~2022:: FFFF:FFFF。当然,在具体分地址时,并不一定是按照从小到大或从大到小的顺序分配。

DHCPv6不能像DHCPv4那样下发网关地址,因此还是要依靠RA报文来通告网关地址信息。所以我们不能使用ipv6 nd ra suppress命令抑制发送RA报文。设置M位的目的是告知客户主机使用DHCPv6获取地址,设置O位的目的是告知客户主机使用DHCPv6获取地址之外的其他参数,如DNS等。这里可以省略M位和O位的设置,客户主机使用SLAAC获取地址时,也会使用DHCPv6。读者可以去掉设置M位和O位的这两条命令,验证是否影响结果。当然,设置M位和O位是更严谨的做法,也是为了更快地告知客户主机使用DHCPv6,虽然这也不能阻止客户主机在具备通过SLAAC获取地址条件时使用SLAAC来获取地址。

为了只使用DHCPv6来分配地址,需要禁止路由器接口分配IPv6地址。这里不使用ipv6 nd prefix 2022::/64 no-advertise命令的原因是,该命令不通告前缀,当然客户端也就无法获取IPv6地址。而且由于没有通告前缀,客户主机上就没有2022::/64的路由(可以使用route print-6命令验证)。这样客户主机访问2022::/64同网段的终端时,数据包也会被发往默认路由(即路由器),虽然也能通信,但降低了效率。在接口下引用DHCPv6地址池时,使用命令ipv6 dhcp server自定义DHCPv6地址池,推荐再带上rapid-commit选项,这样客户主机若希望通过rapid-commit寻找DHCPv6服务器来获取地址,那么可以减少两次通信,从而快速、直接地为客户主机分配地址。

路由器在作为DHCPv6服务器使用时,其用法与作为DHCPv4服务器使用时不同。在IPv4环境下,在定义好地址池后,地址池中的地址段与哪个接口相匹配,就自动为那个接口的客户端分配接口所在网段的地址,不需要单独在接口下指定使用地址池中的哪个地址段。而在IPv6环境下,必须在接口下指定使用哪个地址池,这也意味着地址池中定义的前缀与接口本身的前缀可以不一致,即客户主机获取到的地址的前缀与网关接口地址的前缀不一样。路由器有多个接口、多个地址池时,配置时一定要多加注意,避免把地址池配错接口,导致虽获取到地址却无法正常通信的情况。

配置完成以后我们在WIN10终端上进行验证;我们将网卡设置成自动获取IPv6地址和DNS地址(这里建议先建议禁止IPv4)。然后在命令提示符下使用命令ipconfig /all查看主机获取地址的情况,如下:

C:\Users\Administrator>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : DESKTOP-831NFS0
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
   物理地址. . . . . . . . . . . . . : 50-00-00-03-00-00
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv6 地址 . . . . . . . . . . . . : 2022::5a59:b9d7(首选)
   获得租约的时间  . . . . . . . . . : 2022年2月18日 20:35:50
   租约过期的时间  . . . . . . . . . : 2022年2月20日 20:35:51
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4(首选)
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe00:100%4
   DHCPv6 IAID . . . . . . . . . . . : 55574528
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-24-11-9D-3D-50-00-00-03-00-00
   DNS 服务器  . . . . . . . . . . . : 240c::6666
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

C:\Users\Administrator>

从上面我们可以看出,主机获取到了地址2022::5a59:b9d7,此地址在2022::/96范围之内,并有获得租约的时间和租约过期的时间。Win10主机还自动获取到了DNS服务器地址。与IPv4不同的是,这里不显示DHCPv6服务器的IPv6地址。我们继续在路由器上验证,在路由器上使用命令show ipv6 dhcp binding查看IPv6地址的分配情况,结果如下所示:

R1#show ipv6 dhcp binding
Client: FE80::8467:B31F:DBD3:6847 
  DUID: 0001000124119D3D500000030000
  Username : unassigned
  VRF : default
  IA NA: IA ID 0x03500000, T1 43200, T2 69120
    Address: 2022::5A59:B9D7
            preferred lifetime 86400, valid lifetime 172800
            expires at Feb 21 2016 09:36 PM (171836 seconds)
R1#

从上面的输出可以看到,客户端的链路本地地址、DUID、申请类型IA NA(即非临时地址)、IA ID(路由器上显示的是十六进制0x03500000,换算成十进制是55574528)等都与计算机上显示的一致。T1和T2分别是地址更新时间和地址重新绑定时间,一般不用关心。分配的地址就是在客户主机上看到的地址2022::5A59:B9D7,此地址也有首选生存时间和有效生存时间。对于Win10主机来说,DHCPv6客户端软件是系统默认自带的,当Win10将IPv6地址设置成自动获取时,就默认允许以SLAAC和DHCPv6两种方式获取地址。对于路由器来说,虽然接口也支持自动配置,但需要明确指明是使用SLAAC还是DHCPv6来获取地址。我们还需要对交换机进行如下配置:

Switch>en
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#int vlan 1
Switch(config-if)#ipv6 enable 
Switch(config-if)#ipv6 add ?
  WORD                General prefix name
  X:X:X:X::X          IPv6 link-local address
  X:X:X:X::X/<0-128>  IPv6 prefix
  # 自动配置
  autoconfig          Obtain address using autoconfiguration
  # 使用DHCP配置
  dhcp                Obtain a ipv6 address using dhcp
# 在VLAN 1接口调用DHCP地址池
Switch(config-if)#ipv6 add dhcp rapid-commit 
Switch(config-if)#no shutdown 

命令中的rapid-commit是可选的,当客户主机使用了该选项,但服务器并不支持该选项时,仍然需要4次报文交互来完成地址的自动配置,这并不影响DHCPv6的地址分配。再通过命令show ipv6 interface brief vlan 1 查看获取到的地址,如下所示:

Switch#show ipv6 interface brief vlan 1 
Vlan1                  [up/up]
    FE80::A8BB:CCFF:FE80:200
    2022::8A4F:B4CA
Switch#

3.2、路由器配置DHCPv6中继

这里我们思考一个问题,当DHCPv6客户端与服务器不在同一个网段的时候,我们该怎么做呢?在IPv4中我们需要配置DHCP中继来进行转发、在DHCPv6中也一样。这里我们仍把路由器作为DHCPv6服务器,并利用交换机的三层功能将网络划分VLAN 1和VLAN 2,路由器在VLAN 1中,Win10在VLAN 2中,拓扑如下图:

image-20220218215321737

路由器重新配置如下:

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ipv6 unicast-routing 
Router(config)#service dhcp
Router(config)#ipv6 dhcp pool dhcpv6
Router(config-dhcpv6)#address prefix 2022::/80
Router(config-dhcpv6)#dns-server 2001::8888
# 增加DNS域名后缀
Router(config-dhcpv6)#domain-name z0ukun.com
Router(config-dhcpv6)#exit      
Router(config)#int ethernet 0/0
Router(config-if)#ipv6 enable 
# 本实验中R1充当DHCP服务器,三层交换机充当网关,路由器不需要再通告RA报文,抑制RA发送
Router(config-if)#ipv6 add 2021::1/64
Router(config-if)#ipv6 nd ra suppress 
# 在接口下调用地址池,也就是说如果从这个接口收到DHCP请求,就从DHCP地址池中分配地址。从这里可以看出地址池定义的前缀(2022::/80)可以与地址前缀(2021::/64)不一致
Router(config-if)#ipv6 dhcp server dhcpv6
Router(config-if)#no shutdown 
Router(config-if)#
*Feb 19 20:13:27.884: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Feb 19 20:13:28.886: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
Router(config-if)#exit
# 配置默认路由发往三层交换机的VLAN接口,相当于给服务器配置网关
Router(config)#ipv6 route ::/0 2021::2
Router(config)#end
Router#wr
Building configuration...
[OK]
Router#
*Feb 19 20:13:55.335: %SYS-5-CONFIG_I: Configured from console by console
Router#

在这一步中,我们直接禁止路由器的接口发送RA报文,原因是路由器的接口不需要为直连的三层交换机分配地址或下发网关,当然不抑制RA发送对实验也无影响。客户主机Win10与路由器不在同一网段,所以引用的地址池定义的前缀与自身接口的地址前缀可以不一致。接下来对交换机进行配置,划分VLAN,把端口加入相应的VLAN,给三层的VLAN接口配置IPv6地址,并配置DHCP中继功能等。交换机的配置如下:

Switch>en
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
# 创建VLAN 2
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#int ethernet 0/1
# 将直连WIN10的接口划分到VLAN 2中
Switch(config-if)#sw acc vlan 2
Switch(config-if)#exit
# 开启IPv6路由协议
Switch(config)#ipv6 unicast-routing 
# 默认配置、可以省略
Switch(config)#service dhcp
# 配置三层VLAN接口
Switch(config)#int vlan 1
Switch(config-if)#
*Feb 19 20:31:24.704: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan1, changed state to down
Switch(config-if)#ipv6 enable 
Switch(config-if)#ipv6 add 2021::2/64
%Vlan1: Warning: 2022::/64 is a Subnet Router Anycast
# 该VLAN中不存在其他客户端,可以不用发送RA报文,本实验中是佛抑制RA报文的发送并不影响结果
Switch(config-if)#ipv6 nd ra suppress 
Switch(config-if)#no shutdown 
Switch(config-if)#int vlan 2
Switch(config-if)#ipv6 enable 
# 配置VLAN接口的IPv6地址,这里的前缀长度同样要短于DHCP地址池的前缀长度
Switch(config-if)#ipv6 add 2022::1/64
# 不通告前缀,避免SLAAC自动配置
Switch(config-if)#ipv6 nd prefix 2022::/64 no-advertise 
# 配置DHCPv6中继,在此接口收到的DHCP请求将以单播方式转发到2021::1的DHCP服务器
Switch(config-if)#ipv6 dhcp relay destination 2021::1
Switch(config-if)#no shutdown 
Switch(config-if)#end
Switch#wr

打开Win10,使用命令ipconfig /all查看通过DHCPv6获取到的地址的其他信息,如下所示:

C:\Users\Administrator>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : DESKTOP-831NFS0
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否
   DNS 后缀搜索列表  . . . . . . . . : z0ukun.com

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . : z0ukun.com
   描述. . . . . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
   物理地址. . . . . . . . . . . . . : 50-00-00-03-00-00
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv6 地址 . . . . . . . . . . . . : 2022::6a25:7c9d:c743(首选)
   获得租约的时间  . . . . . . . . . : 2022年2月18日 23:21:16
   租约过期的时间  . . . . . . . . . : 2022年2月20日 23:21:16
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4(首选)
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71(试验)
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe80:200%4
   DHCPv6 IAID . . . . . . . . . . . : 55574528
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-24-11-9D-3F-50-00-00-03-00-00
   DNS 服务器  . . . . . . . . . . . : 2001::8888
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用
   连接特定的 DNS 后缀搜索列表:                  z0ukun.com

C:\Users\Administrator>


C:\Users\Administrator>netsh interface ipv6 show add

接口 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 状态    有效寿命   首选寿命   地址
---------  ----------- ---------- ---------- ------------------------
# 这里我们可以看到、WIN10终端获取的地址是2022::/80 80位的前缀地址(最后3段16*3-128=-80)
DHCP       首选项        1d23h58m16s  23h58m16s 2022::6a25:7c9d:c743
其他         首选项           infinite   infinite fe80::8467:b31f:dbd3:6847%4

C:\Users\Administrator>

从上面输出的信息我们可以看到Win10成功获取到路由器上定义的地址池中的地址、DNS服务器地址以及DNS后缀。

在路由器上通过命令show ipv6 dhcp binding查看地址分配情况,显示如下:

Router#show ipv6 dhcp binding 
Client: FE80::8467:B31F:DBD3:6847 
  DUID: 0001000124119D3F500000030000
  Username : unassigned
  VRF : default
  IA NA: IA ID 0x03500000, T1 43200, T2 69120
    Address: 2022::6A25:7C9D:C743
            preferred lifetime 86400, valid lifetime 172800
            expires at Feb 22 2016 12:22 AM (172715 seconds)
Router#

从输出中可以看出,客户端的链路本地地址、IA ID、DUID等都是Win10主机的。这说明即使客户端与服务器所在的网段不同,但通过中继转发后,在服务器看来就像是与客户端直连一样,可正常地分配地址及其他参数。在Win10上ping路由器R1的IPv6地址2021::1,可正常ping通。

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

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

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

C:\Users\Administrator>

3.3、Windows服务器配置DHCPv6

从上面的实验我们可以看出,在DHCPv6中继转发的情况下,用路由器做服务器至少存在两个缺陷。

1、必须在接口下指定使用一个且只能使用一个地址池来分配地址,只要该接口下有DHCPv6请求,那么不管是本网段的直接DHCP请求,还是来自多个不同网段的DHCP中继转发,都会从同一个地址池中分配地址。而不同网段的地址前缀不同,因此不可能处在同一个地址池中,这就使路由器不适合在DHCPv6中继环境下对多个网段分配地址。

2、路由器并不能为固定的客户端分配指定的地址。鉴于路由器在用作DHCPv6服务器时的不足,通常情况下,需要用单独的服务器来为整个网络中的网段集中分配和管理地址。接下来我们将使用Windows Server 2016作为DHCPv6服务器,R1和Win10作为DHCPv6客户端且与服务器处于不同的网段,交换机用作DHCPv6中继进行转发。在Windows服务器上为处于不同网段的R1和Win10分配地址,并且在知道客户主机DUID等信息的情况下,为其分配指定的IPv6地址;其配置拓扑如下图所示。

image-20220218234042472

我们对路由器R1做如下配置,保证接口ethernet0/0通过DHCPv6获取地址:

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#ipv6 unicast-routing 
Router(config)#int ethernet 0/0
Router(config-if)#ipv6 enable 
Router(config-if)#ipv6 add dhcp rapid-commit 
Router(config-if)#ipv6 nd ra suppress 
Router(config-if)#no shutdown 
Router(config-if)#end
Router#wr
Building configuration...
[OK]
Router#

交换机在本实验中继续充当三层交换机,当然我们还需新建VLAN,把端口加入VLAN,配置三层VLAN接口和DHCPv6中继转发等。交换机详细配置如下:

Switch>en
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#ipv6 unicast-routing 
Switch(config)#service dhcp
# 创建VLAN 2
Switch(config)#vlan 2
# 继续创建VLAN 3
Switch(config-vlan)#vlan 3
# 配置eth0/0接口
Switch(config-vlan)#int eth0/0
# 给接口添加描述
Switch(config-if)#description conn_Router
# 把接口eth0/0划入VLAN 3
Switch(config-if)#sw acc vlan 3
Switch(config-if)#int eth0/1
Switch(config-if)#des conn_Win10
Switch(config-if)#sw acc vlan 1
Switch(config-if)#int eth0/2
Switch(config-if)#des conn_WinServer
Switch(config-if)#sw acc vlan 2
# 配置三层VLAN 1接口
Switch(config-if)#int vlan 1
Switch(config-if)#ipv6 enable 
Switch(config-if)#ipv6 add 2021::1/64
# 通告前缀,但禁止分配地址
Switch(config-if)#ipv6 nd prefix 2021::/64 3800 1900 no-autoconfig 
# 配置DHCPv6中继转发地址
Switch(config-if)#ipv6 dhcp relay destination 2022::2
Switch(config-if)#no shutdown 
Switch(config-if)#int vlan 3
Switch(config-if)#
Switch(config-if)#ipv6 enable 
Switch(config-if)#ipv6 add 2023::/64
Switch(config-if)#ipv6 nd prefix 2023::/64 3800 1900 no-autoconfig 
Switch(config-if)#ipv6 dhcp relay destination 2022::2
Switch(config-if)#no shutdown 
Switch(config-if)#int vlan 2
Switch(config-if)#ipv6 enable 
Switch(config-if)#ipv6 add 2022::1/64
# 该VLAN中只有一台设备配置了静态IPv6的DHCPv6服务器,可以关闭RA通告。如果该VLAN中还有其他终端,这里可不关闭
Switch(config-if)#ipv6 nd ra suppress 
Switch(config-if)#no shutdown 
Switch(config-if)#end
Switch#wr

路由器和交换机配置完成以后,我们开始在WinServer上安装DHCP服务。静态配置WinServer的IPv6地址为2022::2,前缀长度保持默认的64位,网关地址为2022::1,建议禁用IPv4协议。网络配置完成后,我们开始安装DHCP服务;单击任务栏上的“开始”图标,在弹出的菜单中单击“服务器管理器”(或单击任务栏上左起第4个图标),打开“服务器管理器▶仪表板”窗口,如下图:

image-20220222215543841

单击“服务器管理器▶仪表板”中的“添加角色和功能”链接,弹出“添加角色和功能向导”对话框,保持默认选择,连续单击3次“下一步”按钮。在“服务器角色”界面,勾选“DHCP服务器”,如图4-21所示。如果DHCP服务器后面出现“(已安装)”字样,说明已经安装过,可直接忽略后面的安装步骤。

image-20220222215627759

在勾选DHCP服务器时,会弹出提示框,在提示框中直接单击“添加功能”继续。继续单击“下一步”按钮,直到出现安装界面,如下图所示。单击“安装”按钮,开始安装,直至安装完成。

image-20220222215708742

image-20220222215732536

配置DHCP。单击“服务器管理器▶仪表板”中的菜单“工具”→“DHCP”,打开DHCP窗口,如下图:

image-20220222220000147

配置分配给客户端的DNS地址。右键单击下图中IPv6下的“服务器选项”,选择“配置选项”,弹出“服务器选项”对话框。选中“00023 DNS递归名称服务器IPv6地址”选项,并在“新建IPv6地址”字段中输入DNS服务器的IPv6地址,然后单击“添加”按钮,结果如下图所示。可以添加多个DNS地址,在添加的过程中,服务器会试图验证DNS的可用性,由于这里只是实验环境所以验证不会成功;但不用理会,我们始终添加即可。

image-20220222220136012

image-20220222220248723

image-20220222220339359

前面的DNS添加完成以后我们回到下图所示的界面,右键单击IPv6,选择“新建作用域”,进入“新建作用域向导”界面,这里先创建VLAN 1网段的DHCPv6作用域,作用域名称可以随意指定,这里输入VLAN 1。单击“下一步”按钮,输入VLAN 1网段对应的前缀,这里输入2021::,前缀的长度是/64,不能改变,如下图:

image-20220222221408350

单击“下一步”按钮,输入排除的即不用于地址分配的起始IPv6地址和结束IPv6地址。Windows与路由器不一样,默认是整个/64前缀都用于地址分配,即默认的地址分配范围是2021::0:0:0:0~2021::FFFF:FFFF:FFFF:FFFF,可以用“添加排除”将不用于地址分配的地址范围去掉。如果不添加排除,则整个/64的地址都用于分配。如果要添加排除地址,一定要计算好,否则可能出现预想不到的结果。这里举一个例子,假如用于地址分配的范围是2021::0~2021::FFFF,那么排除地址的范围就应该是2021::0:0:1:0~2021::FFFF:FFFF:FFFF:FFFF,如下图所示:

image-20220222221510040

单击“下一步”按钮,设置首选生存时间和有效生存时间。读者可以自行设置,但要保证有效生存时间不能小于首选生存时间。单击“下一步”按钮继续。最后询问是否立即激活作用域,如下图所示;单击“完成”按钮,完成作用域的添加。

image-20220222221540179

按照同样的配置方法,我们继续创建用于VLAN 3网段的作用域,最终结果如下图所示:

image-20220222223325232

配置完成以后我们回到Windows客户端进行验证;从上图还可以看出,“作用域[2021::]”的地址租用中已经有了一个条目,该条目是Win10主机被分配的IPv6地址,还能看到地址、名称、租用截止日期、IAID、地址类型(IANA非临时地址)、唯一ID(也就是DUID)等信息。读者配置完成后,若是看不到地址租用情况,可以单击DHCP管理窗口工具栏中的“刷新”按钮。然后再到Win10主机用命令ipconfig /all验证,如下:

C:\Users\Administrator>ipconfig /all

Windows IP 配置

   主机名  . . . . . . . . . . . . . : DESKTOP-831NFS0
   主 DNS 后缀 . . . . . . . . . . . :
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
   物理地址. . . . . . . . . . . . . : 50-00-00-03-00-00
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   IPv6 地址 . . . . . . . . . . . . : 2021::a9af(首选)
   获得租约的时间  . . . . . . . . . : 2022年2月22日 22:29:25
   租约过期的时间  . . . . . . . . . : 2022年3月6日 22:29:25
   本地链接 IPv6 地址. . . . . . . . : fe80::8467:b31f:dbd3:6847%4(首选)
   自动配置 IPv4 地址  . . . . . . . : 169.254.104.71(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . : fe80::a8bb:ccff:fe80:200%4
   DHCPv6 IAID . . . . . . . . . . . : 55574528
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-24-11-9D-53-50-00-00-03-00-00
   DNS 服务器  . . . . . . . . . . . : 240c::6666
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

C:\Users\Administrator>

比较上面的IPv6地址分配信息我们可以发现,在服务器上看到的IAID和DUID与在客户端上看到的是一致的。其实这两个值由客户主机生成,包含在地址请求报文中,用来向服务器申请地址。服务器也是根据这两个值来为客户主机分配地址,而不像DHCPv4那样根据客户端MAC地址来分配地址。DHCPv4中一般会根据MAC地址快速地追踪客户主机,而DHCPv6只能提供IAID和DUID,好在大部分客户主机DUID的末48位就是MAC地址。知道了客户主机的IAID和DUID后,我们还可以为其分配固定的IPv6地址。记下上中中Win10主机的IAID和DUID,然后右键单击WIN10作用域下的“保留”,选择“新建保留”,在弹出的界面中输入客户主机的IAID和DUID以及想要分配的IPv6地址即可完成保留地址配置。

image-20220222224159639

当然、除了新建保留地址外,我们也可以将已分配给客户主机的地址加入保留地址。只需在上图中选中已经租用出去的地址,右键单击,选择“添加到保留”即可。将Win10主机配置成固定分配地址2021:: a9af后,将Win10网卡的IPv6协议禁用后再启用,重新获取IPv6地址,可以验证获取到的就是保留地址2021::a9af。

我们同步到路由器上进行终端验证。从上图中我们可以看到VLAN 1名称的作用域,也可以看到R1已经分配了IPv6地址。还能看到地址、名称(这里显示的是空)、租用截止日期、IAID、地址类型、DUID。在路由器上查看接口eth0/0是否已经自动获取到了地址,可使用命令show ipv6 interface brief Ethernet 0/0,显示如下:

Router#show ipv6 interface brief ethernet 0/0
Ethernet0/0            [up/up]
    FE80::A8BB:CCFF:FE00:100
    2023::BED7
Router#

我们在Win10上ping DHCPv6服务器的IPv6地址2022::2进行连通性测试,发现可以ping通。在R1上ping 2022::2,无法ping通。查看R1的路由表,显示如下:

# WIN10连通性测试
C:\Users\Administrator>ping 2022::2

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

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

C:\Users\Administrator>

# 路由器连通性测试
Router#ping 2022::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2022::2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
Router#

# 路由器路由表
Router#show ipv6 route  
IPv6 Routing Table - default - 2 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
       H - NHRP, I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea
       IS - ISIS summary, D - EIGRP, EX - EIGRP external, NM - NEMO
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, la - LISP alt
       lr - LISP site-registrations, ld - LISP dyn-eid, a - Application
LC  2023::BED7/128 [0/0]
     via Ethernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive
Router#

可以看到,路由器只是通过DHCPv6获得了一个/128的IPv6地址;并没有获得前缀路由,也没有获得默认路由。这是因为路由器默认还是扮演路由角色,不接受RA报文通告的默认网关等信息。可以使用下
面的命令在路由器上添加默认路由:

Router(config)#ipv6 route ::/0 ethernet 0/0
# 注:我们添加链路本地地址路由时还需指定出口,也就是e0/0

# 测试失败
Router#sh ipv6 route
IPv6 Routing Table - default - 3 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
       H - NHRP, I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea
       IS - ISIS summary, D - EIGRP, EX - EIGRP external, NM - NEMO
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, la - LISP alt
       lr - LISP site-registrations, ld - LISP dyn-eid, a - Application
S   ::/0 [1/0]
     via Ethernet0/0, directly connected
LC  2023::BED7/128 [0/0]
     via Ethernet0/0, receive
L   FF00::/8 [0/0]
     via Null0, receive
Router#ping 2022:;2
% Unrecognized host or address, or protocol not running.

Router#ping 2022::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2022::2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
Router#

注:我这边手动配置路由以后测试失败。

上面我们手动添加路由虽然测试失败了,但是我们也可以使用下面的命令在路由器上关闭IPv6路由协议,以保证自己纯粹是客户机而不是路由器。这样路由器在获取到IPv6地址的同时,也会通过收到的RA报文生成默认路由:

Router(config)#no ipv6 unicast-routing 
Router#ping 2022::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2022::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/19 ms
Router#

5、无状态DHCPv6

所谓无状态DHCPv6,是指除了地址信息之外的其他参数信息由DHCPv6服务来分配,且地址的分配还是采用无状态自动配置的。换句话说,无状态DHCPv6相当于SLAAC(地址分配)+DHCPv6(其他参数信息分配,如DNS、域名等)。当还没有DHCPv6服务器,但又想向用户下发IPv6 DNS地址信息时,就可以采用无状态DHCPv6。

无状态DHCPv6配置主要就是网关路由器的配置。配置要点如下:

1、允许发送RA报文。在RA报文中设置O位,但不设置M位,告诉客户主机将使用DHCPv6获取地址之外的参数,地址仍然是通过SLAAC无状态自动配置获取的。

2、RA报文中需携带允许自动配置的前缀信息,便于客户主机提取前缀,再加上自身生成的接口标识符,最终形成完整的IPv6地址。RA报文也向客户主机通告了默认网关。

3、DHCPv6服务不配置前缀或地址池,只配置DNS等其他参数。

4、网关路由器接口下需指定DHCPv6地址池或DHCPv6中继地址。

由于无状态DHCPv6涉及的知识已经在前面章节中进行了讲解,这里只列出一个典型的网关路由器的配置,不再单独用实验演示。有兴趣的同学可以参考此配置实例自行实验。网关路由器的通用配置如下:

Router#config terminal
Router(config)#ipv6 unicast-routing
Router(config)#service dhcp
Router(config)#ipv6 dhcp pool DHCPv6
# 定义不包含地址信息的地址池
Router(config-dhcpv6)#dns-server 240c::6666
Router(config-dhcpv6)#domain-name abc.com
Router(config-dhcpv6)#interface ethernet0/0
Router(config-if)#ipv6 enable
Router(config-if)#ipv6 address 2022::1/64
# 设置O位
Router(config-if)#ipv6 nd other-config-flag 
Router(config-if)#ipv6 dhcp server dhcpv6
Router(config-if)#no shutdown

推荐文章