DHCPv6-PD

组网需求

DHCPv6-PD(Prefix Delegation,前缀分配)是DHCPv6的扩展,传统的DHCPv6注重的是将地址等网络配置参数从服务器端传递给IPv6客户主机,而DHCPv6-PD注重的是前缀分配,即PD服务器端将一个子网范围的前缀地址段以及DNS等其他网络配置信息下发给PD客户端,这就意味PD服务器下发的是一个子网地址段”,而不是具体的可以直接供主机使用的IPv6地址。

举个例子,PD服务器可以将2022:da8::/60前缀通过某个IPv6接口下发给PD客户端,同时一般会在PD客户端的上联设备上生成相应的路由。PD客户端收到该前缀后,可以在本地IPv6接口上动态使用该前缀的/64子网地址。

那么DHCPv6-PD到底用在什么场景中呢?这样做又有什么好处呢?DHCPv6-PD在运营商场景中最为常见,当然也可以用在其他较大的分层设计的网络中。

以运营商为例,DHCPv6-PD服务器往往是供应商边界(Provider Edge,PE)路由器,而DHCPv6-PD客户端则是客户前置设备(Customer Premise Equipment,CPE)路由器。首先,PE路由器作为PD服务器,会提前设置好一定范围的前缀分配列表,然后将这些前缀列表通过直连CPE的接口自动分配给各个CPE路由器。然后,CPE路由器从上联接口收到PE路由器自动分配的前缀后,对此前缀做子网划分,这个子网划分一般是提前规划好并应用在各个下联接口的。待获取到前缀后,CPE路由器自动就在各个下联接口下生成了IPv6地址,并可进一步通过自动地址配置技术下发给最终客户主机使用。

DHCPv6-PD请求过程

  • PD客户端向PD服务器发送DHCPv6请求报文,此报文携带IA_PD选项,表明自己需要申请IPv6前缀。
  • PD服务器收到请求报文后,从自己的前缀列表池中取出可用的前缀,附带在IA_PD选项中,回复给PD客户端。
  • 前缀分配到期后,PD客户端重新向PD服务器发送DHCPv6请求报文,请求更新前缀。
  • PD服务器重新为PD客户端分配前缀(在原有前缀未被占用的情况下,一般就是续租)。
  • PD客户端需要释放前缀时,向PD服务器发送快速请求报文,以释放前缀。
  • PD服务器接收快速请求报文后,回收前缀,并对PD客户端的快速请求报文进行回应。

从上述通信过程可以看出,DHCPv6-PD与DHCPv6的主要区别就是前者申请的是前缀,后者申请的是地址。

网络拓扑

image-20230404162917213

  • FW1的port2从DHCPv6-PD服务器获取IPv6地址和Prefix,port3通过Delegate(继承)的方式从port2获取IPv6前缀,配合自身配置的subnet组成port3的IPv6地址。
  • FW1的port3开启delegated DHCP Server,为内网PC分配port2获取的前缀中的IPv6地址。

配置步骤

FW1(模拟ISP)

  1. FW1配置DHCPv6 Server,模拟Internet运营商。

    image-20230404164436309

    config system interface
        edit "port2"
            config ipv6
                set ip6-address 2100::1/64
                set ip6-send-adv enable
                set ip6-manage-flag enable
                set ip6-other-flag enable
            end
        next
    end
    
  2. FW1开启DHCPv6-PD服务器,该功能只能在CLI开启。在config system dhcp6 server中,config prefix-range为PD的配置,这里的配置就是可以给FW2分配的Prefix范围。

    注意这个范围不能超过prefix-length,比如运营商的地址池为60位,分配的prefix为64位,则最多可以分配2(64-60)=16个prefix,否则下发配置报错。
    config system dhcp6 server
        edit 1
            set subnet 2100::/60
            set interface "port2"
            config prefix-range
                edit 1
                    set start-prefix 2100:0:0:3::
                    set end-prefix 2100:0:0:4::
                    set prefix-length 64
                next
            end
            config ip-range
                edit 1
                    set start-ip 2100::2
                    set end-ip 2100::63
                next
            end
            set dns-server1 2200::64
        next
    end
    

FW2(模拟用户边界设备)

  1. FW2上配置port2接口的IPv6为DHCP方式获取,并开启DHCPv6 prefix delegation,填写DHCPv6 prefix hint为想要从DHCPv6-PD服务器获取的prefix。

    注意这里的DHCPv6 prefix hint ID(dhcp6-iapd-list ID)最好配置为1,否则在下步GUI配置继承接口时,无法选择到上游接口(CLI可以配置)。

    image-20230404173009492

    config system interface
        edit "port2"
            config ipv6
                set ip6-mode dhcp
                set dhcp6-prefix-delegation enable
                config dhcp6-iapd-list
                    edit 1
                        set prefix-hint 2100:0:0:3::/64    //掩码也可以不填写,默认为::/0,表示不指定请求的prefix
                    next
                end
            end
        next
    end
    
  2. 在FW2的port3上,设置IPv6的IP地址获取模式为“委派”,配置“IPv6上行接口”为port2,并配置“IPv6 Subnet”,从port2继承prefix后,加上配置的subnet地址,就组成了port3的IPv6地址。

    如果GUI中无法选择IPv6上行接口,可通过CLI配置。

    image-20230404175223384

    config system interface
        edit "port3"
            config ipv6
                set ip6-mode delegated
                set ip6-delegated-prefix-iaid 1    //与dhcp6-iapd序列号对应
                set ip6-upstream-interface "port2"
                set ip6-subnet ::1/64    //获取prefix后填充的子网IPv6
            end
        next
    end
    
  3. 那么FW2获取到这个prefix之后,除了可以分配给port3使用,还有什么作用呢?还可以通过自建DHCPv6服务器,将该Prefix中的IPv6分配给内网的IPv6客户端。

  4. 在FW2上的port3开启DHCPv6服务器(该配置建议在CLI下配置),配置subnet为port3接口网段,配置DNS Server,开启Stateful Server,配置分配IP mode为Delegated,配置upstream interface为port2,从port2获取的prefix分配IP地址给FW3,需要特别注意配置中引用port2中配置的IAPD

    config system dhcp6 server
        edit 1
            set subnet 2100:0:0:3::/64
            set interface "port3"
            set ip-mode delegated
            set upstream-interface "port2"
            set delegated-prefix-iaid 1    //重要步骤:配置中引用port2中配置的IAPD
            set dns-server1 2200::64
        next
    end
    
  5. 再次在FW2查看port3的配置,可以看到RA、M Flag、O Flag均被开启。

    config system interface
        edit "port3"
            config ipv6
                set ip6-mode delegated
                set ip6-delegated-prefix-iaid 1
                set ip6-send-adv enable
                set ip6-manage-flag enable
                set ip6-other-flag enable
                set ip6-upstream-interface "port2"
                set ip6-subnet ::1/64
            end
        next
    end
    

结果验证

DHCPv6-PD

  1. 在FW2上查看port2获取到的IPv6地址。

    image-20230404182500494

    FW2 # diagnose ipv6 address list | grep port2
    dev=4 devname=port2 flag=P scope=0 prefix=128 addr=2100::2 preferred=4294967295 valid=4294967295 cstamp=352820 tstamp=352820
    ...
    
  2. 在FW1上查看分配的DHCPv6客户端,可以看到FW1向FW2分别分配了一个IPv6地址和一个IPv6 prefix,prefix IAID为FW2的port2配置的IAID 1,DUID(DHCPv6 Unique Identifier)为FW2的DUID。

    image-20230404181243434

    FW1 # exe dhcp6 lease-list 
    Interface       DUID                                          IAID       IP/Prefix                      Expiry
    port2           00:03:00:01:50:00:00:02:00:01                 1          2100:0:0:3::/64                Tue Apr 11 17:33:19 2023
    
    port2           00:03:00:01:50:00:00:02:00:01                 4          2100::2                        Tue Apr 11 17:33:19 2023
    
  3. 查看IAPD( Identity Association for Prefix Delegation)的debug信息(diagnose debug application dhcp6s -1)。

    image-20230404182402665

  4. 抓包查看以上获取过程。

    • 客户端DHCPv6请求中既包含IPv6地址请求,也包含prefix的请求(IAPD),请求的Prefix与配置的一致,这里看到的IAID的值与dhcp6-iapd-list的ID一致,如果配置了多个dhcp6-iapd-list,则会携带多个IAPD请求。

      image-20230406103933766

    • 服务器通过DHCPv6 Advertise告知可用的IPv6地址,并确认该prefix可用,返回的prefix IAID也为1。

      image-20230406104000924

    • 客户端请求确认占用该IPv6地址和prefix,IAID与dhcp6-iapd-list的ID一致,如果配置了多个dhcp6-iapd-list,则会携带多个IAPD请求。

      image-20230406104054538

    • 服务器返回Reply确认分配IPv6与Prefix,原报文见附件。

      image-20230406104141189

  5. 查看FW2上的port3继承获取的IPv6地址,可以看到port3已经从port2的DHCP-PD Client获取到了前缀,加上自己的subnet Address,组成了自己的IPv6地址。

    image-20230404182600472

    FW2 # diagnose ipv6 address list | grep port3
    dev=5 devname=port3 flag=P scope=0 prefix=64 addr=2100:0:0:3::1 preferred=4294967295 valid=4294967295 cstamp=485929 tstamp=485929
    ...
    

DHCPv6 Client

  1. 配置PC客户端的IPv6获取方式为自动获取。

    image-20230403171629468

  2. 查看获取的IPv6地址、默认网关与DNS服务器,可以看到PC成功获取到了upstream delegated prefix中的IPv6地址。

    image-20230404183058338

  3. 在FW2上查看DHCP Client列表,DUID为PC客户端的DUID,IANA的IAID与客户端申请时的IAID一致(100666409)。

    FW2 # exe dhcp6 lease-list 
    Interface       DUID                                          IAID       IP/Prefix                      Expiry
    port3           00:01:00:01:2b:bc:4f:c8:00:0c:29:ae:55:70     100666409  2100:0:0:3::2                  Tue Apr 11 18:30:05 2023
    
  4. FW2上IAPD( Identity Association for Prefix Delegation)的debug信息(diagnose debug application dhcp6s -1)。

    ...
    [debug]dhcp6_get_options() get DHCP option option request, len 6
    [debug]   requested option: vendor specific info
    [debug]   requested option: DNS
    [debug]   requested option: domain search list
    [debug]react_confirm() found a host configuration named 00:01:00:01:2b:bc:4f:c8:00:0c:29:ae:55:70
    ...
    

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

results matching ""

    No results matching ""