Supervisor retry fix and expired-key node filter
Supervisor keeps retrying after a start timeout, tighter socket permissions, and a Key expired filter on Nodes.
Added
- Nodes: filter for nodes whose key expiry has passed (“Key expired”).
Fixed
- The headscale supervisor stopped retrying for good after a start timeout, leaving headscale down (and the restart button a silent no-op) until headscale-admin itself was restarted.
- Starting with auth enabled and no admin principal is now refused instead of only logged, which left the admin surface unreachable.
- A deleted principal read as logged-in on
/auth/me, bouncing the console between the app and the sign-in page until the session cookie expired. - Pausing headscale for a backup or version switch no longer has to wait out the restart backoff, which could exceed the pause deadline while headscale was crash-looping.
Security
- The generated
headscale.yamlnow setsunix_socket_permission: "0700"(was0770): the socket has no authentication of its own, so group access granted full headscale management. - headscale-pf apply in policy file mode validates the policy with
CheckPolicybefore writing it, so an invalid policy can no longer put the control plane into a restart loop.
Changed
- Go 1.26.5.
- Frontend dependency updates (SvelteKit 2.70.1, Svelte 5.56.8).