57 lines
3.2 KiB
Plaintext
57 lines
3.2 KiB
Plaintext
|
|
=== W2: does a production node take a DHCPv6 reservation? ===
|
||
|
|
Window of 2026-09-06, operator offline.
|
||
|
|
|
||
|
|
SHORT ANSWER: the RA half works; the RESERVATION half does not, and the reason
|
||
|
|
is structural rather than a misconfiguration.
|
||
|
|
|
||
|
|
WHAT WORKS
|
||
|
|
- RA is emitted on bond0.2 with AdvManagedFlag on, AdvAutonomous off,
|
||
|
|
AdvLinkMTU 1472, AdvDefaultLifetime 0 (deliberately not a default router).
|
||
|
|
- NetworkManager on worker0 SAW it and acted:
|
||
|
|
dhcp6 (eno1): activation: beginning transaction (timeout in 45 seconds)
|
||
|
|
So "ipv6.method=auto follows the managed flag" is now EVIDENCE, not
|
||
|
|
inference. That was the open question this window set out to close.
|
||
|
|
- kea-dhcp6 runs on both routers and receives SOLICITs on bond0.2.
|
||
|
|
|
||
|
|
WHAT DOES NOT WORK, AND WHY
|
||
|
|
Every DHCPv6 packet kea logs is annotated [no hwaddr info]:
|
||
|
|
|
||
|
|
duid=[00:04:69:d9:30:64:c3:4e:...] [no hwaddr info] <- DUID-UUID (type 4)
|
||
|
|
duid=[00:04:25:11:e0:0a:7b:c4:...] [no hwaddr info] <- DUID-UUID
|
||
|
|
duid=[00:01:00:01:31:78:0a:ae:...] [no hwaddr info] <- DUID-LLT (type 1)
|
||
|
|
|
||
|
|
DHCPv6 identifies a client by DUID, not by MAC. kea can sometimes DERIVE a MAC
|
||
|
|
(its mac-sources machinery), but here it derives nothing -- including from a
|
||
|
|
DUID-LLT, which does embed one. So `hw-address` reservations cannot match, and
|
||
|
|
a node that solicits gets no reserved address.
|
||
|
|
|
||
|
|
VyOS accepting `static-mapping <name> mac` is therefore necessary but NOT
|
||
|
|
sufficient: it renders valid kea config ("hw-address": "78:55:36:08:28:fb",
|
||
|
|
confirmed in /run/kea/kea-dhcp6.conf) that simply never matches these clients.
|
||
|
|
The plan's assumption -- "reservations keyed on MAC, one source of truth with
|
||
|
|
IPv4" -- does not survive contact with DHCPv6.
|
||
|
|
|
||
|
|
OPTIONS, none free, for an attended session:
|
||
|
|
a) Key reservations on DUID (VyOS static-mapping supports `duid`). Works, but a
|
||
|
|
DUID is client-generated: it is a SECOND source of truth, it must be
|
||
|
|
harvested per node, and it changes if a node is rebuilt -- which is exactly
|
||
|
|
the "out of the box for new nodes" property we were trying to preserve.
|
||
|
|
b) Set kea `mac-sources` explicitly and see whether any method recovers a MAC
|
||
|
|
from these clients. Cheap to try; may simply not work for DUID-UUID.
|
||
|
|
c) Drop reservations: hand out a dynamic range and have labctl DISCOVER the
|
||
|
|
node's address rather than predict it. The k3s preflight (914135c) already
|
||
|
|
refuses to write a node-ip the node does not hold, so discovery is safe --
|
||
|
|
but the address is then not knowable before the node boots.
|
||
|
|
d) SLAAC with no-autonomous cleared, and accept EUI-64 addresses. Stable per
|
||
|
|
NIC and needs no server state at all, but the address is not ours to choose.
|
||
|
|
|
||
|
|
A SECOND FINDING, unrelated and worse if unnoticed
|
||
|
|
`service dhcpv6-server` with no listen-interface renders kea6 with
|
||
|
|
interfaces: [ "*" ] -- a DHCPv6 server on EVERY VLAN. Observed live: kea began
|
||
|
|
answering SOLICIT/REQUEST from an unrelated device on bond0.10 (LoT) within
|
||
|
|
seconds of the first apply. Same family as the kea IPv4 cross-VLAN bug (ISC
|
||
|
|
#1117) this estate already fought. Fixed by pinning
|
||
|
|
`set service dhcpv6-server listen-interface bond0.2` plus a subnet-level
|
||
|
|
`interface bond0.2`; both routers now render interfaces: ["bond0.2"].
|
||
|
|
|