feat(web-arm): opt-in IPv6 egress for podman containers via NAT66/ULA network #86
No reviewers
Labels
No labels
bug
enhancement
in-progress
needs-info
needs-triage
p0
ready-for-agent
ready-for-human
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/nixos!86
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/85"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
web-arm gained host outbound IPv6 in #81 / ADR 0010, but its podman containers sit on the IPv4-only default bridge and cannot reach a v6-only destination. This adds a reusable, opt-in dual-stack podman bridge network so any container can get IPv6 egress.
hosts/web-arm/modules/v6egress.nix:init-v6egress-networksystemd oneshot creates the network idempotently (podman network exists … || podman network create --ipv6 --subnet 10.89.0.0/24 --subnet fdaa:bbcc:ddee::/64 v6egress), mirroring howfwprovisions per-workload podman networks.2a01:4f8:c012:43b::1and leaves over the #81 default route.boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = trueso the host routes container v6 outenp1s0.hosts/web-arm/configuration.nix.docs/adr/0011-podman-ipv6-egress-via-nat66.mdrecords the decision.Egress-only, opt-in via
--network=v6egress.collaboraandrustdesk-serverstay on the default bridge, untouched. The real container that needs this is delivered separately; this ships only the reusable network.Why NAT66/ULA (not a routed GUA prefix)
Egress-only (no inbound surface), no Hetzner-side work, and it doesn't touch the host
/64from #81. A routed GUA sub-prefix would need an NDP proxy or a second Hetzner/64and would re-home the on-link host/64. Podman is kept (nooci-containers.backendflip). See ADR 0011.Verification
:: web-arm OK).podman run --rm --network=v6egress docker.io/curlimages/curl -6 -s https://ifconfig.co→2a01:4f8:c012:43b::1(NAT66 source confirmed)podman run --rm --network=v6egress docker.io/curlimages/curl -6 -sS -o /dev/null -w '%{http_code}\n' 'https://[2606:4700:4700::1111]'(orping6a global v6) → reaches a v6-only targetcollabora/rustdesk-serverstill serve; hostcurl -6andpostconf smtp_address_preference(=ipv4) unchangedCloses #85