Note: This report was drafted with AI assistance based on raw system logs and direct CLI outputs. All logs and findings have been human-verified.
VyOS Version: 1.5-rolling-202609010034
Component: dhcp6c / wide-dhcpv6 / vyos-netlinkd
ISP / Environment: Init7 (Fiber, Switzerland) — DHCPv6 IA_NA + IA_PD (/48)
Description
During a periodic DHCPv6 renewal on WAN interface (eth1), dhcp6c parses/calculates an invalid, astronomically high preferred lifetime (pltime) value when updating the prefix and address. This garbage value (pltime=94420561038264) gets passed to /etc/wide-dhcpv6/dhcp6c.eth1.script, which puts vyos-netlinkd into a continuous loop (RTM_NEWADDR) re-applying the IPv6 address every second until the routing table/interface breaks and network connectivity is completely lost.
Configuration (eth1)
set interfaces ethernet eth1 address 'dhcp' set interfaces ethernet eth1 address 'dhcpv6' set interfaces ethernet eth1 address '2a02:168:5608:1::99/128' set interfaces ethernet eth1 description 'WAN - Init7 (10G SFP+)' set interfaces ethernet eth1 dhcpv6-options pd 0 interface dum0 address '1' set interfaces ethernet eth1 dhcpv6-options pd 0 length '48' set interfaces ethernet eth1 hw-id '64:62:66:25:0e:3b' set interfaces ethernet eth1 ipv6 address autoconf set interfaces ethernet eth1 offload gro set interfaces ethernet eth1 offload gso set interfaces ethernet eth1 offload sg set interfaces ethernet eth1 offload tso
Steps to Reproduce
Configure WAN interface eth1 with DHCPv6 and Prefix Delegation (IA_PD /48) as shown in the configuration above.
Wait for a DHCPv6 RENEW cycle from the ISP (Init7).
Observe journalctl logs for dhcp6c and vyos-netlinkd.
Relevant Log Extracts
- Garbage Lifetime Value in dhcp6c:
Sep 06 21:59:42 vyos dhcp6c[2876]: copyin_option: IA_PD prefix: xxxx:xxxx:xxxx::/48 pltime=3000 vltime=4000 Sep 06 21:59:42 vyos dhcp6c[2876]: update_prefix: update a prefix xxxx:xxxx:xxxx::/48 pltime=94420561038264, vltime=94420561039264 Sep 06 21:59:42 vyos dhcp6c[2876]: client6_recvreply: executes /etc/wide-dhcpv6/dhcp6c.eth1.script
(Note: ISP sends pltime=3000, but dhcp6c internal state transforms it into 94420561038264).
- Resulting Netlink Loop (vyos-netlinkd):
Sep 06 23:03:09 vyos vyos-netlinkd[4478]: RTM_NEWADDR -> eth1, addr=2a02:168:2000:b:6662:66ff:fe25:e3b/64 Sep 06 23:03:17 vyos vyos-netlinkd[4478]: RTM_NEWADDR -> eth1, addr=2a02:168:2000:b:6662:66ff:fe25:e3b/64 Sep 06 23:03:27 vyos vyos-netlinkd[4478]: RTM_NEWADDR -> eth1, addr=2a02:168:2000:b:6662:66ff:fe25:e3b/64 ... (repeats indefinitely every few seconds until network drops)
Expected Behavior
dhcp6c should correctly parse and apply the lifetime received from the server (pltime=3000), update the kernel routing table once, and sleep until the next renewal interval without triggering a vyos-netlinkd address loop.