feat(mesh): selective masquerade — exit nodes AND site-to-site source preservation both work

This commit is contained in:
vh
2026-09-06 00:16:18 -07:00
parent b846a7c870
commit 7ce398f069
2 changed files with 20 additions and 3 deletions
@@ -27,7 +27,7 @@ follow-ups in `docs/pfi/headscale-mesh-plan.md` § CUTOVER EXECUTED. Headlines:
## Exit nodes (2026-09-06, operator-requested)
All three routers advertise+serve exit nodes (approved). Clients pick location:
`tailscale set --exit-node=nh3-scale|esh-scale|ana-scale`. NH3 = residential egress
(70.230.226.88) → replaces the nh3-dev SOCKS5 proxy. ⚠ Enabling exit nodes REQUIRED flipping
`--snat-subnet-routes=true` (reversed the source-preserving NoSNAT); cross-site traffic now
shows the router IP as source. A node advertising an exit node can't consume one — test from
(70.230.226.88) → replaces the nh3-dev SOCKS5 proxy. Exit nodes + source preservation BOTH work via a selective-masquerade rule (NoSNAT kept true;
`mesh-exit-masq.service` per router masquerades only internet-bound exit traffic, RETURNs fleet
dests). Verified: colo sees real NH3 host; nh3-dev via colo exit → egress 38.120.12.42. A node advertising an exit node can't consume one — test from
the laptop/iPad, not the routers.