有状态模式
组网需求
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 end
FW2上配置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.0
FW2 # 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=1790
FW1上查看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, DHCPv6保留的组播地址ff02::1:2 )和MAC均为组播。
FW1返回DHCPv6 Advertise报文,包含可用的IPv6地址以及DNS服务器地址,报文为单播,目标IP地址为FW2的本地IPv6地址。
FW2请求占用FW1提供的IPv6 2100::66,目标IP地址(ff02::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请求。