Skip to content

release: v1.18.0-beta.3 — v4-only fallback for hosts without usable IPv6#245

Merged
geodro merged 1 commit intomainfrom
release/v1.18.0-beta.3
Apr 23, 2026
Merged

release: v1.18.0-beta.3 — v4-only fallback for hosts without usable IPv6#245
geodro merged 1 commit intomainfrom
release/v1.18.0-beta.3

Conversation

@geodro
Copy link
Copy Markdown
Owner

@geodro geodro commented Apr 23, 2026

Third beta on the 1.18 line. One fix.

On hosts that have IPv6 in the kernel but no global or ULA v6 address on any interface (typical in headless QEMU or KVM VMs, containers, and networks without v6 DHCP), netavark cannot reliably hold the ULA gateway on the rootless bridge, so aardvark dns fails to bind fd00:1e7d::1 port 53 with EADDRNOTAVAIL and a subset of service containers (usually nginx, postgres, meilisearch) exit with status 1 and stay in failed state after lerd install.

The dual stack migration from beta.1 assumed every host could hold a v6 ULA, so v4 only networks from 1.17.1 were force migrated to dual stack regardless of the host's actual v6 state. This change adds a HostHasUsableIPv6 probe that reads /proc/net/if_inet6 and the disable_ipv6 sysctl, and gates dual stack creation on the probe. Hosts with a global or ULA v6 address still get dual stack, hosts without stay or get moved to v4 only. Existing mismatched networks are recreated in place on lerd install, so a dual stack network on a v6 less host becomes v4 only on the next install, and a v4 only network on a host that has v6 is promoted to dual stack just like before. Upgrading from 1.17.1 on a v6 less host is a no op, same v4 only network, no container churn.

Renamed MigrateNetworkToIPv6 to RecreateNetwork since the target schema now depends on the host.

On hosts that have IPv6 in the kernel but no global or ULA v6 address on
any interface (headless QEMU/KVM VMs, containers, v6less networks),
netavark cannot reliably hold the ULA gateway on the rootless bridge.
aardvark-dns then fails to bind [fd00:1e7d::1]:53 with EADDRNOTAVAIL and
a subset of service containers (commonly nginx, postgres, meilisearch)
exit with status 1 and stay in failed state after lerd install.

EnsureNetwork and RecreateNetwork (was MigrateNetworkToIPv6) now probe
/proc/net/if_inet6 + /proc/sys/net/ipv6/conf/all/disable_ipv6 and create
the lerd network v4-only when no non-loopback, non-link-local v6 address
is present. Existing mismatched networks are recreated in place on the
next install: dual-stack on a v6less host becomes v4-only, v4-only on a
host that has v6 is promoted to dual-stack as before. Upgrade path from
1.17.1 on a v6less host is a no-op (no recreate, no container churn).
@geodro geodro merged commit a6d4dcd into main Apr 23, 2026
6 checks passed
@geodro geodro deleted the release/v1.18.0-beta.3 branch April 23, 2026 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant