No description
Makes the template self-service: someone can hand the runbook to Claude with the filled-in values and get a customer-specific version back. Includes an intake checklist (identity/DNS/network/ops), a generic-value -> meaning -> customer-value map, and a ready-to-paste prompt. Bumped to v2.3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .gitignore | ||
| headscale_entra_lab_runbook.md | ||
| README.md | ||
headscale-entra-runbook
A production-oriented deployment runbook for a self-hosted Headscale remote-access stack authenticated with Microsoft Entra ID (OIDC + MFA), managed through the Headplane web UI, and fronted by Caddy for HTTPS.
The full procedure lives in headscale_entra_lab_runbook.md — build it top to bottom to stand up the environment from scratch, including validation, rollback, backup, firewall, DNS, authentication, and hardening steps.
What this deploys
- HS01 — Headscale control plane + public HTTPS endpoint (Caddy, Headplane web UI)
- HSRTR01 — dedicated Tailscale subnet router advertising only authorized internal routes
- Microsoft Entra ID as the OIDC identity provider, with MFA (Security Defaults or Conditional Access / P1)
- Headplane web UI for day-to-day management (nodes, routes, users, keys, DNS, and ACL/grants in database mode)
- Remote Windows Tailscale clients reaching approved internal resources over WireGuard
Stack (verify current versions at build time)
Ubuntu Server 26.04 LTS · Headscale · Tailscale · Caddy · Headplane · Microsoft Entra ID (OIDC v2.0)
How to use
- Read §0–§2 for versions, placeholders, and architecture.
- Fill in the placeholder table (§1) with the target environment's values.
- Work through the numbered sections in order.
- Sign off against the acceptance checklist (§27).
Security notes
- The runbook uses placeholders (
<TENANT_ID>,<CLIENT_ID>,<CLIENT_SECRET>,<TEST_RDS_IP>, etc.). Do not replace them with real secrets in a committed copy. - Never commit deployed configs, secrets, API keys, cookie secrets, databases, or backups — see
.gitignore. - This is a template. For a specific engagement, keep the real per-customer values in a separate private location, not in this repo.
- Recommended: keep this repo private; it contains internal network topology and design detail.
Layout
headscale_entra_lab_runbook.md # the runbook (primary deliverable)
README.md # this file
.gitignore # keeps secrets / business docs / DBs out