DHCPv6 Client state transition timers (Renew -> Rebind -> Expire) seem capped at 10m (v7.20.8 long-term)

Hi everyone,

While testing DHCPv6-PD lease timer behaviors in our lab, we stumbled upon a very interesting issue regarding how the RouterOS DHCPv6 client handles state transitions (Renew -> Rebind -> Expiration/Solicit).

We would like to share our findings and ask the community if anyone can reproduce this behavior or shed some light on whether this is a known limitation.

When an upstream DHCPv6 server provides longer lease times—where the interval between T1 -> T2 or T2 -> Valid Lifetime exceeds 10 minutes (600 seconds)—the RouterOS DHCPv6 client appears to cap the state transition waiting timers at a maximum of exactly 600 seconds (10 minutes).

Because of this 10-minute ceiling, when operating under standard long leases (e.g., 1-hour or multi-day leases), the RouterOS client prematurely triggers Rebind and Solicit packets minutes or hours earlier than the server-specified T2 and Valid Lifetime allow.

To test this cleanly, we set up two RouterBOARDs running the exact same version:

  • RouterOS Version: v7.20.8 (long-term) on both units.

  • Server (RB-A): Configured as a DHCPv6-PD Server with several lease durations.

  • Client (RB-B): Configured as a DHCPv6 Client.

  • Firewall Filter: Applied on the client to drop outgoing Renew (and Rebind) packets on UDP/547 to simulate server unresponsiveness and force the client to progress through state transitions.

  • Packet Capture: Wireshark monitoring on the link between RB-A and RB-B.

We ran test cases with four different lease durations: 20 minutes, 30 minutes, 40 minutes, and 60 minutes.

Lease Duration Server T1 Server T2 Server Valid Observed Renew → Rebind Interval Observed Rebind → Solicit Interval Behavior / Result
20 min (1200s) 600s 960s 1200s 360s (6 min) (Expected 360s) 240s (4 min) (Expected 240s) Normal (Pass)
30 min (1800s) 900s 1440s 1800s 540s (9 min) (Expected 540s) 360s (6 min) (Expected 360s) Normal (Pass)
40 min (2400s) 1200s 1920s 2400s 600s (10 min) (Expected 720s) 600s (10 min) (Expected 480s) Capped at 10m
60 min (3600s) 1800s 2880s 3600s 600s (10 min) (Expected 1080s) 600s (10 min) (Expected 720s) Capped at 10m

As shown in the table above:

  1. Under 10 minutes: When the interval between T1 -> T2 or T2 -> Valid Lifetime is under 600 seconds (20m and 30m tests), the client works good.
  2. Over 10 minutes: As soon as the interval needs to be longer than 600 seconds (40m and 60m tests), the client hits a 600-second hard cap.
    • On a 60-minute lease, Rebind is sent at 2400s (1800s + 600s) instead of 2880s (T2).

    • Solicit is sent at 3000s (2400s + 600s) instead of 3600s (Valid Lifetime).

Has anyone else encountered this behavior?

Can you share configs of each server?

Here are the exported configs from our setup:

[admin@DHCPv6Srv-test] > export
# 2026-01-29 09:57:31 by RouterOS 7.20.8
# software id = 
#
# model = E60iUGS
# serial number = 
/ipv6 dhcp-server
add address-pool=v6-pool interface=ether1 lease-time=20m name=dhcpv6-srv prefix-pool=v6-pool
/ipv6 pool
add name=v6-pool prefix=fd00:1:100::/48 prefix-length=64
/ipv6 address
add address=fd00:1:1::1 interface=ether1
/ipv6 firewall filter
add action=drop chain=input comment=DHCPv6-Block-Test disabled=yes dst-port=547 in-interface=ether1 protocol=udp
/system identity
set name=DHCPv6Srv-test
[admin@DHCPv6Cli-test] > export  
# 2026-01-29 10:01:18 by RouterOS 7.20.8
# software id = 
#
# model = E60iUGS
# serial number = 
/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether3
add bridge=bridge1 interface=ether5
/interface ethernet switch
set 0 mirror-source=ether3 mirror-target=ether5
/ipv6 dhcp-client
add interface=bridge1 pool-name=received-prefix request=prefix
/system identity
set name=DHCPv6Cli-test

A few quick notes on the setup and captures:

  • Parameters modified per test:

    The base configs are identical for all runs. We only adjusted two things on the Server RB:

    • /ipv6 dhcp-server lease-time (changed to test 20m, 30m, 40m, and 60m).

    • /ipv6 firewall filter disabled attribute (toggled yes/no on the server to drop incoming Renew/Rebind packets and force the client into the next state).

  • Port Mirroring:

    On the client RB, ether3 (WAN) is mirrored to ether5, which is connected directly to our Wireshark capture PC.

  • Timestamps / NTP:

    Since this is an isolated lab with no internet/NTP, the system clock is off. Please ignore the header timestamps at the top of the config.

Let me know what you think or if you need anything else!