Infrastructure Diagrams
Overview
All diagrams are maintained as separate D2 source files for maximum CI/CD scalability and maintainability.
modules/ROOT/images/diagrams/ ├── network-topology.d2 # Complete infrastructure ├── vlan-segmentation.d2 # Security zones ├── eaptls-authentication-flow.d2 # 802.1X flow ├── linux-auth-architecture.d2 # wpa_supplicant vs NetworkManager ├── identity-services.d2 # ISE/AD/Keycloak ├── infrastructure-overview.d2 # High-level overview ├── backup-flow.d2 # Backup workflow ├── pki-hierarchy.d2 # Certificate chain └── certbot-renewal-flow.d2 # Certbot automation
Infrastructure Overview
Full topology of Domus Digitalis infrastructure including security, PKI, wireless, compute, and switching layers.
| System | IP | Role |
|---|---|---|
pfSense-01 |
10.50.1.1 |
Firewall/Router |
ISE-02 (PAN) |
10.50.1.21 |
RADIUS/NAC (Primary Admin Node) |
Keycloak-01 |
10.50.1.80 |
SAML/OIDC IdP (Docker) |
home-dc01 |
10.50.1.50 |
AD DS / DNS (CA deprecated) |
certmgr-01 |
10.50.1.60 |
Vault PKI / Let’s Encrypt |
9800-CL-WLC |
10.50.1.40 |
Wireless Controller |
KVM-01 |
10.50.1.99 |
Hypervisor (supermicro300-9d1) |
NAS-01 |
10.50.1.70 |
Synology Backups |
iPSK-Mgr-01 |
10.50.1.30 |
iPSK Portal |
Backup Flow
Shows how netapi CLI commands flow from operator workstation through infrastructure systems to NAS storage.
# Full infrastructure backup
netapi ise backup --upload-nas
netapi wlc backup --upload-nas
netapi pfsense backup --upload-nas
netapi ios backup --all --upload-nas
netapi kvm backup --all --upload-nas
netapi keycloak backup --upload-nas
# Check backup status
netapi synology backup-status --detailed
PKI Hierarchy
Certificate authority chain showing AD CS (internal) and Let’s Encrypt (external) trust paths.
| Type | Issuer | Use Cases |
|---|---|---|
Internal (AD CS) |
HOME-ROOT-CA |
ISE Admin, EAP-TLS, pxGrid |
External (Let’s Encrypt) |
ISRG Root X1 |
Guest Portal, WLC WebUI, iPSK Manager |
Planned (Vault) |
HOME-ROOT-CA (signed) |
Automated internal issuance |
certmgr-01 is a single point of failure for Let’s Encrypt certificates. See Certmgr Troubleshooting for known issues.
|
Certbot Renewal Flow
Shows the Certbot renewal process with DNS-01 challenge via Cloudflare API, including known error states.
| Certificate | Issue | Status |
|---|---|---|
guest.domusdigitalis.dev |
Cloudflare credentials path wrong ( |
CRITICAL |
kvm-01.inside.domusdigitalis.dev |
DNS NXDOMAIN for |
CRITICAL |
See Certmgr Troubleshooting Runbook for fixes.
Network Topology (Complete)
Comprehensive view of all infrastructure including KVM hypervisor, VMs, physical devices, and client connectivity.
| Device | IP | VLAN | Role |
|---|---|---|---|
pfSense-01 |
10.50.1.1 |
100 |
Firewall/Router/DNS |
ISE-01 |
10.50.1.20 |
100 |
Shut down (stale config, do not start) |
ISE-02 (PAN) |
10.50.1.21 |
100 |
Primary Admin Node / PSN / MnT |
9800-WLC-01 |
10.50.1.40 |
100 |
Wireless Controller |
home-dc01 |
10.50.1.50 |
100 |
AD DS / DNS / DHCP |
certmgr-01 |
10.50.1.60 |
100 |
Vault PKI / Let’s Encrypt |
NAS-01 |
10.50.1.70 |
100 |
Synology Backups |
NAS-02 |
10.50.1.71 |
100 |
Synology NAS (secondary) |
Gitea-01 |
10.50.1.70 |
100 |
Gitea (on NAS-01) |
Keycloak-01 |
10.50.1.80 |
100 |
SAML/OIDC IdP (Docker) |
KVM-01 |
10.50.1.99 |
100 |
Hypervisor (supermicro300-9d1) |
KVM-01-LAN |
192.168.1.181 |
— |
KVM Host LAN interface |
IPMI-01 |
10.50.1.200 |
100 |
KVM Host IPMI/BMC |
3560CX-01 |
10.50.1.10 |
100 |
802.1X Switch |
iPSK-Mgr-01 |
10.50.1.30 |
100 |
iPSK Portal |
iPSK-Mgr-02 |
10.50.1.31 |
100 |
iPSK Manager (secondary) |
modestus-p50 |
10.50.40.100 |
40 |
Linux Workstation |
VLAN Segmentation
Security zones with inter-VLAN routing through pfSense (default deny policy).
| VLAN | Name | Subnet | Purpose |
|---|---|---|---|
100 |
Management |
10.50.1.0/24 |
Infrastructure devices only |
10 |
Data |
10.50.10.0/24 |
Authenticated workstations |
20 |
Voice |
10.50.20.0/24 |
VoIP/Video (QoS) |
30 |
Guest |
10.50.30.0/24 |
Guest portal (internet only) |
40 |
Research/IoT |
10.50.40.0/24 |
Linux workstations, IoT |
999 |
Critical Auth |
— |
Auth failure fallback |
802.1X EAP-TLS Authentication Flow
Complete authentication flow from Linux client through NAD to ISE with certificate validation.
| Step | Action | Protocol |
|---|---|---|
1 |
Client initiates EAPOL-Start |
EAPOL |
2 |
Client sends identity (CN from cert) |
EAP-Identity |
3 |
TLS handshake begins |
EAP-TLS |
4 |
ISE validates cert chain against ROOT CA |
TLS/CRL |
5 |
ISE sends Access-Accept with VLAN + dACL |
RADIUS |
6 |
Port authorized, DHCP proceeds |
DHCP |
Linux Authentication Architecture
Comparison of wpa_supplicant (current) vs NetworkManager (target for Dr. Shahab migration).
| Dr. Shahab NetworkManager migration is DUE TOMORROW (2026-01-25). See Project Documentation. |
| Feature | wpa_supplicant | NetworkManager |
|---|---|---|
Configuration |
Manual config files |
nmcli or GUI |
Credential Storage |
Plaintext in conf |
GNOME Keyring (encrypted) |
Service Management |
Separate systemd units |
Single NetworkManager.service |
Enterprise Support |
Full 802.1X |
Full 802.1X |
Use Case |
Servers, headless |
Desktop, workstations |
Identity Services Architecture
Complete identity infrastructure including ISE, AD, Keycloak, and iPSK integration.
| Method | Protocol | Use Case |
|---|---|---|
EAP-TLS |
802.1X |
Linux workstations (certificate auth) |
EAP-PEAP |
802.1X |
Windows devices (username/password) |
MAB |
RADIUS |
Printers, legacy devices |
iPSK |
WPA2-PSK |
Guests, IoT (identity-based PSK) |
Guest Portal |
Web Auth |
Visitors (VLAN 30) |
Diagram Source Files
All diagrams are written in D2 language and rendered via Kroki.
# Edit diagram
vim modules/ROOT/images/diagrams/infrastructure-overview.d2
# Preview locally (requires d2 CLI)
d2 infrastructure-overview.d2 infrastructure-overview.svg
# Or use Kroki API
curl -X POST https://kroki.io/d2/svg \
--data-binary @infrastructure-overview.d2 \
-o infrastructure-overview.svg
# Color palette (Catppuccin Mocha)
style: {
fill: "#1a1a2e" # Dark background
stroke: "#f5a623" # Orange accent (ops theme)
font-color: "#e0e0e0" # Light text
}
# Status colors
stroke: "#50fa7b" # Green - OK
stroke: "#ffb347" # Orange - Warning
stroke: "#ff5252" # Red - Critical
stroke: "#6c7086" # Gray - Planned/Disabled