WireGuard overlay for NAT traversal (Phase 2, Slice 1) #9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/wireguard-overlay"
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?
Phase 2, Slice 1: connect the two Pis through NAT using a WireGuard overlay relayed through a public hub, with no app code changes —
peer_hostjust becomes an overlay IP.What this adds
PLAN.md,DECISIONS.md): WireGuard data plane + Django control plane, hub-and-spoke topology, on-device keygen, pre-shared per-device token enrollment.wireguard/): config templates + a by-hand runbook;.gitignoretracks only the.exampletemplates (rendered configs hold private keys).scripts/wg_setup.sh,scripts/wg_node.sh,Makefile): bring nodes up one at a time over SSH —make wg-hub,make wg-pi NAME=pi-a,make wg-pi NAME=pi-b,make wg-status. Keys are generated on each node; only public keys are fetched, so private keys never traverse the network.Hardening surfaced during bring-up
ListenPortis persisted in state, so a laterwg-pi(which re-renders the hub) does not revert it to a default that clashes with another overlay on the shared host.wg0<->wg0FORWARD accept — the shared host defaults that policy toDROP(Docker/NetBird), so spoke↔spoke relay was silently dropped.wg syncconfinstead of a restart, so adding/repointing a node does not drop live spokes or a call in progress.ip_forwardis left enabled on tunnel-down (other overlays on the shared host depend on it).Verification status
🤖 Generated with Claude Code