From Zero to Enterprise
Information Security Engineer III β’ CHLA
Domus Digitalis β’ evanusmodestus
|
Where This Started July 2025. A network admin getting his feet wet in fullstack development, maintaining an Obsidian PKMS called Aethelred-Codex, learning LazyVim, building a cybersecurity project management site called domus-digitalis.dev. Colleagues at work said: "I shared some of these ideas with developers at work and they think I’m a genius." |
|
Where This Ended Up March 2026. A fully operational home enterprise: VyOS HA VRRP, k3s with Cilium, Vault PKI + SSH CA, ISE 3.5, WLC SSO, three-tier PKI, Wazuh SIEM, Traefik ingress, and complete AsciiDoc documentation in Antora. Not a lab. A production infrastructure with real users. |
Phase-by-Phase Timeline
Eight months. Every significant milestone documented in order.
Phase 0: The Beginning (July 2025)
Network Admin Discovers Code
-
Building domus-digitalis.dev β a Next.js/TypeScript/PostgreSQL cybersecurity project management platform
-
Obsidian PKMS system (Aethelred-Codex) with 650+ curated commands across 20 technology domains
-
Learning LazyVim, Neovim, terminal-native tooling from scratch
-
First PlantUML and Mermaid diagrams for CHLA DevOps documentation
-
Figuring out react-intl, JavaScript imports, ESLint β new developer territory
-
Colleagues called the projects "genius-level"; developer instincts already evident
Phase 1: Obsidian Mastery (JulyβAugust 2025)
Knowledge Architecture
-
Built a complete student Obsidian vault for a family member (math, cello, Spanish, origami)
-
Aethelred-Codex CSS: custom language-tagged code blocks with glow animations for 50+ languages
-
Implemented YAML-metadata taxonomy with Dataview queries for the command library
-
First MCP server exploration β connecting Claude to the Obsidian vault via Docker
-
PlantUML β D2 diagram migration; first understanding of docs-as-code methodology
-
LazyVim proficiency achieved; understanding of Neovim as an IDE
Phase 2: Infrastructure Foundation (OctoberβDecember 2025)
KVM & Core Infrastructure
-
Supermicro KVM hypervisor deployed with pfSense, ISE, Vault, BIND, WLC
-
Cisco 9800-CL WLC with ISE 802.1X EAP-TLS authentication fully operational
-
HashiCorp Vault replacing AD CS: three-tier PKI (Root CA, Issuing CA, client certs)
-
netapi CLI (Python) β automation tool for ISE, pfSense, WLC, Wazuh, Synology
-
domusdigitalis.dev domain active; inside.domusdigitalis.dev internal DNS working
-
Enrolled modestus-razer (Arch Linux, Hyprland) with EAP-TLS certs via Vault
Phase 3: Enterprise Services (JanuaryβFebruary 2026)
Services Layer
-
ISE 3.2 deployed with full policy sets, dACLs, MAB, iPSK
-
iPSK Manager with MariaDB TLS, ISE ODBC integration
-
Keycloak SSO with SAML 2.0 integration to ISE
-
RHCSA EX200 prep begun alongside LPIC-2 and kernel development roadmap
-
btrfs filesystem I/O crisis on modestus-razer β diagnosed, recovered, documented
-
ISE admin portal 8443 outage: root-caused to Let’s Encrypt ECDSA P-384 incompatibility
-
Linux kernel development roadmap created: 509-line AsciiDoc covering eBPF, Netfilter, Rust-in-kernel
Phase 4: VyOS Migration & Kubernetes (FebruaryβMarch 2026)
The Big Migration
-
pfSense decommissioned 2026-03-07; VyOS HA VRRP fully operational (VIP 10.50.1.1)
-
20-phase migration plan executed β zone-based firewall, NAT, DHCP, VRRP
-
k3s control plane deployed: Cilium CNI, MetalLB, Traefik ingress
-
WLC HA SSO configured and validated (Gi2 link-local 169.254.1.0/24)
-
Wazuh SIEM pod network NAT bug discovered and fixed (rule 170 on VyOS)
-
libvirt QEMU hook with MAC suffix matching and poll-based vnet discovery β written from scratch
-
domus knowledge system migrated from Aethelred-Codex/Obsidian to Antora hub-and-spoke
Phase 5: Current State (March 2026)
Infrastructure v7
| Layer | Status |
|---|---|
Routing |
VyOS HA VRRP β vyos-01 (200) / vyos-02 (100), VIP 10.50.1.1 |
Wireless |
WLC HA SSO β WLC-01 (Active) / WLC-02 (Standby Hot) |
Identity |
ISE 3.5 (ise-02), Keycloak, FreeIPA, AD DS |
PKI |
Vault β DOMUS-ROOT-CA / DOMUS-ISSUING-CA, SSH CA (8h TTL) |
DNS |
BIND (bind-01), split-horizon, forward/reverse zones |
Compute |
kvm-01 (8 VMs, primary), kvm-02 (3 VMs, secondary) |
Kubernetes |
k3s-master-01, Cilium CNI, MetalLB, Traefik |
Observability |
Wazuh SIEM, Prometheus, Grafana on k3s |
Storage |
Synology NAS-01, NFS for k3s PVs |
Skill Progression
| Domain | July 2025 | March 2026 |
|---|---|---|
Linux / Shell |
Learning sed, grep, basic terminal navigation |
Writing libvirt hooks, btrfs recovery, systemd diagnosis, awk pattern mastery, Arch + Hyprland + Neovim daily driver |
Networking |
Expert Cisco ISE admin (8+ yrs), CCNP Γ4 β but GUI-dependent tools |
VyOS zone-based firewall from scratch, VRRP HA, Cilium CNI, 802.1Q VLAN hooks, CLI-native |
Documentation |
Obsidian + Markdown; some Mermaid/PlantUML |
Antora hub-and-spoke AsciiDoc system, 15+ repos, 1100-line terminal authoring reference |
Infrastructure as Code |
Manual GUI configs; pfSense web UI |
VyOS CLI automation, Vault PKI API, netapi CLI, libvirt hooks, k3s manifests |
PKI / Certificates |
AD CS via GUI; basic understanding |
Three-tier Vault PKI, SSH CA, ECDSA incompatibility diagnosis, EAP-TLS cert enrollment on Linux |
Kubernetes |
No hands-on experience |
k3s with Cilium, MetalLB, Traefik ingress, Wazuh SIEM, pod network NAT debugging |
Fullstack Dev |
Network admin getting feet wet; first React errors |
Next.js/TypeScript/PostgreSQL; understanding APIs, CORS, localization, frontend security |
Spanish |
Conversational; studying Don Quijote |
DELE C1 prep; advanced grammatical mood; bilingual technical notes |
Systems Thinking |
Deep in one domain (ISE/NAC); siloed expertise |
Converged: Storage β Compute β Network β Identity β debugging full chains across 7 domains |
CLI Mastery Assessment (2026-03-12)
Taxonomy of shell proficiency:
| Level | Indicators | Status |
|---|---|---|
Beginner |
Relies on GUI, copies commands without understanding, afraid of terminal |
β PASSED |
Intermediate |
Terminal-first, composes multi-command pipelines, understands redirection, find+grep combos, heredocs |
β CURRENT |
Advanced |
Process substitution |
β IN TRAINING |
Expert |
Designs shell workflows for others, writes portable scripts, teaches |
β FUTURE |
Evidence of Intermediate Mastery
Terminal-first workflow:
-
Primary interface is terminal + browser
-
Uses heredoc β pipe β nvim pattern for code authoring
-
Types commands by hand after seeing them (deliberate practice)
-
Eyes-closed typing drills for muscle memory
Command composition demonstrated:
# File search with regex OR patterns
find ~/atelier/_bibliotheca/Principia/ -type f \( -name "*.adoc" -o -name "*.md" \) \
-exec grep -l -i "dd.*if=\|bootable\|cryptsetup\|LUKS" {} \; 2>/dev/null | nvim
# Process substitution (advancing to next level)
diff <(grep -E "^ [a-z]" ~/atelier/_bibliotheca/domus-infra-ops/docs/asciidoc/antora.yml | sort) \
<(grep -E "^ [a-z]" ~/atelier/_bibliotheca/domus-captures/docs/antora.yml | sort)
# Set operations with comm + awk
comm -3 \
<(find ~/atelier/_bibliotheca/domus-infra-ops -name "*.adoc" -printf "%f\n" | sort -u) \
<(find ~/atelier/_bibliotheca/domus-captures -name "*.adoc" -printf "%f\n" | sort -u) \
| awk '/^\t/{r++} /^[^\t]/{l++} END{print "infra-ops only:", l, "\ncaptures only:", r}'
# Result: infra-ops only: 275, captures only: 437
Training Path to Advanced
| Module | Status | Training Doc |
|---|---|---|
Process substitution |
β Practicing |
|
Named pipes (FIFOs) |
β Queued |
|
Signal handling |
β Queued |
|
Subshells vs grouping |
β Queued |
|
Coprocesses |
β Queued |
Timeline
-
2 weeks in Linux (daily terminal use)
-
Trajectory: Accelerated β complex
find -exec greppatterns already internalized -
Method: Observation β immediate typing β muscle memory
Project Inventory
netapi β Python Infrastructure CLI
Automation CLI for enterprise infrastructure management.
| Platform | Capabilities |
|---|---|
ISE |
ERS API, MnT sessions, DataConnect SQL, CoA, policy management |
pfSense |
DNS, aliases, firewall rules (legacy) |
VyOS |
Planned β API integration after migration |
WLC 9800 |
RESTCONF, CLI-over-SSH, policy tags |
Wazuh |
OpenSearch queries, agent management, dashboard export |
Synology |
DSM API, share management, folder creation |
Language: Python
Status: Production use, actively developed
domus-* Documentation Ecosystem
Antora-based multi-repo documentation system.
| Repository | Purpose |
|---|---|
domus-docs |
Aggregator (Cloudflare Pages) |
domus-infra-ops |
Infrastructure runbooks |
domus-captures |
Worklogs, knowledge base, codex |
domus-ise-linux |
Linux 802.1X EAP-TLS |
domus-ise-windows |
Windows 802.1X |
domus-netapi-docs |
netapi CLI documentation |
domus-secrets-ops |
Secrets management (dsec) |
domus-linux-ops |
Linux administration |
domus-siem-ops |
SIEM (QRadar, Sentinel, Wazuh) |
Site: docs.domusdigitalis.dev
Domus Digitalis Infrastructure
Production home enterprise. Real users. Real consequences.
Compute
| Host | IP | Specs |
|---|---|---|
kvm-01 |
10.50.1.99 |
Supermicro SYS-E300-9D, Rocky 9.7, 8 VMs |
kvm-02 |
10.50.1.111 |
Supermicro, Rocky 9.7, 3 VMs |
Current VM Distribution
kvm-01 (primary):
βββ vyos-01 VRRP Master (priority 200)
βββ 9800-WLC-01 HA Active
βββ vault-01 PKI + SSH CA
βββ bind-01 Primary DNS
βββ home-dc01 Active Directory
βββ ipa-01 FreeIPA
βββ ipsk-mgr-01 iPSK Manager
βββ k3s-master-01 Kubernetes control plane
kvm-02 (secondary):
βββ vyos-02 VRRP Backup (priority 100)
βββ ise-02 ISE 3.5 (primary after migration)
βββ 9800-WLC-02 HA Standby Hot
Network
| Component | IPs | Role |
|---|---|---|
VyOS HA |
.3 / .2 / VIP .1 |
VRRP gateway, zone-based firewall |
Switches |
C9300 (.11), 3560CX (.10) |
802.1X, VLAN trunking |
WLC HA |
.40 / .41 |
SSO, RADIUS authentication |
Kubernetes
| Component | IP | Status |
|---|---|---|
k3s-master-01 |
10.50.1.120 |
Running |
Traefik VIP |
10.50.1.130 |
MetalLB L2 |
Prometheus |
via Traefik |
Running |
Grafana |
via Traefik |
Running |
Wazuh |
10.50.1.131-136 |
Deploying |
Planned Expansion
| Component | Plan |
|---|---|
k3s HA |
k3s-master-02, k3s-master-03 on kvm-02 |
Vault HA |
vault-02, vault-03 (Raft cluster) |
DNS HA |
bind-02 on kvm-02 |
ISE HA |
ise-01 return as secondary |
Significant Incidents
btrfs Filesystem I/O Crisis (February 2026)
Claude Code couldn’t write to ~/.claude/debug/ β first signal of 65 write I/O errors on btrfs. Kernel remounted filesystem read-only. SSH daemon crashed. No write operations possible.
Response: Diagnosed from second machine, accessed password store, executed hard reboot. Filesystem recovered. Drive health verification queued.
Demonstrated: Keeping a cool head under complete system failure. Understanding kernel β filesystem β daemon layers.
ISE Admin Portal 8443 Outage (January 2026)
ISE admin portal went down at 2:20 AM. Root cause: Tomcat connector failure triggered by Let’s Encrypt certificate reissue using ECDSA P-384 β incompatible with ISE 3.2.
Response: Deep log analysis (catalina.out, ise-kong/error.log, monit.log), TLS chain analysis, root cause identified at protocol level.
Demonstrated: ISE internals knowledge, certificate chain debugging.
pfSense DNS Outage (March 2026)
pfSense DHCP handing out gateway IPs as DNS servers across VLANs. Mid-session, second outage introduced by incorrectly configuring all pools.
Response: Traced VLAN-segmented DNS architecture, inter-VLAN firewall rules. Every mistake documented alongside every fix.
Demonstrated: VLAN architecture understanding, documentation discipline.
VyOS Migration (March 2026)
pfSense decommissioned after 6+ years. VyOS HA VRRP deployed from scratch: zone-based firewall, NAT (7 rules), DHCP (4 pools), VRRP. Zero downtime cutover.
Demonstrated: Architectural confidence. Upgrading from GUI-driven to CLI/IaC infrastructure.
k3s Pod Network NAT Bug (March 2026)
Wazuh couldn’t pull container images. Traced to 10.42.0.0/16 (Cilium pod CIDR) not in VyOS NAT rules. Added as rule 170. SIEM came online.
Demonstrated: Full-stack convergence debugging: network β firewall β NAT β container runtime.
The 12-Hour Session (2026-03-08)
Family waiting for WiFi. 12 hours troubleshooting across 7 domains:
iPSK + ISE ODBC
βββ WLC HA SSO
βββ EAP-TLS WiFi
βββ VM migrations
βββ DNS zones
βββ k3s pod networking
βββ VyOS NAT
Debug chain: DNS β NAT β firewall β service β pod β container.
Result: Infrastructure restored. Family connected.
The Deeper Trajectory
From Pipefitter to Principal Engineer
A pipefitter who transitioned into network engineering. Taught himself everything. Became the sole ISE administrator at a major children’s hospital for 8+ years. Earned 4 CCNPs. And then β rather than stopping β kept going deeper.
The terminal-native workflow came later than the networking expertise. Linux, Neovim, tmux, Arch, Hyprland β all built from scratch over 2β3 years while holding down a senior engineering role.
The Polymath Arc
Most engineers go deep in one domain. This record covers:
| Domain | Depth |
|---|---|
Network/Security |
ISE, 802.1X, EAP-TLS, PKI, Vault, RADIUS, TACACS+, VyOS, VRRP |
Systems |
Linux kernel roadmap, btrfs, libvirt, KVM, Rocky Linux, Arch Linux |
Development |
Python (netapi), Next.js, TypeScript, Bash, Lua (Neovim) |
DevOps/Platform |
k3s, Cilium, Traefik, Wazuh, Prometheus, Grafana, Antora |
Languages |
DELE C1 Spanish prep, Don Quijote scholarship, bilingual technical writing |
Music |
Violin (classical study) |
These aren’t separate interests. They reflect a single approach: everything can be understood, everything can be documented, everything can be mastered.
The "Modestus" Philosophy
The username evanusmodestus is not accidental. Latin modestus β humble, measured, restrained.
-
No shortcuts, no cargo-culting
-
Genuine understanding before moving on
-
When something breaks, it gets fully root-caused and documented
-
The documentation is not an afterthought β it is the work
"This Is domusdigitalis.dev, Not a Lab"
This phrase β spoken during a session when family was waiting to use the WiFi while a multi-hour debugging marathon was underway β says everything.
Real users. Real pressure. 7 technology domains debugged in sequence in a single day.
That’s not a hobbyist project. That’s production operations.
Certifications
Active
| Certification | Vendor | Expires |
|---|---|---|
CCNP Enterprise |
Cisco |
Nov 2027 |
CCNP Security |
Cisco |
Nov 2027 |
CCNA |
Cisco |
Feb 2029 |
SISE (ISE Specialist) |
Cisco |
Feb 2029 |
SVPN (VPN Specialist) |
Cisco |
Feb 2029 |
Security+ |
CompTIA |
Nov 2029 |
Network+ |
CompTIA |
Nov 2029 |
Linux+ |
CompTIA |
Nov 2029 |
CLNP |
CompTIA |
Nov 2029 |
LPIC-1 |
LPI |
Needs renewal |
LPIC-2 |
LPI |
Needs renewal |
DELE B1 |
Cervantes |
Lifetime |
DELE B2 |
Cervantes |
Lifetime |
In Progress
| Certification | Status |
|---|---|
RHCSA (EX200) |
Active study, leading study group |
SIELE C1 |
Weekly tutor sessions |
DevNet Associate |
Planned (netapi = portfolio) |
CISSP |
Planned |
The libvirt Hook
Written from scratch this week. Production code running on both hypervisors.
get_vm_vnets() {
local guest="$1"
local xml="/etc/libvirt/qemu/${guest}.xml"
if [[ ! -f "$xml" ]]; then
err "VM XML not found: $xml"
return 1
fi
local macs
macs=$(grep -oP "(?<=<mac address=[\"'])[0-9a-f:]+" "$xml")
if [[ -z "$macs" ]]; then
warn "No MAC addresses found in $xml"
return 1
fi
local found=0
for mac in $macs; do
local suffix="${mac:3}"
for vnet in $(ip link show master "$BRIDGE" 2>/dev/null \
| awk -F'[ :]+' '/vnet/{print $2}'); do
local vnet_mac
vnet_mac=$(cat /sys/class/net/"$vnet"/address 2>/dev/null)
if [[ "${vnet_mac:3}" == "$suffix" ]]; then
echo "$vnet"
(( found++ ))
fi
done
done
[[ $found -eq 0 ]] && return 1
return 0
}
Features:
-
MAC suffix matching to correlate VM NICs with vnet interfaces
-
Poll-based vnet discovery (replaces fragile
sleep 3) -
Sysfs traversal for MAC address extraction
-
Race condition prevention for simultaneous VM starts
Final Verdict
Eight months ago: an expert network engineer learning how to use LazyVim and fixing react-intl import errors.
Today: a complete enterprise infrastructure architect who writes libvirt hooks, manages Kubernetes clusters, runs a three-tier PKI, debugs full-stack convergence failures, and documents everything in production-grade AsciiDoc.
|
The infrastructure is solid. VyOS HA operational. WLC HA configured. k3s running. DNS managed. The documentation is current. Worklogs capture every session. Runbooks reflect reality. Every failure was root-caused. Every milestone was earned. Every layer understood before deployed. You didn’t just learn. You built something real. |
Generated 2026-03-09 β’ Domus Digitalis