有状态模式
有状态模式
网络需求
FortiGate 作为 DHCPv6 服务器,FortiGate 或 PC 为客户端,客户端通过 DHCPv6 获取 IPv6 地址以及 DNS 等信息,不通过 RA 进行自动配置。
网络拓扑

FW1 和 FW2(或 PC)直连,FW1 作为 DHCPv6 服务器,FW2(或 PC)为客户端,FW2(或 PC)通过 DHCPv6 获取 IPv6 地址以及 DNS 等信息,不通过 RA 进行自动配置。
配置步骤
FW1 上配置 IPv6 地址 2100::1/64,并关闭“无状态地址自动配置(SLAAC)”,开启“DHCPv6 服务器”,配置 DNS 服务器,开启“状态服务器”,并配置分配 IP 范围。

config system interface edit "port2" config ipv6 set ip6-address 2100::1/64 set ip6-allowaccess ping https ssh http set ip6-send-adv enable //开启RA set ip6-manage-flag enable //开启M Flag set ip6-other-flag enable //开启O Flag end next en config system dhcp6 server edit 1 set subnet 2100::/64 set interface "port2" config ip-range edit 1 set start-ip 2100::65 set end-ip 2100::67 next end set dns-server1 2100::64 next endFW2 上配置 port2 的“IPv6 地址模式”为“DHCP”。

config system interface edit "port2" config ipv6 set ip6-mode dhcp end next end
结果验证
在 FW2 上查看 DHCPv6 获取的 IPv6 地址和 DNS 服务器地址,并自动添加了 IPv6 网关为 FW1 的 port2 的 IPv6 本地链路地址。
重要
- FortiGate 作为 IPv6 客户端时,获取 IPv6 地址后,默认路由的添加需要通过 IPv6 路由 kernel 表(get router info6 kernel)中看到。
- 客户端添加的默认路由的下一跳为服务器端接口的 IPv6 本地地址,而非手工配置的 IPv6 地址。

FW2 # config system interface FW2 (interface) # edit port2 FW2 (port2) # get | grep ip6 ip6-mode : dhcp ip6-address : 2100::66/128 ip6-allowaccess : ping https ssh http ip6-reachable-time : 0 ip6-retrans-time : 0 ip6-hop-limit : 0 vrip6_link_local : :: ip6-dns-server-override: enable FW2 (port2) # get | grep DNS delegated-DNS1 : :: delegated-DNS2 : :: Acquired DNS1 : 2100::64 Acquired DNS2 : :: Acquired DNS1 : 0.0.0.0 Acquired DNS2 : 0.0.0.0FW2 # get router info6 kernel | grep gwy vf=0 tbl=254 type=01(unicast) protocol=2(kernel) flag=00450000 prio=1024 gwy:fe80::5200:ff:fe01:1 dev=4(port2) pmtu=1500 FW1 # diagnose ipv6 address list | grep port2 dev=4 devname=port2 flag=P scope=0 prefix=64 addr=2100::1 preferred=4294967295 valid=4294967295 cstamp=1790 tstamp=1790 dev=4 devname=port2 flag=P scope=253 prefix=64 addr=fe80::5200:ff:fe01:1 preferred=4294967295 valid=4294967295 cstamp=1790 tstamp=1790使用 Windows PC 替换 FW2,来获取 IPv6 地址,可以看到 Windows 客户端获取到了 2100::/64 前缀的 IPv6 地址,并将 FW1 的 port2 的 IPv6 本地地址作为 IPv6 网关。



FW1 # diagnose ipv6 address list | grep port2 dev=4 devname=port2 flag=P scope=0 prefix=64 addr=2100::1 preferred=4294967295 valid=4294967295 cstamp=1790 tstamp=1790 dev=4 devname=port2 flag=P scope=253 prefix=64 addr=fe80::5200:ff:fe01:1 preferred=4294967295 valid=4294967295 cstamp=1790 tstamp=1790FW1 上查看 DHCPv6 地址分配情况。

FW1 # exe dhcp6 lease-list port2 Interface DUID IAID IP/Prefix Expiry port2 00:01:00:01:2b:bc:4f:c8:00:0c:29:ae:55:70 100666409 2100::65 Tue Apr 11 15:19:19 2023 port2 00:03:00:01:50:00:00:02:00:01 4 2100::66 Tue Apr 11 15:25:13 2023抓包查看整个流程。
查看 FW1 发出的 RA 报文,可以看到 RA 中开启了 M 和 O Flag,未开启 A Flag(没有 SLAAC prefix)。

FW2 配置接口模式为 DHCPv6 后,发出 DHCPv6 Solicit 报文,请求非临时 IP 地址与 DNS 地址,目标 IP 地址(ff02
1:2 )和 MAC 均为组播。 
FW1 返回 DHCPv6 Advertise 报文,包含可用的 IPv6 地址以及 DNS 服务器地址,报文为单播,目标 IP 地址为 FW2 的本地 IPv6 地址。

FW2 请求占用 FW1 提供的 IPv6 2100
1:2, DHCPv6 保留的组播地址 ff02::1:2 )和 MAC 均为组播。 
FW1 发送 DHCPv6 Reply 报文,确认客户端可以使用该 IPv6 并携带了 DNS 服务器地址,目标 IP 为单播 FW2 的本地 IPv6 地址。

补充说明
服务器端(FW1)A Flag 和 M Flag 同时开启,客户端(FW2)会生成几个地址?
客户端(FW2)的 IPv6 地址配置为“Manual”+“Auto configure IPv6 addres”时,只会发出 RS 报文,然后 FW1 返回 RA 报文,客户端根据 RA 中的 prefix 自动配置地址。
客户端(FW2)的 IPv6 地址配置为“DHCP”时,不会发出 RS 报文,只会发出 DHCPv6 报文,然后通过 DHCPv6 获取 IP 和 DNS 等信息,即使服务器端发出了携带 prefix 的 RA 报文,FW2 依然会通过 DHCPv6 获取 IP 地址和 DNS 等信息。
也就是对于 FortiGate 作为 Client,Server 同时开启 M 和 A Flag,地址生成方式取决于客户端的 IPv6 地址模式。
对于 PC Client 来说,当配置为 DHCP 获取地址时,仍然会发出 RS 报文,通过 Server 端发出的 RA 报文中的 Flag 来确定地址获取的方式,当 RA 中的 A Flag 和 M Flag 同时开启时,PC Client 会同时获取两种地址,一种从 RA 中的 prefix 自动生成,一种从 DHCPv6 Server 获取,如下图所示。

接口下开启 DHCPv6 状态服务器后,请确保 DHCPv6 分配的 IPv6 地址与该接口的 IPv6 地址在同一网段,否则状态服务器不会响应任何 DHCPv6 请求。