Infrastructure Diagrams
Overview
All diagrams are maintained as separate D2 source files for maximum CI/CD scalability and maintainability.
modules/ROOT/images/diagrams/ ├── infrastructure-radial-v6.d2 # CURRENT STATE (WLC HA SSO, ISE HA, VLAN migration) ├── network-discovery-flow-v16.d2 # VPC-style infrastructure layout (compact) ├── vault-enterprise-architecture.d2 # Vault current vs target state ├── vault-ha-topology.d2 # Vault HA cluster with Raft ├── vyos-ha-topology.d2 # VyOS firewall HA with VRRP ├── vyos-k8s-bgp.d2 # VyOS + Cilium BGP peering ├── backup-flow.d2 # Backup workflow ├── 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 ├── pki-hierarchy.d2 # Certificate chain └── certbot-renewal-flow.d2 # Certbot automation Archived (.archive/): ├── infrastructure-radial-v5.d2 # Superseded (single WLC, no ISE HA) ├── infrastructure-radial-v3.d2 # Superseded (pfSense era) ├── infrastructure-radial-v4.d2 # Superseded (draft VyOS) ├── infrastructure-radial-v2.d2 # Superseded by v3 ├── infrastructure-radial.d2 # Original (no version) ├── infrastructure-ha-compact.d2 # Unused HA variant └── infrastructure-ha-complete.d2 # Unused HA variant
Infrastructure Overview (Current State)
Current topology with VyOS HA firewall, WLC HA (SSO), ISE HA (Primary/Secondary PAN), 6-node k3s cluster, and Cilium BGP.
| Component | Configuration |
|---|---|
Firewall |
VyOS HA (VRRP) - vyos-01 Master, vyos-02 Backup |
k3s Cluster |
3 masters + 3 workers (etcd HA) |
CNI |
Cilium (VXLAN mode, Hubble enabled) |
LoadBalancer |
Cilium BGP (AS 65001) advertising 10.50.1.128/28 |
Hypervisors |
kvm-01 (128GB) + kvm-02 (64GB) |
VLANs |
Infrastructure: 100=INFRA, 110=SECURITY, 120=SERVICES |
Client VLANs |
10=DATA, 20=VOICE, 30=GUEST, 40=IOT, 999=QUARANTINE |
Infrastructure Topology (VPC-Style)
AWS VPC-style nested layout showing all infrastructure zones with HA clusters and cross-zone connections.
Complete Infrastructure Inventory
Current Systems (Active)
| System | IP | Hypervisor | Status |
|---|---|---|---|
vyos-01 (Master) |
10.50.1.2 |
kvm-01 |
Active - VyOS HA Firewall (VRRP VIP: 10.50.1.1) |
vault-01 |
10.50.1.60 |
kvm-01 |
Active - Vault PKI + SSH CA |
ise-01 |
10.50.1.20 |
kvm-01 |
Active - ISE 3.4 RADIUS/NAC |
home-dc01 |
10.50.1.50 |
kvm-01 |
Active - AD DS / GPO / Kerberos |
bind-01 (Primary) |
10.50.1.90 |
kvm-01 |
Active - Authoritative DNS (AXFR master) |
bind-02 (Secondary) |
10.50.1.91 |
kvm-02 |
Active - DNS HA (AXFR slave) |
k3s-master-01 |
10.50.1.120 |
kvm-01 |
Active - Kubernetes (Cilium + Vault Agent) |
keycloak-01 |
10.50.1.80 |
kvm-01 |
Active - SAML/OIDC IdP |
ipsk-manager |
10.50.1.30 |
kvm-01 |
Active - iPSK Self-Service Portal |
ipa-01 |
10.50.1.100 |
kvm-01 |
Active - FreeIPA (Linux auth) |
9800-CL-WLC |
10.50.1.40 |
kvm-01 |
Active - Wireless Controller (Primary) |
vyos-02 (Backup) |
10.50.1.3 |
kvm-02 |
Active - VyOS HA Firewall (VRRP Backup) |
ise-02 |
10.50.1.21 |
kvm-02 |
Active - ISE 3.4 HA Secondary |
9800-WLC-02 |
10.50.1.41 |
kvm-02 |
Active - WLC HA Standby (SSO) |
kvm-01 |
10.50.1.110 |
Physical |
Active - Supermicro A (Hypervisor) |
kvm-02 |
10.50.1.111 |
Physical |
Active - Supermicro B (Hypervisor) |
nas-01 |
10.50.1.70 |
Physical |
Active - Synology DS1821+ (48TB) |
3560CX-01 |
10.50.1.10 |
Physical |
Active - 802.1X Access Switch |
Planned Systems (kvm-02 Expansion)
| System | IP | Hypervisor | Purpose |
|---|---|---|---|
KVM-02 |
10.50.1.111 |
Physical |
Supermicro B - Second Hypervisor |
IPMI-02 |
10.50.1.201 |
BMC |
KVM-02 out-of-band management |
vault-02 |
10.50.1.61 |
kvm-02 |
Vault HA (Raft follower) |
vault-03 |
10.50.1.62 |
kvm-02 |
Vault HA (Raft follower) |
k3s-master-02 |
10.50.1.121 |
kvm-02 |
k3s control plane HA |
k3s-master-03 |
10.50.1.122 |
kvm-02 |
k3s control plane HA |
k3s-worker-01 |
10.50.1.123 |
kvm-01 |
k3s worker (workloads) |
k3s-worker-02 |
10.50.1.124 |
kvm-02 |
k3s worker (workloads) |
k3s-worker-03 |
10.50.1.125 |
kvm-02 |
k3s worker (workloads) |
bind-02 |
10.50.1.91 |
kvm-02 |
DNS Secondary |
ipa-02 |
10.50.1.101 |
kvm-02 |
FreeIPA Replica (LDAP HA) |
vyos-02 |
10.50.1.3 |
kvm-02 |
VyOS Router HA (VRRP backup) |
ISE-02 (Secondary) |
10.50.1.21 |
kvm-02 |
ISE HA Secondary |
9800-WLC-02 |
10.50.1.41 |
kvm-02 |
WLC HA Standby (SSO) |
home-dc02 |
10.50.1.51 |
kvm-02 |
AD Secondary DC |
eve-ng-01 |
10.50.1.150 |
kvm-01 |
EVE-NG CE — heavy topologies (FMC, ISE, NX-OS) |
eve-ng-ws |
localhost |
Razer workstation |
EVE-NG CE — lightweight labs (multi-vendor, R&S, API) |
IP Allocation Plan (MGMT: 10.50.1.0/24)
| IP Range | Purpose | Status |
|---|---|---|
10.50.1.1-3 |
Gateway (VyOS HA) |
Allocated (.1=VIP, .2=vyos-02, .3=vyos-01) |
10.50.1.10-19 |
Network Devices (Switches) |
Allocated (3560CX, C9300) |
10.50.1.20-29 |
Identity Services (ISE HA) |
Allocated (ise-01, ise-02) |
10.50.1.30-39 |
iPSK Manager (HA) |
Allocated (ipsk-mgr-01/02) |
10.50.1.40-49 |
Wireless (WLC, APs) |
Allocated (9800-CL-WLC) |
10.50.1.50-59 |
Domain Controllers (AD DS) |
Allocated (home-dc01/02) |
10.50.1.60-69 |
PKI & Secrets (Vault HA) |
Allocated (vault-01/02/03) |
10.50.1.70-79 |
Storage & Git |
Allocated (NAS, Gitea, MinIO) |
10.50.1.80-89 |
IdP/SSO (Keycloak) |
Allocated (keycloak-01/02) |
10.50.1.90-99 |
DNS (BIND) |
Allocated (bind-01/02) |
10.50.1.100-109 |
LDAP/Directory (FreeIPA) |
Allocated (ipa-01/02) |
10.50.1.110-111 |
Hypervisors |
Allocated (kvm-01=.110, kvm-02=.111) |
10.50.1.112-119 |
Reserved for Expansion |
Available |
10.50.1.120-125 |
k3s Cluster Nodes |
Allocated (3 masters + 3 workers) |
10.50.1.128-143 |
Cilium BGP LB Pool |
Allocated (10.50.1.128/28) |
10.50.1.144-149 |
Reserved for Growth |
Available |
10.50.1.150-159 |
EVE-NG Lab Infrastructure |
Allocated (.150=eve-ng-01 on kvm-01) |
10.50.1.160-199 |
Reserved for Growth |
Available |
10.50.1.200-201 |
IPMI/OOB Management |
Allocated (ipmi-01/02) |
KVM Hypervisor Distribution
KVM-01 (Supermicro A) - Active
| VM | vCPU | RAM | Role |
|---|---|---|---|
vyos-01 |
4 (pinned 0-3) |
4GB |
VyOS HA Master (VRRP + Zone Firewall + BGP) |
home-dc01 |
2 (pinned 4-5) |
4GB |
AD DS / GPO / Kerberos |
ise-01 |
4 (pinned 6-9) |
16GB |
ISE 3.4 RADIUS/NAC |
9800-CL-WLC |
4 (pinned 10-13) |
16GB |
Wireless Controller |
vault-01 |
1 |
1GB |
Vault PKI + SSH CA |
k3s-master-01 |
4 |
8GB |
Kubernetes (Cilium CNI) |
ipsk-manager |
2 |
4GB |
iPSK Self-Service Portal |
keycloak-01 |
2 |
4GB |
SAML/OIDC IdP |
bind-01 |
2 |
2GB |
Authoritative DNS |
ipa-01 |
2 |
4GB |
FreeIPA (Linux auth) |
| Total: 27 vCPU, 63GB RAM. Host has 6C/12T and 128GB RAM. |
KVM-02 (Supermicro B) - Planned
| VM | vCPU | RAM | Purpose |
|---|---|---|---|
ise-02 ✓ |
4 |
12GB |
ISE 3.5 (temp primary) - DEPLOYED |
ipsk-mgr-02 |
2 |
4GB |
iPSK Self-Service Portal HA |
vault-02 ✓ |
2 |
4GB |
Vault HA (Raft follower) - DEPLOYED |
vault-03 ✓ |
2 |
4GB |
Vault HA (Raft follower) - DEPLOYED |
home-dc02 |
2 |
4GB |
AD DS Secondary |
bind-02 ✓ |
1 |
2GB |
DNS Secondary (AXFR slave) - DEPLOYED |
ipa-02 |
2 |
4GB |
FreeIPA Replica (LDAP HA) |
vyos-02 ✓ |
2 |
2GB |
VyOS Router HA (VRRP backup) - DEPLOYED |
k3s-master-02 |
4 |
8GB |
k3s HA control plane |
k3s-master-03 |
4 |
8GB |
k3s HA control plane |
k3s-worker-01 |
4 |
8GB |
k3s workloads |
k3s-worker-02 |
4 |
8GB |
k3s workloads |
k3s-worker-03 |
4 |
8GB |
k3s workloads |
9800-WLC-02 ✓ |
4 |
16GB |
WLC HA Standby (SSO) - DEPLOYED |
Backup Architecture
NAS Storage Structure
Naming convention: {service}_backups where service is the actual service name.
| Share | Purpose | netapi Command |
|---|---|---|
/ise_backups |
ISE configuration exports |
|
/wlc_backups |
WLC running-config |
|
/firewall_backups |
VyOS config export |
|
/switch_backups |
IOS running-config |
|
/kvm_backups |
VM disk images (qcow2) |
|
/vault_backups |
Vault Raft snapshots |
|
/borg_backups |
Workstation Borg repos |
Borg client |
| Share | Purpose | NFS Export |
|---|---|---|
/k3s |
k3s PersistentVolumes (runtime) |
Yes (10.50.1.120-125) |
/k3s_backups |
k3s etcd snapshots |
No (backup target) |
Legacy shares like /Backups, /Network_Backup_Files, /NetBackup exist but are deprecated.
Use the {service}_backups naming convention for new shares.
|
Backup Commands Reference
# Infrastructure Backup Commands Reference
# Include with: include::example$backup-commands-reference.sh[]
# Requires: subs=attributes+ for 10.50.1.10 substitution
# Load credentials
dsource d000 dev/network # ISE, VyOS, WLC, switches
dsource d000 dev/vault # Vault
dsource d000 dev/storage # Synology NAS
# ========================================================================
# NETWORK INFRASTRUCTURE
# ========================================================================
# ISE configuration backup
netapi ise backup --upload-nas
netapi ise backup --output /tmp/ise-$(date +%Y%m%d).tar.gz
# WLC configuration backup
netapi wlc backup --upload-nas
netapi wlc backup --output /tmp/wlc-$(date +%Y%m%d).txt
# VyOS configuration backup
netapi vyos backup --upload-nas
netapi vyos backup --output /tmp/vyos-$(date +%Y%m%d).conf
# Cisco switch backups (all configured switches)
netapi ios backup --all --upload-nas
netapi ios backup --host 10.50.1.10 --output /tmp/3560cx-$(date +%Y%m%d).txt
# ========================================================================
# SECRETS & PKI
# ========================================================================
# Vault Raft snapshot (from vault-01)
vault operator raft snapshot save /tmp/vault-$(date +%Y%m%d).snap
scp /tmp/vault-*.snap nas-01:/vault_backups/
# Manual Vault backup with netapi (if implemented)
# netapi vault backup --upload-nas
# ========================================================================
# IDENTITY SERVICES
# ========================================================================
# Keycloak realm export (via container)
ssh nas-01 "docker exec keycloak /opt/keycloak/bin/kc.sh export \
--dir /tmp/export --realm domus"
ssh nas-01 "cp /volume1/docker/keycloak/data/export/* /volume1/Backups/keycloak/"
# FreeIPA backup (on ipa-01)
ssh ipa-01 "sudo ipa-backup --data --logs"
# ========================================================================
# VIRTUALIZATION
# ========================================================================
# KVM VM disk backup (large - run off-hours)
netapi kvm backup --all --upload-nas
netapi kvm backup --vm vault-01 --output /mnt/onboard-ssd/backups/
# ========================================================================
# BACKUP STATUS
# ========================================================================
# Check all backup freshness
netapi synology backup-status --detailed
# Check specific system backups
netapi synology backup-list ise
netapi synology backup-list vyos
netapi synology backup-list vault
Backup Schedule (Recommended)
| System | Frequency | Notes |
|---|---|---|
ISE |
Daily |
Config changes trigger immediate backup |
VyOS |
Daily |
Plus before/after any rule changes |
WLC |
Weekly |
Unless AP changes made |
Switches |
Weekly |
Unless config changes |
Vault |
Daily |
Raft snapshot to NAS |
KVM VMs |
Weekly |
Full disk images (off-hours) |
Keycloak |
Weekly |
Realm export only |
FreeIPA |
Weekly |
Data + logs |
Workstations |
Continuous |
Borg with hourly snapshots |
Vault HA Topology
Three-node Vault cluster with Raft consensus for high availability.
| Node | IP | Hypervisor | Status |
|---|---|---|---|
vault-01 |
10.50.1.60 |
kvm-01 |
Active (Leader) |
vault-02 |
10.50.1.61 |
kvm-02 |
Planned (Raft follower) |
vault-03 |
10.50.1.62 |
kvm-02 |
Planned (Raft follower) |
VyOS Firewall HA Topology
VyOS VRRP high availability with master/backup failover across hypervisors.
| Node | IP | Priority | Role |
|---|---|---|---|
vyos-01 |
10.50.1.2 |
200 |
Master (kvm-01) |
vyos-02 |
10.50.1.3 |
100 |
Backup (kvm-02) |
VIP |
10.50.1.1 |
- |
Virtual Gateway |
| Clients use VIP (10.50.1.1) as their gateway. VRRP handles failover transparently. |
VyOS + k3s BGP Architecture
Cilium BGP Control Plane (AS 65001) peering with VyOS (AS 65000) for LoadBalancer IP advertisement.
| Component | ASN | Role | Peers |
|---|---|---|---|
vyos-01 |
65000 |
Route receiver |
All 6 k3s nodes |
vyos-02 |
65000 |
Route receiver (backup) |
All 6 k3s nodes |
Cilium (per node) |
65001 |
Route advertiser |
vyos-01, vyos-02 |
| Attribute | Value |
|---|---|
CIDR |
10.50.1.128/28 |
Range |
10.50.1.128 - 10.50.1.143 |
Advertisement |
BGP from Cilium to VyOS |
| This replaces MetalLB L2 mode. BGP provides faster failover, ECMP load balancing, and enterprise-grade routing experience. |
k3s Cluster Architecture
| Node | IP | Hypervisor | Role |
|---|---|---|---|
k3s-master-01 |
10.50.1.120 |
kvm-01 |
Control plane (active) |
k3s-master-02 |
10.50.1.121 |
kvm-02 |
Control plane (planned) |
k3s-master-03 |
10.50.1.122 |
kvm-02 |
Control plane (planned) |
k3s-worker-01 |
10.50.1.123 |
kvm-01 |
Workloads (planned) |
k3s-worker-02 |
10.50.1.124 |
kvm-02 |
Workloads (planned) |
k3s-worker-03 |
10.50.1.125 |
kvm-02 |
Workloads (planned) |
| Component | Description |
|---|---|
CNI |
Cilium 1.16.5 (replaces Flannel) |
Ingress |
Traefik (k3s default) |
Secrets |
Vault Agent Injector |
Storage |
NFS from NAS-01 (/k3s/*) |
Observability |
Prometheus + Grafana + Wazuh |
GitOps |
ArgoCD |
PKI Hierarchy
Certificate authority chain showing Vault PKI (internal) and Let’s Encrypt (external) trust paths.
| Type | Issuer | Use Cases |
|---|---|---|
Internal (Vault PKI) |
DOMUS-ISSUING-CA |
EAP-TLS, SSH CA, service certs |
External (Let’s Encrypt) |
ISRG Root X1 |
Guest Portal, WLC WebUI, iPSK Manager |
Legacy (AD CS) |
HOME-ROOT-CA |
Deprecated - migrating to Vault |
| Vault PKI is now the primary internal CA. AD CS is deprecated. |
Certbot Renewal Flow
Shows the Certbot renewal process with DNS-01 challenge via Cloudflare API, including known error states.
Network Topology (Complete)
Comprehensive view of all infrastructure including KVM hypervisor, VMs, physical devices, and client connectivity.
VLAN Segmentation
Security zones with inter-VLAN routing through VyOS zone firewall (default deny policy).
| VLAN | Name | Subnet | Purpose |
|---|---|---|---|
Infrastructure VLANs (servers/services) |
|||
100 |
INFRA |
10.50.1.0/24 |
Network hardware, hypervisors, k3s nodes |
110 |
SECURITY |
10.50.110.0/24 |
Crown jewels: Vault, ISE, secrets |
120 |
SERVICES |
10.50.120.0/24 |
General VMs: Keycloak, Gitea, FreeIPA, BIND |
Client VLANs (endpoints only) |
|||
10 |
DATA |
10.50.10.0/24 |
Corporate wired/wireless devices |
20 |
VOICE |
10.50.20.0/24 |
VoIP phones (QoS) |
30 |
GUEST |
10.50.30.0/24 |
Guest portal (internet only) |
40 |
IOT |
10.50.40.0/24 |
IoT devices, limited access |
999 |
CRITICAL_AUTH |
— |
802.1X failure quarantine (no gateway) |
| INFRA (10.50.1.0/24) is a dedicated VyOS interface (eth0), not a VLAN tag. VyOS handles inter-VLAN routing with zone-based firewall policies. |
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 workstation migrations).
| 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.
# D2 Diagram Editing Workflow
# Include with: include::example$d2-editing-example.sh[]
# Edit diagram
vim modules/ROOT/images/diagrams/infrastructure-overview.d2
# Preview locally (requires d2 CLI)
d2 --theme 200 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
# D2 Styling Reference (Catppuccin Mocha Theme)
# Include with: include::example$d2-styling-reference.d2[]
# Color palette
style: {
fill: "#1a1a2e" # Dark background
stroke: "#f5a623" # Orange accent (ops theme)
font-color: "#e0e0e0" # Light text
}
# Status colors
stroke: "#50fa7b" # Green - OK/Active
stroke: "#ffb347" # Orange - Warning
stroke: "#ff5252" # Red - Critical
stroke: "#6c7086" # Gray - Planned/Disabled
stroke: "#89b4fa" # Blue - Info
stroke: "#cba6f7" # Purple - Security