find the push button tailnet airgap mode #419
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/infrastructure#419
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?
Goal (stated precisely so the goose does not chase the wrong feature)
A one-flip mode where a chosen dev device can reach only tailnet peers and not the public internet, to force/prove airgapped dev. The goose must name the exact Tailscale mechanism, rule out the look-alikes below, and implement the toggle in this repo's Tailscale-as-code.
Candidate mechanisms (research against current tailscale.com docs and confirm)
autogroup:internet. Public-internet egress through Tailscale is governed by ACL grants to exit nodes /autogroup:internet. Define atag:airgap, and write an ACL grant that letstag:airgapreach only tailnet destinations (other tags / tailnet CIDRs) and explicitly notautogroup:internet. Flipping airgap = tag the devicetag:airgapand apply. This is the "push button."tailscale up --shields-up. Blocks incoming connections only. Airgap is about outgoing egress, so this is NOT it - call it out so the next person does not waste time.Implementation (this repo already manages Tailscale as code)
terraform/tailscale/main.tfas thetailscale_acl.policyresource (jsonencode'd - one source of truth). Device tags live interraform/tailscale/devices.yaml(existing tags:tag:kais-macbook-pro,tag:kai-tower-3026, ...).tag:airgapand the tailnet-only grant to the ACL, apply withward terraform-tailscale action=apply(verb in.ward/ward.yaml; dump current policy withward dump-tailscale-acl).docs/tailnet-airgap.md: how to put a device into airgap (addtag:airgap, apply) and take it out, plus a connectivity test (tailnet peer reachable,curl https://example.comfails).Honest caveat the doc MUST state
The Tailscale control plane is itself public SaaS - coordination/key exchange still traverses the internet. So an ACL airgap restricts data egress, not the control channel. Full control-plane airgap needs Headscale (a separate, larger effort). Do not overclaim "fully airgapped."
Acceptance
docs/tailnet-airgap.mdnames the exact Tailscale feature, rules out the red herrings, and states the control-plane caveat.tag:airgap+ tailnet-only ACL grant implemented interraform/tailscale/, applied and verified (ward dump-tailscale-aclshows it; an airgap-tagged device reaches tailnet peers but not the public internet).Files
terraform/tailscale/main.tf,terraform/tailscale/devices.yaml, newdocs/tailnet-airgap.md. Related: #418 (audit), #417 (secrets airgap).