Repository navigation
feat(console): reach a maintenance node with no DHCP server - #385
Merged
Merged
Conversation
With no DHCP server the kernel's ip=dhcp attempt gives up and leaves the interfaces down with no address, so a maintenance node had nothing to connect to and the console's Address line was empty. Maintenance and reprovision mode now run a link-local fallback: while no interface holds a reachable IPv4 address, it brings Ethernet links up and gives the first one with carrier an RFC 3927 address in 169.254.0.0/16, derived from its MAC so it is stable across boots. Only one interface gets one, so the node never holds two connected routes for the prefix. The console uses the new ReachableAddrs: the routable addresses when there are any, else the IPv4 link-local ones. IPv6 link-local addresses stay ignored, since the node configures no IPv6. The maintenance listener already binds 0.0.0.0, and the maintenance certificate names only localhost and is reached with --insecure, so no SAN change is needed. Closes #381 Signed-off-by: Bugs5382 <12115015+Bugs5382@users.noreply.github.com>
Signed-off-by: Bugs5382 <12115015+Bugs5382@users.noreply.github.com>
This was referenced Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
I want a maintenance node to stay reachable when the provisioning network has no DHCP server, so a laptop cabled straight to it works with no server-side config.
The premise in the issue turned out to be only half right: nothing on the node assigned an IPv4 link-local address. The kernel only does
ip=dhcp, and when no server answers it gives up and leaves the interfaces down with no address. So this change adds the address as well as showing it:SetLinkUpandAddAddress(link up plus add, no flush, no route).ReachableAddrsreturns the routable IPv4 addresses when there are any, else the IPv4 link-local ones.ManagementAddrsis unchanged;LocalManagementAddrs(what the console reads every refresh) now usesReachableAddrs. IPv6 link-local stays ignored, since the node configures no IPv6.0.0.0.0:443, so it answers on the link-local address. The maintenance certificate names onlylocalhostand is reached with--insecureon any address, and the check is the console's Mgmt SHA-256, so I left the SANs alone; that keeps the existing trust model.docs/management-trust.mddescribes the no-DHCP case and thecryptosctl --endpoint 169.254.x.x:443 --insecurecall.Closes #381
Verification
SetLinkUpandAddAddress.How this was verified
CI is the proof for this change: the Go checks run the new and existing tests. The docs command needs a booted maintenance node; the appliance end-to-end proof follows in cryptos-appliance.