IPv6 subneting

Short question: is it possible (and how) to create IPv6 subnets with address prefixes out of a given (larger) address pool?

Longer explanation: my ISP is delivering internet over PPPoE. I’m using DHCPv6 client on the pppoe-out1 interface requesting a prefix (I’m specifically using pool-prefix-length=64) and my ISP is giving out /56 prefixes. Then I have 3 L2 subnets (different VLANs) and I’d like to use one /64 prefix per subnet. So I tried this:

[u@r] /ipv6 address add address=::41:0:0:1:0 from-pool=ipv6-pool interface=vlan-41

Command executes without problems, but

[u@r] /ipv6 address print detail
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
....
 8 IG ;;; address pool error: bad preferred prefix! (1)
      address=::41:0:0:1:0/64 from-pool=ipv6-pool interface=vlan-41 actual-interface=vlan-41 eui-64=no advertise=yes no-dad=no

[u@r] /ipv6 pool print detail 
Flags: D - dynamic 
 0 D name="ipv6-pool" prefix=aaaa:bbbb:ccc::/56 prefix-length=64 expires-after=1h49m44s

If I try to use /56 prefix length in address assignment it’s not complaining but it’s all wrong:

[u@r] /ipv6 address add address=::41:0:0:1:0/56 interface=vlan-41 from-pool=ipv6-pool
[u@r] /ipv6 address print detail
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
....
 8  G address=2a00:ee2:400::1:0/64 from-pool=siol-ipv6 interface=vlan-41 
      actual-interface=vlan-41 eui-64=no advertise=no no-dad=no

It actually uses /64 prefix length (truncates the leading address bits).

I can statically assign /64 address to the interface just fine:

[u@r] /ipv6 address add address=aaaa:bbbb:ccc:41::1:0 interface=vlan-41
[u@r] /ipv6 address print detail
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local
 8  G address=aaaa:bbbb:ccc:41::1:0/64 from-pool="" interface=vlan-41 actual-interface=vlan-41 eui-64=no advertise=yes no-dad=no

I’m running ROS version 6.43.8.

We cannot repeat the problem, please enable dhcp debug logs, enable dhcp client, make a supout file and send to support.

Yes it is possible, I am doing this with 3 vlans and it works perfectly. My ISP gives me a /56
Following is my ipv6 code that perhaps can help you get there.

/ipv6 address
add address=::/64 advertise=yes disabled=no eui-64=no from-pool=rogers-ipv6 \
    interface=vlan10 no-dad=no
add address=::/64 advertise=yes disabled=no eui-64=no from-pool=rogers-ipv6 \
    interface=vlan20 no-dad=no
add address=::/64 advertise=yes disabled=no eui-64=no from-pool=rogers-ipv6 \
    interface=vlan40 no-dad=no
/ipv6 dhcp-client
add add-default-route=yes comment="delgate ISP-assigned prefix" \
    default-route-distance=1 dhcp-options="" disabled=no interface=ether1 \
    pool-name=rogers-ipv6 pool-prefix-length=64 prefix-hint=::/56 request=\
    address,prefix use-peer-dns=yes
/ipv6 firewall filter
add action=accept chain=input comment=established connection-state=\
    established in-interface=ether1
add action=accept chain=input comment=related connection-state=related \
    in-interface=ether1
add action=accept chain=input comment=icmp !connection-bytes \
    !connection-limit !connection-mark !connection-rate !connection-state \
    !connection-type !content disabled=no !dscp !dst-address \
    !dst-address-list !dst-limit !dst-port !headers !hop-limit !icmp-options \
    !in-bridge-port !in-bridge-port-list in-interface=ether1 \
    !in-interface-list !ingress-priority !ipsec-policy !limit log=no \
    log-prefix="" !nth !out-bridge-port !out-bridge-port-list !out-interface \
    !out-interface-list !packet-mark !packet-size !per-connection-classifier \
    !port !priority protocol=icmpv6 !random !src-address !src-address-list \
    !src-mac-address !src-port !tcp-flags !tcp-mss !time !tls-host
add action=accept chain=input comment=dhcpv6 dst-port=XXX in-interface=ether1 \
    protocol=udp
add action=drop chain=input comment="drop input" in-interface=ether1
add action=accept chain=forward comment=established connection-state=\
    established in-interface=ether1
add action=accept chain=forward comment=related connection-state=related \
    in-interface=ether1
add action=accept chain=forward comment=icmp in-interface=ether1 protocol=\
    icmpv6
add action=accept chain=forward comment=SSH dst-port=XXZX in-interface=ether1 \
    protocol=tcp
add action=drop chain=forward comment="drop forward" in-interface=ether1
/ipv6 nd
set [ find default=yes ] advertise-dns=yes advertise-mac-address=yes \
    disabled=no hop-limit=unspecified interface=ether1 \
    managed-address-configuration=no mtu=1500 other-configuration=no \
    ra-delay=3s ra-interval=3m20s-10m ra-lifetime=none reachable-time=5m \
    retransmit-interval=unspecified
add advertise-dns=yes advertise-mac-address=yes disabled=no hop-limit=64 \
    interface=vlan10 managed-address-configuration=no mtu=unspecified \
    other-configuration=no ra-delay=3s ra-interval=3m20s-10m ra-lifetime=30m \
    reachable-time=5m retransmit-interval=unspecified
add advertise-dns=yes advertise-mac-address=yes disabled=no hop-limit=64 \
    interface=vlan20 managed-address-configuration=no mtu=unspecified \
    other-configuration=no ra-delay=3s ra-interval=3m20s-10m ra-lifetime=30m \
    reachable-time=5m retransmit-interval=unspecified
add advertise-dns=yes advertise-mac-address=yes disabled=no hop-limit=64 \
    interface=vlan40 managed-address-configuration=no mtu=unspecified \
    other-configuration=no ra-delay=3s ra-interval=3m20s-10m ra-lifetime=30m \
    reachable-time=5m retransmit-interval=unspecified
/ipv6 nd prefix default
set autonomous=yes preferred-lifetime=4h valid-lifetime=4h
/ipv6 settings
set accept-redirects=yes-if-forwarding-disabled accept-router-advertisements=\
    yes forward=yes max-neighbor-entries=8192

ipv6subnets.GIF
ipv6routs.GIF