Fix IPv6 reachability for ccnet-wv-mailcow (mail VM has no outbound IPv6 route) #19
Labels
No labels
blocked
borg-backup
ceph
forgejo
in-progress
infra
netdata
nextcloud
p:high
p:low
p:medium
searxng
service-onboard
swarm-nodes
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
copper/ccnet-prod-devops#19
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
The new DMZ-isolated mail VM (
ccnet-wv-mailcow, 10.10.50.10) has no globalIPv6 route at all — only link-local addresses and its own private docker
overlay (
fd4d:6169:6c63:6f77::/64). Confirmed 2026-07-09 viaip -6 route show(no default route) and by testingcurl -6from inside theacme-mailcowcontainer, which failed immediately with "Networkunreachable".
This was first flagged during Phase 4 of the mail migration (checking
whether the wg-box's public IPv6,
2a01:4ff:f0:f3d7::/64, is involved inmail sending/receiving) and deliberately deferred. It became a live blocker
during Phase 3/entry-into-service work: mailcow's own
acme-mailcowcontainer prefers AAAA over A whenever a AAAA record exists for
MAILCOW_HOSTNAME(mail.coppercore.cc, which now has a real public AAAArecord for Gmail's IPv6-PTR deliverability requirement, set in Phase 4) and
has no fallback to IPv4 if the IPv6 challenge path fails — so Let's Encrypt
issuance broke until worked around.
Current workaround (in place, not a real fix): added a local-zone
override in mailcow's own internal
unbound-mailcowresolver(
data/conf/unbound/unbound.confon the mail VM) that answersmail.coppercore.ccwith only the A record (178.156.194.104) and no AAAA,scoped entirely to DNS resolution inside the mailcow stack -- public DNS is
untouched. This unblocks ACME but doesn't give mailcow itself (Postfix,
Dovecot, etc.) any real IPv6 send/receive capability, and doesn't address
whatever else inside mailcow might expect real IPv6 reachability.
Planned real fix (not yet scheduled): route real IPv6 to the mail VM
over the existing WireGuard tunnel from the wg-box, so the DMZ mail VM has
genuine outbound/inbound IPv6 connectivity instead of the internal-resolver
workaround. Once that's in place, the unbound local-zone override above
should be removed.
Related: mail migration plan (Phase 3/4), docs/hetzner-vps.md.