HoloRouter 9.1 Built-in Services Deep Dive — Vault, Authentik SSO, Technitium DNS, and the Authenticated Webtop Behind the HTTPS Reverse Proxy
Objectives
- Map the complete HoloRouter 9.1 service topology: which services exist, their direct ports (8200/9443/5380/30000), their vcf.lab FQDNs, and how the HTTPS reverse proxy fronts all of them
- Administer Technitium DNS through its web console (:5380): zones, records, DHCP scopes, and upstream forwarders — and verify whether the 9.0-era upstream-forwarder gap is resolved by the dnsmasq-to-Technitium supersession
- Authenticate to HashiCorp Vault (:8200) with the documented root token, inventory its secrets engines, and trace the automated-certificate relationship between Vault, the internal CA (ca.vcf.lab), and the reverse proxy
- Explore Authentik SSO (:9443) as an OIDC/SAML/SCIM 2.0 identity provider, resolve the documented admin-username discrepancy on your live appliance, and bootstrap it with Initialize-Authentik
- Use the authenticated Webtop (:30000) and characterize its two access paths — proxied HTTPS FQDN versus direct-port HTTP bypass — as a security observation
- Contrast the 9.1 service model against the 9.0-era dnsmasq/FRR/flat-credential model it supersedes, producing a defense-ready comparison table for secrets, identity, DNS, and transport security
Prerequisites
HoloRouter 9.1 deployed with the GitOps stack provisioned and all four documented service ports answering over HTTPS (holodeck91-02 completed through its Task 3 liveness checks; snapshot 'holodeck91-02-complete' exists). A nested VCF estate is NOT required for Tasks 1-5; the Set-VCFSSOConfiguration half of Task 4 additionally requires a deployed Site A instance with VCF Operations reachable (holodeck91-03) and is explicitly marked deferrable if you have not deployed yet. Operator workstation must be able to use the HoloRouter as its DNS server (temporarily) to exercise FQDN-based service access.
Prior labs: holodeck91-02
Required skills:
- Holodeck 9.1 HoloRouter deployment and reverse-proxy access pattern (holodeck91-02)
- The 9.0-era HoloRouter service model — dnsmasq, FRR, config.json credentials, open Webtop (holodeck-04) — this lab constantly contrasts against it
- Reading TLS certificates in a browser (issuer, SAN, chain) and importing a root CA
- DNS fundamentals: zones, A/PTR records, forwarders, conditional forwarding
- Conceptual familiarity with secrets managers (Vault) and identity providers (OIDC, SAML, SCIM) — hands-on experience not assumed
- Basic kubectl usage (the router hosts services on a single-node Kubernetes cluster)
Lab Environment
Single HoloRouter 9.1 appliance (6 vCPU / 12 GB / 75 GB, per the official 9.1 sizing) carrying the full infrastructure service stack. All services run HTTP internally and are exposed over HTTPS by the reverse proxy at stable vcf.lab FQDNs; direct ports remain reachable for four of them. The official docs state the service domain is ALWAYS vcf.lab regardless of any custom -DNSDomain — only nested VCF component FQDNs follow the custom domain. Services: HashiCorp Vault (vault.vcf.lab / :8200, secrets + automated certificates), Authentik SSO (auth.vcf.lab / :9443, OIDC/OAuth2/SAML 2.0/SCIM 2.0), Technitium DNS (dns.vcf.lab / :5380, replaces dnsmasq), Certificate Authority (ca.vcf.lab, certsrv extension emulating AD Certificate Services with a Vault backend), Webtop (webtop.vcf.lab / :30000, now authenticated), plus GitLab (gitlab.vcf.lab) and its registry when GitOps is enabled. Authentik runs inside the router's single-node Kubernetes cluster, deployed as part of Set-HoloRouter.
graph TB WS[Operator Workstation<br/>DNS -> HoloRouter] -->|HTTPS 443| RP[Reverse Proxy on HoloRouter 9.1<br/>automated SSL via internal CA] RP --> VAULT[Vault<br/>vault.vcf.lab / :8200] RP --> AUTH[Authentik SSO<br/>auth.vcf.lab / :9443] RP --> DNS[Technitium DNS<br/>dns.vcf.lab / :5380] RP --> WT[Webtop authenticated<br/>webtop.vcf.lab / :30000] RP --> CA[Certificate Authority<br/>ca.vcf.lab - certsrv + Vault backend] RP --> GL[GitLab - if GitOps enabled<br/>gitlab.vcf.lab] VAULT -.->|issues certs| CA CA -.->|automated SSL| RP AUTH -.->|OIDC + SCIM sync| OPS[VCF Operations ops-a.site-a.vcf.lab<br/>requires holodeck91-03 estate]
IP Addressing
| Network | Purpose | VLAN |
|---|---|---|
HoloRouter external management IP | All service access (FQDN via reverse proxy, or direct ports 8200/9443/5380/30000). This is also the DNS server IP your workstation should use for vcf.lab FQDN resolution. | External management port group (as mapped in holodeck91-02 Task 2) |
10.1.0.0/20 | Site A supernet the Technitium zones describe (site-a.vcf.lab). Present in DNS even before the nested estate is deployed. | Site A VLANs 0, 10-25 (9.1 documented defaults) |
Credentials
| System | Username | Password |
|---|---|---|
| HashiCorp Vault (vault.vcf.lab / :8200) | (token auth — no username) | Root token is the documented Holodeck master password (doubled form). Source: official 9.1 docs credential matrix. Treat the root token as bootstrap-only; note every place you end up using it. |
| Authentik SSO (auth.vcf.lab / :9443) | akadmin per the 9.1 Getting Started page; admin per the 9.1 Release Notes page — a documented discrepancy you resolve on your live appliance in Task 4 | Documented master password (doubled form) |
| Technitium DNS (dns.vcf.lab / :5380) | admin | Documented master password (doubled form) |
| Webtop (webtop.vcf.lab / :30000) | admin | Documented master password (doubled form). Webtop is authenticated in 9.1 — the 9.0-era open-access model is gone. |
| GitLab (if GitOps enabled) | root | Documented master password (doubled form) |
| HoloRouter (SSH) | root | Set during OVA deployment in holodeck91-02 — no product default exists |
Tasks
Task 1 Map the reverse proxy and the full service topology
securityBefore administering any single service, establish the access architecture they all share. The 9.1 model has three layers that did not exist in 9.0: a reverse proxy terminating HTTPS, an internal CA issuing its certificates automatically, and a DNS dependency (your console must use the HoloRouter as its DNS server for FQDN access). A VCDX panelist reviewing 'HTTPS everywhere' will ask what actually terminates TLS, who issues the certificates, and what breaks when DNS is wrong — this task gives you first-hand answers.
Point your workstation's DNS at the HoloRouter external management IP (or run lookups explicitly against it: nslookup vault.vcf.lab <holorouter-mgmt-ip>). Resolve all documented service FQDNs: vault.vcf.lab, auth.vcf.lab, dns.vcf.lab, webtop.vcf.lab, ca.vcf.lab, and (if GitOps is enabled) gitlab.vcf.lab and gitlab-registry.vcf.lab.
Confirm the dual access model for the four port-published services. For each, test both paths from a browser or curl: https://vault.vcf.lab and https://<holorouter-mgmt-ip>:8200; https://auth.vcf.lab and https://<holorouter-mgmt-ip>:9443; https://dns.vcf.lab and https://<holorouter-mgmt-ip>:5380; https://webtop.vcf.lab and the direct port :30000.
Inspect the TLS certificate on two proxied FQDNs (e.g. vault.vcf.lab and dns.vcf.lab): issuer, subject/SANs, validity period, and whether both chain to the same issuing CA.
Visit the Certificate Authority endpoint: https://ca.vcf.lab. The docs describe a certsrv extension emulating AD Certificate Services with a Vault backend. Explore what it offers (root CA download, certificate request forms) and download the root CA certificate.
Import the downloaded root CA into your workstation trust store (Windows: certmgr.msc > Trusted Root Certification Authorities; macOS: Keychain 'Always Trust'; Linux: /usr/local/share/ca-certificates + update-ca-certificates). Close and reopen the browser, then revisit two service FQDNs.
Build the service topology table in your findings log: [Service, FQDN, Direct port, Protocol on direct port, Auth model, Cert issuer, Runs where (verify with kubectl in Task 4)]. Seed it with the seven documented rows (Vault, Authentik, Technitium, Webtop, CA, GitLab, GitLab Registry).
Validation Gate
Check: All documented FQDNs resolve via the HoloRouter; every service answers on both its FQDN and (where published) its direct port; root CA imported and at least two services load warning-free; topology table drafted.
Expected: Access architecture fully characterized: proxy, CA, DNS dependency, and the FQDN-vs-port duality all evidenced in the findings log.
Common Errors
Task 2 Technitium DNS deep dive — and the dnsmasq supersession test
manageabilityTechnitium replacing dnsmasq is the most operationally consequential service change in 9.1: the official docs deprecate the HolodeckDNSConfig PowerShell cmdlets outright and declare the Technitium web UI the sole DNS management surface going forward. This task makes you fluent in that surface AND settles a question your own 9.0-era notes left open: the old router shipped without upstream forwarders (the documented one-time fix that Set-HoloRouter kept re-breaking). Does the 9.1 stack resolve that class of problem, or merely relocate it?
Log in to the Technitium console at https://dns.vcf.lab (or :5380) as admin with the documented master password. Take inventory of the dashboard: query volume, blocked queries, configured zones.
Open the vcf.lab zone and enumerate its records. Confirm the service FQDNs from Task 1 (vault, auth, dns, webtop, ca, gitlab) exist as records pointing at the router. Then open the site-a zone and note what is pre-provisioned for the nested estate (the 9.0 track pre-provisioned roughly 160 component records — check the 9.1 equivalent).
THE SUPERSESSION TEST. Check Settings > Proxy & Forwarders (and the general recursion settings) for upstream forwarders. Then, from your workstation using the router as DNS, resolve an external name: nslookup broadcom.com <holorouter-mgmt-ip>.
If external resolution failed in step 3, configure forwarders in the Technitium UI (Settings > Proxy & Forwarders; use your lab's upstream DNS or public resolvers), save, and re-test. Then — critically — determine persistence: reboot the HoloRouter (or re-run Set-HoloRouter if you are prepared to accept its risks on a dedicated host) and check whether your forwarder setting survives.
Inspect DHCP: Technitium manages DHCP scopes in the same UI (the docs state DNS zones, records, AND DHCP scopes are now fully managed through the Technitium web UI). Enumerate configured scopes and map them to the Holodeck subnets you know from the 9.0 track.
Confirm the deprecation on the toolkit side: on the router in pwsh, run Get-Command DNSConfig and Get-Help Set-HoloRouter. Then check whether the old dnsmasq artifacts remain: ls /holodeck-runtime/dnsmasq/ and kubectl get pods -A | grep -i dns (kubeconfig at /etc/kubernetes/admin.conf).
Create and delete one test record to prove the management surface: add an A record test-91-04.vcf.lab pointing at the router IP, resolve it from your workstation, then delete it and confirm NXDOMAIN.
Validation Gate
Check: Technitium console administered: zone and record inventory logged, forwarder/supersession test executed with a recorded verdict, DHCP scopes enumerated, DNS cmdlet deprecation confirmed, dnsmasq-remnant check performed, test record round-trip complete.
Expected: Fluency in the sole supported 9.1 DNS management surface, plus an evidence-backed answer to whether the 9.0-era upstream-forwarder problem class is closed.
Common Errors
Task 3 HashiCorp Vault — secrets management and the automated certificate chain
securityVault on the router is the architectural answer to the 9.0 era's flat-credential model, where every password lived in config.json and every service shared the same doubled master password in plaintext files. This task establishes what the 9.1 appliance actually uses Vault FOR (the docs say secrets management plus automated certificate provisioning for all services), how its trust is bootstrapped, and — honestly — how far the lab implementation still is from production secrets discipline, since the documented root token IS the master password.
Query Vault's health without authenticating: curl -k https://<holorouter-mgmt-ip>:8200/v1/sys/health (or browse it). Record the JSON verbatim: initialized, sealed, version.
Log in at https://vault.vcf.lab using Token auth with the documented root token (the doubled master password, per the official 9.1 credential matrix — no username).
Inventory the secrets engines and auth methods: in the UI (or via CLI: vault secrets list and vault auth list if the vault binary is available on the router). Identify a PKI engine (certificate automation) and any KV engines holding Holodeck-related secrets.
Trace the certificate chain end to end: in the PKI engine, find the issuing CA and compare its certificate against (a) the root CA you downloaded from ca.vcf.lab in Task 1 and (b) the issuer of the reverse proxy's service certificates.
Exercise the secrets surface safely: create a KV secret of your own (e.g. path holodeck-lab/findings, key test, a harmless value), read it back via UI and via API (curl with the token header), then delete it.
Review Vault's operational posture on the appliance: audit devices enabled? (vault audit list or UI), storage backend, and what happens to Vault across a router reboot — reboot if your window allows and re-check seal state and data.
Validation Gate
Check: Vault health and version captured; root-token login performed; engine inventory recorded; certificate chain traced from PKI engine through ca.vcf.lab to the proxy certs; KV secret round-trip via UI and API; operational posture (audit, seal-after-reboot) logged or explicitly deferred.
Expected: Concrete understanding of what 9.1 uses Vault for, evidenced end to end — plus a sharply documented gap list between the lab's Vault posture and production secrets discipline.
Common Errors
Task 4 Authentik SSO — identity, SCIM, and the Initialize-Authentik bootstrap
securityThe 9.0 lab had no identity layer at all: every service had its own local admin and the same password. Authentik gives the 9.1 lab a real IdP speaking OIDC, OAuth2, SAML 2.0, and SCIM 2.0 — and the new Initialize-Authentik / Set-VCFSSOConfiguration cmdlet pair wires it into VCF SSO with SCIM provisioning. For a VCDX candidate this is a scaled-down rehearsal of enterprise identity design: one authority, federated applications, automated user lifecycle. It also carries a documented ambiguity (admin username) that you resolve empirically.
Resolve the documented credential discrepancy: attempt login at https://auth.vcf.lab first as akadmin (per the 9.1 Getting Started page), then as admin (per the 9.1 Release Notes page), with the documented master password.
Tour the admin interface: Directory > Users and Groups (what exists at bootstrap?), Applications > Providers and Applications (is anything pre-wired?), and System > Brands/Tenants.
Verify where Authentik runs: SSH to the router and inspect the single-node Kubernetes cluster — export KUBECONFIG=/etc/kubernetes/admin.conf; kubectl get pods -A. Identify the Authentik pods (server/worker and any bundled database/cache) and note their restart counts and resource requests.
Study the bootstrap cmdlet before running it: Get-Help Initialize-Authentik -Full on the router. Per the 9.1 docs it takes -AdminPassword, -Site, -UserPassword, and -BootstrapToken (all mandatory), creates the VCF Administrators group and the admin@vcf.lab user, registers the holodeck OIDC provider, binds it to the vcf application, and RETURNS an OIDC provider object (client ID + secret).
Run the bootstrap and capture the returned object: $oidcProvider = Initialize-Authentik -AdminPassword '<authentik-admin-pw>' -Site a -UserPassword '<chosen-pw>' -BootstrapToken 'holodeck'. Then re-inspect the Authentik UI: Directory (VCF Administrators group, admin@vcf.lab user) and Applications (holodeck provider bound to the vcf application).
IF a deployed Site A estate exists (holodeck91-03 completed): complete the SSO integration with Set-VCFSSOConfiguration -Site a -Username admin -Password '<vcf-ops-admin-pw>' -BootstrapToken 'holodeck' -oidcProvider $oidcProvider. Per the docs this creates the SSO realm in VCF Operations, registers Authentik as OIDC/SCIM IdP, generates a SCIM sync token, triggers the initial SCIM sync, and assigns vcf_administrator to the synced group. Then log in to https://ops-a.site-a.vcf.lab as admin@vcf.lab. IF no estate exists yet: mark this step deferred, and revisit after holodeck91-03.
If step 6 ran: inspect the SCIM linkage from both ends. In Authentik, find the SCIM provider/mapping created for VCF; in VCF Operations, find the synced user and group and confirm the role assignment came from the sync rather than manual creation.
Validation Gate
Check: Admin username discrepancy resolved empirically; bootstrap baseline and post-Initialize-Authentik diff recorded; Authentik located in the router K8s cluster; OIDC provider object captured (names only); Set-VCFSSOConfiguration either completed with a working admin@vcf.lab login and two-sided SCIM evidence, or explicitly deferred pending holodeck91-03.
Expected: Working, evidenced understanding of the 9.1 identity layer from IdP bootstrap through (optionally) SCIM-provisioned VCF SSO.
Common Errors
Task 5 The authenticated Webtop — and the proxy-bypass observation
securityWebtop is the smallest service but carries a disproportionate security lesson. On 9.0 it was an open, unauthenticated browser desktop with implicit full access to the nested estate — a bastion host with no door. 9.1 puts authentication on it and ships Firefox pre-loaded with bookmarks and saved passwords for every nested component. The docs ALSO note the direct port bypasses the proxy over plain HTTP. Characterizing that honestly — hardened front door, documented side door — is precisely the kind of finding a panel expects an architect to surface unprompted.
Access Webtop by the designed path: https://webtop.vcf.lab. Authenticate as admin with the documented master password.
Inside Webtop, open Firefox and inspect what ships preconfigured: bookmarks for the nested VCF component URLs, and Settings > Passwords for the saved credential set (a documented 9.1 convenience feature).
Test the documented bypass: from your workstation, open http://<holorouter-mgmt-ip>:30000 (the docs explicitly note this direct path bypasses the proxy). Record protocol, whether authentication still gates access, and any warning behavior.
From inside Webtop, verify its operational role for later labs: resolve and reach the service FQDNs (vault.vcf.lab, dns.vcf.lab) and — if an estate exists — a nested component URL. Webtop sits inside the pod network, so it reaches things your workstation may not.
Check the known Webtop defect: if you encounter the error 'Cannot read properties of undefined (reading lastActiveAt)', you have hit the open 9.1 issue; record the exact reproduction and continue via a fresh session.
Validation Gate
Check: Webtop reached via authenticated proxied FQDN; auth layer identified (or marked verify_live); Firefox bookmark/password preload confirmed; direct-port bypass behavior characterized with protocol and auth status; in-pod reachability proven; known-issue status recorded.
Expected: Complete picture of the authenticated Webtop as both hardened bastion and credential concentration point, including the honest characterization of the direct-port path.
Common Errors
Task 6 Consolidate: the 9.0-vs-9.1 service model comparison and control-plane snapshot
manageabilityThe raw material from Tasks 1-5 becomes defense material only when consolidated into explicit before/after architecture statements. This task produces the comparison table you will actually use in a design discussion — secrets, identity, DNS, transport, access — each row backed by something you observed, then protects the now-fully-explored control plane with a snapshot.
Build the supersession table with one row per concern, columns [Concern, 9.0 model, 9.1 model, Evidence (task/step), Gaps remaining]: Secrets (config.json flat files -> Vault, but root token = master password), Identity (per-service local admins -> Authentik OIDC/SCIM, pending Webtop auth-layer finding), DNS (dnsmasq files + deprecated cmdlets -> Technitium UI/API, forwarder-persistence finding), Certificates (per-service self-signed -> internal CA + Vault PKI + automated proxy certs), Transport (mixed HTTP -> HTTPS everywhere via proxy, minus the :30000 bypass finding), Bastion access (open Webtop -> authenticated Webtop with credential preload).
Reconcile the open questions you carried in from holodeck91-02 Task 6: Technitium/dnsmasq coexistence (closed by your Task 2 step 6 evidence?), Authentik default credentials (closed by Task 4 step 1?). Update each with closed/open status and evidence links.
Store the credentials and secrets discipline artifacts properly: the admin@vcf.lab password and any tokens you generated go into the Vault KV engine (Task 3), NOT into your findings log. The findings log records retrieval mechanisms and paths only.
Snapshot the router: prefer a clean guest shutdown, then Get-VM -Name '<holorouter-91-vm-name>' | New-Snapshot -Name 'holodeck91-04-complete' -Description 'Service stack explored: Technitium forwarders set, Authentik bootstrapped, CA trusted, findings logged' -Memory:$false. Power on and verify one service (e.g. Technitium login and your forwarder setting intact) after boot.
Validation Gate
Check: Six-row supersession table complete with evidence and gaps; carried open questions reconciled; secrets stored in Vault with only mechanisms in the log; snapshot 'holodeck91-04-complete' taken and boot-verified.
Expected: Defense-ready before/after architecture record and a protected control plane reflecting all of this lab's configuration.
Common Errors
Final Validation
Every built-in service on the HoloRouter 9.1 has been explored, validated, and used: the reverse proxy and internal CA characterized with the root CA trusted; Technitium DNS administered through its sole supported surface with the dnsmasq supersession and forwarder-persistence questions answered empirically; Vault authenticated, inventoried, and traced through the automated certificate chain; Authentik bootstrapped via Initialize-Authentik (and optionally wired into VCF SSO with SCIM); the authenticated Webtop used and its direct-port bypass honestly characterized. The consolidated 9.0-vs-9.1 supersession table, with evidence and remaining gaps, is the lab's defense artifact.
✓ All service FQDNs resolve via the router; services answer on FQDN and documented direct ports (8200/9443/5380/30000) → Full topology table with observed protocol and auth per path
✓ Root CA from ca.vcf.lab imported; service UIs load without certificate warnings → Trusted chain: Vault PKI -> internal CA -> proxy certificates, as observed
✓ Technitium: zones/records/DHCP inventoried, forwarder test verdict recorded, DNS cmdlet deprecation and dnsmasq-remnant check done → Evidence-backed answer to the 9.0-era DNS gap under 9.1
✓ Vault: version and seal state captured, engines inventoried, KV round-trip via UI and API → Working secrets surface, documented root-token caveat
✓ Authentik: admin username resolved empirically, Initialize-Authentik run with before/after diff; Set-VCFSSOConfiguration done or explicitly deferred → Bootstrapped IdP; SCIM-provisioned VCF SSO if estate exists
✓ Webtop: authenticated access proven, credential preload noted, :30000 bypass characterized → Honest two-path security characterization
✓ Snapshot 'holodeck91-04-complete' boot-verified; supersession table complete → Protected control plane and defense-ready comparison artifact
Cleanup / Restore
Snapshot: holodeck91-04-complete
• Snapshot the HoloRouter as 'holodeck91-04-complete' after clean shutdown (done in Task 6)
• Revert your workstation DNS to its normal configuration (or leave a vcf.lab conditional forwarder in place and document it) — do not leave the lab router as your primary resolver
• Remove the test DNS record and test Vault secret if any exploration artifacts remain (Tasks 2 and 3 round-trips should have cleaned themselves — verify)
• Sign out of all service UIs; do not leave the Vault root token session or Authentik admin session open in a browser
• File the supersession table and findings log with your VCDX evidence; update the team's 9.0-era DNS-fix and shared-router notes with your 9.1 findings (as 9.1-scoped annotations — never overwrite the 9.0 content)
• If on a shared host, brief co-tenants on any router-level changes you made (forwarders, iptables reorder) since router state is shared blast radius until proven otherwise under 9.1
Design Reflection (VCDX)
This lab hands a candidate three defensible architecture narratives, each with a trap for the unwary. (1) SECRETS: the move from flat config.json credentials to Vault is the right architectural direction — centralized storage, API access, audit capability, PKI automation — but the lab implementation bootstraps Vault with a root token equal to the well-known master password.
A panelist will let you praise Vault and then ask 'so what is your effective secret hierarchy?' The strong answer acknowledges that a secrets manager whose root credential is the universal password provides secrets MANAGEMENT without secrets ISOLATION, and describes the remediation path (rotate root, per-consumer AppRole/policy scoping, audit devices on). (2) IDENTITY: Authentik with OIDC and SCIM provisioning replaces per-service local admins with a single authority and automated lifecycle — the enterprise pattern in miniature.
The probe is failure-mode reasoning: the IdP lives on the same single appliance as DNS, secrets, and the deployment pipeline, so identity availability is now coupled to the lab's entire control plane; also note which services genuinely federate versus which retain local admin back doors (your Webtop auth-layer finding), because a directory that covers 80% of services changes operations less than it appears to.
(3) DNS SUPERSESSION: Technitium replacing dnsmasq is a study in how platforms retire operational surface — the cmdlets are deprecated, the UI/API is the sole surface, and your forwarder-persistence test determines whether the old failure class died or moved. The general lesson to articulate: when a platform supersedes a component, the architect's job is to re-verify every workaround and operational assumption attached to the old component, then formally retire them — carrying a dnsmasq-era runbook into a Technitium-era environment is drift in documentation form.
Across all three, the meta-point a panel rewards: 9.1 hardened the front doors (HTTPS, authentication, SSO) while the side doors (direct ports, root tokens, preloaded passwords) remain — and you found them yourself.
Requirements
- All HoloRouter services must be reachable over HTTPS at stable vcf.lab FQDNs with certificates chaining to a single importable root CA
- DNS for both the service zone (vcf.lab) and nested-estate zones must be manageable through a supported surface, including upstream forwarders that persist across router lifecycle operations
- Secrets generated during lab operation (SSO passwords, tokens) must be stored in Vault, not in flat files or findings logs
- Identity for VCF Operations must be provided by Authentik via OIDC with SCIM-provisioned users and groups (once an estate exists)
- Interactive access to the pod network must require authentication (Webtop), with the unproxied access path explicitly characterized rather than ignored
Constraints
- The service domain is fixed at vcf.lab regardless of -DNSDomain — only nested component FQDNs follow a custom domain (documented 9.1 behavior)
- The DNS cmdlet family (Get/Set/Remove-HoloDeckDNSConfig) is deprecated and unsupported; Technitium UI/API is the sole DNS management surface
- All services share one appliance (6 vCPU / 12 GB): one failure domain and one resource ceiling for secrets, identity, DNS, CA, bastion, and pipeline
- Official 9.1 docs carry internal discrepancies (Authentik admin username differs between pages; Set-HoloRouter description still references dnsmasq) — every such point must be field-verified before entering design documentation
- Community KB for the 9.1 service stack is embryonic: three relevant GitHub issues (#139 proxy firewall, #142 Webtop, #65 CA trust) and no forum corpus — novel failures have no external answers yet
- Shared-host router operations remain governed by the unresolved 9.0-era destructiveness question until explicitly re-validated under the Technitium/proxy model
Assumptions
- Documented default credentials (master password in doubled form across services, Vault root token) match the GA build — verified empirically per service during this lab
- The reverse proxy and internal CA are provisioned functional by first boot, modulo the known iptables rule-ordering issue
- Technitium serves all runtime DNS on the 9.1 appliance (dnsmasq remnants, if present, are inert) — tested in Task 2 rather than assumed
- Initialize-Authentik and Set-VCFSSOConfiguration are safe to run once each on a fresh appliance; idempotency on re-run is undocumented and not assumed
- Snapshot-based recovery from clean shutdown restores all stateful services (Vault, Authentik, GitLab) to a consistent state
Risks
- Control-plane concentration deepens: secrets + identity + DNS + CA + bastion + pipeline on one 12 GB appliance — IMPACT: a single failure simultaneously removes authentication, name resolution, secret retrieval, and deployment capability; MITIGATION: boot-verified snapshots after every configuration milestone, documented rebuild-from-OVA path, findings log as the rebuild reference
- Root-token-as-master-password: the secrets manager's highest credential is the universally known lab password — IMPACT: Vault provides no effective isolation; anyone with the lab password owns every secret it will ever hold; MITIGATION: document as a known lab-vs-production gap; optionally rotate the root token and create scoped policies as an extension, recording the procedure
- Credential concentration in Webtop: preloaded Firefox passwords make one authenticated desktop the key to the entire nested estate — IMPACT: Webtop credential compromise = estate compromise; MITIGATION: treat the Webtop password with master-password discipline; characterize and, if possible, restrict the :30000 bypass path
- DNS single-authority failure: Technitium down means service FQDNs, nested-estate resolution, and (if scoped) DHCP all fail together — IMPACT: broad outage with confusing symptoms (everything 'unreachable'); MITIGATION: know the direct-port access paths as break-glass, monitor the DNS pod/service, snapshot before DNS changes
- Docs-vs-build divergence: acting on a documented value that differs on the GA build (admin username, credential defaults, dnsmasq remnants) — IMPACT: fabricated documentation that fails defense scrutiny or misleads the team; MITIGATION: the lab's verify-live discipline — every doc claim exercised empirically before entering the findings log
- Deprecated-surface drift: 9.0-era DNS automation or runbooks reused against a 9.1 router — IMPACT: scripts fail or, worse, partially apply; MITIGATION: formal retirement of the DNS cmdlet runbooks for 9.1 environments, replaced by Technitium API equivalents, with version-scoped documentation kept separate per the coexistence policy
Self-Assessment Discussion Prompts
- The 9.0 model stored every credential in config.json; 9.1 ships Vault whose root token is the same master password. Argue whether the security posture has actually improved, and specify the minimum set of changes that would make the Vault deployment meaningfully better than the flat files.
- Authentik gives the lab one identity authority — running on the same appliance as DNS, secrets, and the deployment pipeline. In production you would never co-locate these. Enumerate what you would separate first, second, and third, and justify the order with failure-mode reasoning.
- SCIM provisioning created admin@vcf.lab in VCF Operations from the IdP. Walk a panel through the deprovisioning story: an administrator leaves, you disable them in Authentik — what happens, how fast, and what residual access paths (local admins, saved Webtop passwords, Vault tokens) survive the deprovisioning?
- Technitium supersedes dnsmasq and the DNS cmdlets are deprecated. Describe your process for retiring the 9.0-era DNS runbooks: what do you re-verify, what do you rewrite, and how do you prevent a colleague from applying the old dnsmasq fix to a 9.1 router during an incident?
- The platform claims HTTPS everywhere, and you found the :30000 path that bypasses the proxy. How do you report a finding like this in a design document without either overstating it (it is a lab appliance) or burying it? Draft the exact risk statement you would write.
- The internal CA emulates AD Certificate Services with a Vault backend, and you imported its root into your trust store. What is the blast radius if that CA's key is compromised, and how does your answer differ between this lab and a production PKI with the same architecture?
- One appliance now carries six security-relevant services. A panelist asks: 'What is your monitoring minimum for this control plane?' Name the five signals you would watch and the failure each one catches first.
Extensions
Vault Hardening Pass
Rotate the Vault root token, enable an audit device, and create a scoped policy plus AppRole for a hypothetical pipeline consumer. Document each step and its effect on the deployment stack (does anything break when the root token changes? — that answer reveals what actually consumes Vault). This converts the lab's biggest documented gap into a practiced remediation.
harderFederate a Second Application Through Authentik
Wire one more service into Authentik yourself — e.g. protect Technitium or GitLab behind an Authentik OIDC/proxy provider. You built SSO consumption in the lab's guided path; building a federation yourself proves you understand providers, applications, and bindings rather than just the bootstrap cmdlet.
harderTechnitium API Automation
Recreate the retired DNS cmdlet capabilities against the Technitium HTTP API: scripted record create/read/delete and a forwarder-configuration function, with token-based auth stored in Vault. Produces the 9.1-era replacement for your team's 9.0 DNS automation and closes the deprecation gap with working code.
sameBreak the Control Plane on Purpose
With the holodeck91-04-complete snapshot proven, induce failures one at a time — stop the Technitium service, kill the Authentik pods, seal Vault — and record the symptom each produces from an operator's perspective (what LOOKS broken vs what IS broken). Builds the diagnostic index for a service stack with no community KB yet.
harderShared-Host Re-Validation Under the Service Stack
On a host carrying another Holodeck instance, run the coordinated experiment: does Set-HoloRouter on the 9.1 appliance still overwrite global DNS/routing state now that Technitium and the reverse proxy replaced dnsmasq/direct services? This closes the standing multi-tenant safety question your team has carried since the 9.0 era.
much harder⚠ Known Pitfalls (from Community KB)
References
- Holodeck 9.1 Documentation — Getting Started (services, FQDNs, credentials)Tier 1 — Official
Authoritative source for the service table (ports, FQDNs, credentials), the vcf.lab domain rule, the Technitium/dnsmasq supersession statement, and the Initialize-Authentik / Set-VCFSSOConfiguration cmdlets. Use the versioned /9.1/ URLs only — the un-versioned pages serve stale legacy content. - HoloDeck 9.1 Release Announcement (verbatim capture)
Holodeck-9.1/01-release-announcement.mdlocal fileTier 1 — Official
Primary capture for the four service ports (8200/9443/5380/30000), HTTPS-everywhere claim, and SCIM mention. - HoloDeck Toolkit 9.1 — Structured Reference & Changelog
Holodeck-9.1/02-structured-changelog.mdlocal fileTier 1 — Official
Carries the section 7 open questions this lab closes for Technitium/dnsmasq coexistence and Authentik defaults. - VCF 9.1 Release Intake — rn-9-1-017 (HoloRouter built-in services)
academy-v2/content/releases/vcf-9.1.jsonlocal fileTier 1 — Official
Canonical changelog entry for this lab: services behind the HTTPS reverse proxy, re-validation flags for the 9.0-era DNS fix and shared-router notes. - Holodeck GitHub Issues #139, #142, #65Tier 1 — Official
The three 9.1-relevant service-stack defects at authoring time: proxy 80/443 iptables ordering on first boot (#139, workaround provided), authenticated Webtop lastActiveAt error (#142, open), router-to-vCenter CA trust (#65, carried from 9.0 era). - holodeck-04 — External Access, DNS, and Routing Configuration (9.0 twin)
holodeck-04.jsonlocal fileTier 2 — VMware Press
The superseded model this lab contrasts against: dnsmasq/FRR, VMCA import workflow, bastion design exercise. Remains authoritative for 9.0.x routers. - HashiCorp Vault DocumentationTier 2 — VMware Press
Reference for secrets engines, auth methods, PKI engine, audit devices, and seal/unseal concepts used in Task 3 and the hardening extension. - Authentik DocumentationTier 2 — VMware Press
Providers, applications, SCIM provisioning, and the akadmin bootstrap convention referenced in Task 4. - Technitium DNS Server DocumentationTier 2 — VMware Press
Web console, HTTP API (used in the automation extension), forwarders, zones, and DHCP scope management. - SCIM 2.0 — RFC 7644 (System for Cross-domain Identity Management)Tier 3 — Expert Blog
The provisioning protocol behind the Authentik-to-VCF-Operations user sync — background for the identity design_reflection prompts.