无状态 + 有状态模式

组网需求

FortiGate作为DHCPv6服务器,FortiGate或PC为客户端,客户端从FortiGate的RA报文中自动配置IPv6地址,并使用DHCPv6从FortiGate获取DNS服务器地址。

网络拓扑

image-20230327181828232

FW1和FW2(或PC)直连,FW1作为DHCPv6服务器,FW2(或PC)为客户端,FW2(或PC)从FW1的RA报文中自动配置IPv6地址,并使用DHCPv6从FW1获取DNS服务器地址。

配置步骤

  1. FW1上配置IPv6地址2100::1/64,并开启“无状态地址自动配置(SLAAC)”,配置IPv6前缀为2100::/64,开启“DHCPv6服务器”,配置DNS服务器,不开启“状态服务器”。

    image-20230403161256312

    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-other-flag enable    //开启O Flag
                set ip6-manage-flag disable    //关闭M Flag
                config ip6-prefix-list
                    edit 2100::/64
                        set autonomous-flag enable    //开启A Flag
                    next
                end
            end
        next
    end
    
    config system dhcp6 server
        edit 1
            set subnet 2100::/64
            set interface "port2"
            set dns-server1 2100::64
        next
    end
    
  2. FW2上配置port2的IPv6配置为“手动”模式,开启“自动配置IPv6地址”。

    image-20230403162355319

  3. FW2想要从FW1获取静态地址后,再通过DHCPv6获取DNS服务器信息,需要开启dhcp6-Information-request,该功能只能在CLI下开启,用于在IPv6自动配置后再通过DHCPv6获取DNS服务器等信息,最终配置如下。

    config system interface
        edit "port2"
            config ipv6
                set ip6-allowaccess ping https ssh http
                set dhcp6-information-request enable
                set autoconf enable
            end
        next
    end
    

结果验证

  1. 在FW2上查看自动配置的IPv6地址和DNS服务器地址,自动配置的IPv6地址根据前缀 + EUI自动生成,DNS通过DHCPv6获取,并自动添加了IPv6网关为FW1的port2的IPv6本地链路地址。

    注意:
    • FortiGate作为IPv6客户端时,获取IPv6地址后,默认路由的添加需要通过IPv6路由kernel表(get router info6 kernel)中看到。
    • 客户端添加的默认路由的下一跳为服务器端接口的IPv6本地地址,而非手工配置的IPv6地址。

    image-20230403163502663

    FW2 # config system interface 
    FW2 (interface) # edit port2
    
    FW2 (port2) # get | grep ip6
        ip6-mode            : static 
        ip6-address         : 2100::5200:ff:fe02:1/64
        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
        ip6-send-adv        : disable 
    
    FW2 (port2) # get | grep DNS
    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
    
  2. 使用Windows PC替换FW2,来获取IPv6地址,可以看到Windows客户端获取到了2100::/64前缀的IPv6地址,并将FW1的port2的IPv6本地地址作为IPv6网关。

    image-20230403171629468

    image-20230403171809934

    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
    
  3. 抓包查看整个流程。

    • FW2配置自动配置后,发出RS报文,请求IP地址配置,目标IP(ff02::2,链路本地范围的所有路由器)和MAC均为组播。

      image-20230403173708229

    • FW1发送RA报文,通报自身IPv6 prefix-list,可以看到前缀网段中标记了A Flag,RA中标记了O Flag,该报文为单播。

      image-20230403173655314

    • 由于开启了DHCP6-Information-request,FW2会继续通过DHCPv6请求DNS服务器等信息,该报文为组播,目标IP为DHCPv6保留的组播地址ff02::1:2。

      image-20230403173820455

    • FW1返回DHCPv6 Reply给FW2,携带DNS服务器地址,该报文为单播。

      image-20230403173925344

补充说明

  1. 客户端获取到Prefix后,有两种方式生成IPv6地址:

    • Prefix+EUI-64(FortiGate使用):自动将48bit的以太网MAC地址扩展成64bit,再组合一个≤64位的IPv6地址前缀,组成一个IPv6地址(Link-Local地址也是通过此方法生成)。经过测试,如果Prefix不足64位,则用0补齐Prefix和EUI-64之间的内容(根据EUI-64计算器,您可自行查看上述步骤中FW2获取的IPv6地址是否符合EUI64标准)。

      FW2 # diagnose netlink dstmac list port2
      dev=port2 mac=50:00:00:02:00:01 policy6 rx_tcp_mss=0 tx_tcp_mss=0 
      ...
      

      image-20230403174820740

    • 随机生成:RFC4941引入了一种随机地址机制,他包含了用一组随机数字代替由MAC地址转换的接口ID。该地址具有一定的生存周期,随着生存周期的结束,该地址会自动更换,该地址在用户对外发起连接的时候充当连接发起的IPv6地址,这一行为的目的在于保证主机在对外通信时候的匿名性。Windows、macOS和Linux默认均为这种方式生成IPv6,可以使用如下命令关闭随机地址。

      Windows:
      netsh interface IPV6 set global randomizeidentifiers=disabled    //禁用地址随机
      netsh interface ipv6 set privacy state=disable    //禁用临时地址
      
      linux下修改sysctl.conf:
      net.ipv6.conf.all.use_tempaddr=0
      net.ipv6.conf.eth0.use_tempaddr=0 
      net.ipv6.conf.default.use_tempaddr=0
      或sysctl net.ipv6.conf.INTERFACE.use_tempaddr=0
      
      macOS:
      sysctl net.inet6.ip6.use_tempaddr=0
      

      EUI的生成过程详见:https://ccie.lol/knowledge-base/ipv6-use-eui-64-convert-link-local-address/

      EUI-64在线生成器:http://www.wlts.cc/eui64/eui64.phphttps://www.vultr.com/zh/resources/mac-converter/

  2. RA中包含多个prefix时,客户端是否会自动配置多个IPv6?

    • 服务器端(FW1)的SLAAC配置两个prefix(RA报文中包含两个prefix)。

      image-20230403175129536

    • 客户端(FW2)自动配置IPv6地址,可以看到两个prefix均生成了IPv6地址。

      FW2 # diagnose ipv6 address list | grep port2
      dev=4 devname=port2 flag= scope=0 prefix=64 addr=2200::5200:ff:fe02:1 preferred=604794 valid=2591994 cstamp=255528 tstamp=258728
      dev=4 devname=port2 flag= scope=0 prefix=64 addr=2100::5200:ff:fe02:1 preferred=604794 valid=2591994 cstamp=139822 tstamp=258728
      dev=4 devname=port2 flag=P scope=253 prefix=64 addr=fe80::5200:ff:fe02:1 preferred=4294967295 valid=4294967295 cstamp=2901 tstamp=2901
      
    • PC客户端也会生成2个prefix的IPv6地址。

      image-20230403175314819

Copyright © 2024 Fortinet Inc. All rights reserved. Powered by Fortinet TAC Team.
📲扫描下方二维码分享此页面👇
该页面修订于: 2023-09-12 15:24:01

results matching ""

    No results matching ""