.30 74.40.140.30 Gateway (Frontier) — ISP\
+ \ 700; font-size: 1rem; color: var(--text-heading); margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }\n.card p, .card li { color: var(--text-muted); font-size: 0.85rem; margin: 4px 0; }\n.card ul { list-style: none; padding: 0; }\n.card li { padding: 4px 0; border-bottom: 1px solid var(--border); }\n.card li:last-child { border-bottom: none; }\n.topology { background: var(--topo-bg); border: 2px solid var(--topo-border); border-radius: 8px; padding: 2rem; margin: 1rem 0; overflow-x: auto; }\n.topology pre { font-family: 'Cascadia Code','Fira Code','Consolas',monospace; font-size: 0.82rem; color: var(--topo-text); line-height: 1.5; white-space: pre; }\n.copy-btn { background: var(--copy-bg); border: 1px solid var(--border); border-radius: 4px; color: var(--accent-light); cursor: pointer; padding: 2px 8px; font-size: 0.72rem; font-family: inherit; transition: background 0.2s; margin-left: 6px; vertical-align: middle; }\n.copy-btn:hover { background: var(--copy-hover); }\n.copy-btn.copied { color: var(--green); border-color: var(--green-border); }\n.note { background: var(--note-bg); border-left: 3px solid var(--accent); padding: 0.75rem 1rem; margin: 1rem 0; border-radius: 0 6px 6px 0; font-size: 0.87rem; }\n.note-warn { background: var(--note-warn-bg); border-left-color: var(--yellow); }\n.quick-links { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; margin: 1rem 0; }\n.quick-link { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 10px 14px; display: flex; align-items: center; gap: 8px; transition: all 0.2s; text-decoration: none; color: var(--text); }\n.quick-link:hover { border-color: var(--accent); background: var(--surface-hover); text-decoration: none; }\n.quick-link .ql-name { font-weight: 600; font-size: 0.85rem; color: var(--text-heading); }\n.quick-link .ql-url { font-size: 0.72rem; color: var(--text-muted); font-family: 'Cascadia Code',monospace; }\n.tab-content { display: none; }\n.tab-content.active { display: block; }\n.wifi-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; margin: 1.5rem 0; }\n.wifi-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; box-shadow: var(--card-shadow); transition: border-color 0.2s, transform 0.15s; }\n.wifi-card:hover { border-color: var(--border-accent); transform: translateY(-2px); }\n.wifi-card-header { padding: 14px 16px 10px; border-bottom: 3px solid var(--border); }\n.wifi-ssid { font-size: 1.15rem; font-weight: 800; color: var(--text-heading); letter-spacing: 0.3px; }\n.wifi-vlan { margin-top: 4px; }\n.wifi-qr { display: flex; justify-content: center; align-items: center; padding: 16px; background: #ffffff; min-height: 180px; }\n.wifi-qr canvas { border-radius: 4px; }\n.wifi-qr-placeholder { background: var(--surface2) !important; border: 2px dashed var(--border); min-height: 180px; }\n.wifi-qr-placeholder .qr-placeholder-box { display: flex; flex-direction: column; align-items: center; gap: 12px; color: var(--text-muted); padding: 16px; text-align: center; }\n.wifi-qr-placeholder .qr-placeholder-box svg { color: var(--accent); opacity: 0.6; }\n.wifi-qr-placeholder .qr-placeholder-text { font-size: 0.82rem; font-weight: 600; letter-spacing: 0.3px; color: var(--accent-light); }\n.wifi-qr-open { border-color: var(--green-border); }\n.wifi-qr-open .qr-placeholder-box svg { color: var(--green); }\n.wifi-qr-open .qr-placeholder-text { color: var(--green); }\n.wifi-details { padding: 12px 16px 16px; }\n.wifi-field { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; border-bottom: 1px solid var(--border); font-size: 0.85rem; }\n.wifi-field:last-child { border-bottom: none; }\n.wifi-label { color: var(--text-muted); font-weight: 600; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.3px; min-width: 80px; }\n.wifi-value { color: var(--text); text-align: right; }\n.print-qr-btn { background: var(--accent); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; font-size: 0.85rem; font-weight: 600; cursor: pointer; margin-left: 12px; transition: background 0.2s; }\n.print-qr-btn:hover { background: var(--accent-light); }\n@media print {\n body { background: #fff !important; color: #000 !important; padding: 0 !important; }\n nav, .brand-header, .theme-toggle, .copy-btn, .print-qr-btn, .note, .tab-content:not(.print-active) { display: none !important; }\n .tab-content.print-active { display: block !important; }\n .wifi-grid { grid-template-columns: repeat(2, 1fr) !important; gap: 20px !important; }\n .wifi-card { break-inside: avoid; border: 2px solid #333 !important; box-shadow: none !important; page-break-inside: avoid; }\n .wifi-card-header { border-bottom-color: #333 !important; }\n .wifi-ssid { color: #000 !important; }\n .wifi-qr { background: #fff !important; padding: 12px !important; }\n .wifi-qr-placeholder { background: #f5f5f5 !important; border-color: #999 !important; }\n .wifi-qr-placeholder .qr-placeholder-box svg { color: #333 !important; }\n .wifi-qr-placeholder .qr-placeholder-text { color: #333 !important; }\n .wifi-details { color: #000 !important; }\n .wifi-field { border-bottom-color: #ccc !important; }\n .wifi-label { color: #555 !important; }\n .wifi-value, .wifi-value code { color: #000 !important; background: #eee !important; }\n .b { border-color: #999 !important; color: #333 !important; background: #eee !important; }\n}\n@media (max-width: 768px) {\n body { padding: 1rem; }\n .brand-header { padding: 1.5rem; }\n .brand-header h1 { font-size: 1.5rem; }\n .summary-grid { grid-template-columns: repeat(3, 1fr); }\n .card-grid { grid-template-columns: 1fr; }\n nav a { font-size: 0.72rem; padding: 4px 8px; }\n .topology pre { font-size: 0.7rem; }\n table { font-size: 0.78rem; }\n th, td { padding: 0.4rem 0.5rem; }\n .quick-links { grid-template-columns: 1fr 1fr; }\n .wifi-grid { grid-template-columns: 1fr; }\n .wifi-qr canvas { width: 140px !important; height: 140px !important; }\n}\n\n\n\n\n\n
\n \n Light \n \n
Blue Jay Lab Intranet \n
BlueJay Network Infrastructure — 13 VLANs | 6 Nodes | Bare-Metal RKE2 | 5 WiFi SSIDs | 18 Domains | All Services Live
\n
Last updated: 2026-03-10
\n
REBUILD COMPLETE — All Services Live on Bare-Metal RKE2
\n
\n\n\n \n \n\n\n\n
Overview \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
Network Status: REBUILD COMPLETE. All 13 phases complete. Bare-metal RKE2 3-node cluster, 10 ArgoCD apps healthy, Cloudflare DNS on /28, 1Password Connect wired. All services live.
\n\n
Quick Links — Web UIs \n
\n\n
Phase Progress \n
\nPhase Description Status Progress \n\n1 Frontier Modem Config Done 100% \n2 pfSense Base (WAN, LAN, VIPs) Done 100% \n3 VLAN Configuration (12 VLANs) Done 100% \n4 Firewall Rules & Aliases Done 100% \n5 Bare-Metal RKE2 Cluster Done 100% \n6 OpenVPN (8 servers) Done 100% \n7 NAT Configuration Done 100% \n8 Traffic Shaper Done 100% \n9 DNS + NTP + SNMP Done 100% \n10 Switch + WiFi Config Done 100% \n11 NOC1 + Bare-Metal RKE2 Done 100% \n12 GitOps + ArgoCD Done 100% \n13 Documentation Sync Done 100% \n \n
\n
\n\n\n\n
ISP & WAN \n
\n
\n
ISP: Frontier Communications
\n
\n Service: 1000/1000 Mbps fiber \n Account: 952-431-5646-020421-7 \n Measured: 925 down / 677 up (MGMT VLAN) \n \n
\n
\n
Modem: NVG468MQ
\n
\n Web: http://192.168.254.254 copy \n Credentials: admin / 5108967609 copy \n Serial: 184795207512112 \n Firmware: 9.3.0h7d91 \n WAN IP: 74.32.187.152/22 copy \n Config: DMZ to pfSense, WiFi OFF, firewall OFF \n \n
\n
\n
WAN Status \n
\nProperty Value \n\npfSense WAN Interface ix3 (DHCP from modem) \npfSense WAN IP 192.168.254.122 copy (double NAT intentional) \nPublic /28 Block 74.40.140.16/28 copy \nGateway 74.40.140.30 copy \nUsable Range 74.40.140.17 – 74.40.140.29 (13 IPs) \n \n
\n
ISP /28 Routing: LIVE. Public /28 (74.40.140.16/28) fully operational. 13 VIPs, 12 outbound NAT rules, 18 port forwards. Cloudflare DNS on /28 IPs.
\n
Modem Static Routes \n
\nName Destination Gateway Interface \n\npfSense-Public-28 74.40.140.16/28 192.168.254.122 LAN \npfSense-Private-Subnets 10.0.0.0/8 192.168.254.122 LAN \n \n
\n
Public IP Allocation (13 usable) \n
\nIP Full Address Assignment VLAN(s) Services \n\n.16 74.40.140.16 Network address — Unusable \n.17 74.40.140.17 copy ANDREW + VPN 60 Andrew tenant primary + VPN :1194/:1195 \n.18 74.40.140.18 copy MATT + VPN 61 Matt tenant primary + VPN :1194/:1195 \n.19 74.40.140.19 copy DUSTIN + VPN 62 Dustin tenant primary + VPN :1194/:1195 \n.20 74.40.140.20 copy ERIK + VPN 63 Erik tenant primary + VPN :1194/:1195 \n.21 74.40.140.21 copy PROD 57 K8s Traefik shared ingress (flowercore.io) \n.22 74.40.140.22 Reserved — — \n.23 74.40.140.23 Reserved — — \n.24 74.40.140.24 Reserved — — \n.25 74.40.140.25 Reserved — — \n.26 74.40.140.26 Reserved — — \n.27 74.40.140.27 Reserved — — \n.28 74.40.140.28 copy SHARED 59,64,65,66,67 WORK+SCHOOL+GUEST+VOIP+EMPLOYEE outbound \n.29 74.40.140.29 copy HOME 58 Home traffic + Nintendo Switch static port NAT \n.30 74.40.140.30 Gateway (Frontier) — ISP\
\ router \n.31 74.40.140.31 Broadcast — Unusable \n \n
\n
\n\n\n\n
pfSense Firewall \n
\n
\n
Netgate 4100
\n
\n Web: https://10.0.56.1 copy \n Credentials: admin / SCOOBY_entry1latimer copy \n SSH: admin@10.0.56.1 copy \n Hardware: 2x SFP+, 4x 2.5GbE (igc0-3) \n WAN: ix3 — LAN: igc0 (802.1Q trunk) \n Domain: iamworkin.lan \n \n
\n
\n
Firewall Stats
\n
\n Aliases: 36 (16 port, 5 host, 15 network) \n Rules: 90 active \n Policy: Air-gapped default — deny all, explicit allow \n SNMP: community bluejay_monitor copy \n SNMP Modules: mibII, netgraph, pf, hostres, bridge \n \n
\n
\n
Services
\n
\n DNS: Unbound (DNSSEC, WAN-only outgoing, prefetch) \n DHCP: dhcpd on all 12 VLAN interfaces (.100-.199) \n NTP: ntpd on all VLAN interfaces, DHCP option 42 \n Traffic Shaper: 24 dummynet pipes, fq_codel \n \n
\n
\n
VLAN Configuration (12 VLANs) \n
\nVLAN Name Subnet DHCP Range Down/Up (Mbps) Priority Public IP \n\n56 MGMT 10.0.56.0/24 .100-.199 500 / 500 5 WAN DHCP \n57 PROD 10.0.57.0/24 .100-.199 500 / 500 5 .21 \n58 HOME 10.0.58.0/24 .100-.199 800 / 800 3 .29 \n59 EMPLOYEE 10.0.59.0/24 .100-.199 500 / 500 3 .28 (shared) \n60 ANDREW 10.0.60.0/24 .100-.199 300 / 300 3 .17 \n61 MATT 10.0.61.0/24 .100-.199 300 / 300 3 .18 \n62 DUSTIN 10.0.62.0/24 .100-.199 300 / 300 3 .19 \n63 ERIK 10.0.63.0/24 .100-.199 300 / 300 3 .20 \n64 WORK 10.0.64.0/24 .100-.199 500 / 500 3 .28 (shared) \n65 SCHOOL 10.0.65.0/24 .100-.199 200 / 200 1 .28 (shared) \n66 GUEST 10.0.66.0/24 .100-.199 100 / 50 1 .28 (shared) \n67 VOIP 10.0.67.0/24 .100-.199 100 / 100 7 .28 (shared) \n \n
\n
Firewall Policy: MGMT has full access. HOME/WORK/SCHOOL get general internet. GUEST isolated except PROD web. Tenants fully isolated from each other — only PROD, DNS, NAS, and internet. VOIP is SIP-only outbound.
\n
\n\n\n\n
Switching & WiFi \n
\n
\n
UniFi Switch USW-Lite-16-PoE
\n
\n IP: 10.0.56.2 copy \n MAC: 74:ac:b9:e3:93:ba \n SSH: GOShDkH@10.0.56.2 copy \n SSH Password: 6IDvT8vmQH6QqsP copy \n Firmware: 7.2.123.16565 \n CLI: Type cli for Realtek switch CLI \n \n
\n
\n
UniFi Cloud Key G2
\n
\n Web: https://10.0.56.3 copy \n Credentials: admin / nest7BEGGAR*revoked copy \n SSH: root@10.0.56.3 / 6IDvT8vmQH6QqsP \n Network Version: 7.1.61 \n MongoDB: port 27117 (database ace) \n \n
\n
\n
Synology RT6600AX (AP Mode)
\n
\n Web: http://10.0.58.2:8000 copy \n Credentials: bluejay / galileo_parisian8ADMIRE copy \n SSH: bluejay@10.0.58.2 port 22 \n MAC: 90:09:d0:3d:64:ae \n Mode: AP (bridge), all trunk ports enabled \n \n
\n
\n
Switch Port Assignments \n
\nPort Device Mode VLAN Status \n\n1 pfSense Uplink Trunk (All) 56-67 UP \n2 harvester3 Trunk (All) 56-67 UP \n3 WiFi Uplink (Synology) Trunk, native 58 57-67 UP \n4 harvester2 Trunk (All) 56-67 UP \n5 Cloud Key G2 Access 56 (MGMT) UP (PoE) \n6 harvester1 Trunk (All) 56-67 UP \n7 Available — — Down \n8 noc1 Trunk (All) 56-67 UP \n9 Workstation Access 56 (MGMT) UP \n10 Available — — Down \n11 edge2 (Pi 4) Access 57 (PROD) UP \n12 Available — — Down \n13 edge1 (Pi 5) Access 57 (PROD) UP \n14 Synology NAS Access 58 (HOME) UP \n15 Available — — Down \n16 Synology 2 Access 58 (HOME) UP \n \n
\n
WiFi SSIDs \n
\nSSID Bridge VLAN Type Password \n\nBlueJay-Home br0 untagged (58) Primary Starling-Tundra-Condor-Coral copy \nBlueJay-Employee br2 59 Custom Merlin~Ivory~Oakleaf~Bramble copy \nBlueJay-Work br3 64 Custom Forge.Hawk.Oakleaf.Topaz copy \nBlueJay-School br4 65 Custom Harbor-Eagle-Condor-Topaz copy \nBlueJay-Guest gbr0 66 Guest (isolation+NAT) Eagle.Oriole.Osprey.Silver copy \n \n
\n
\n\n\n\n
DNS Directory \n
All entries are pfSense Unbound host overrides under iamworkin.lan. 42+ total entries configured.
\n
Management Devices \n
\nHostname IP Role \n\npfsense.iamworkin.lan 10.0.56.1 copy pfSense firewall \nswitch.iamworkin.lan 10.0.56.2 copy UniFi PoE Switch \nunifi.iamworkin.lan 10.0.56.3 copy UniFi Cloud Key G2 \nwifi.iamworkin.lan 10.0.58.2 copy Synology WiFi Router (AP) \nnas.iamworkin.lan 10.0.58.3 copy Synology NAS \n \n
\n
Harvester Cluster \n
\nHostname IP Role \n\nharvester.iamworkin.lan 10.0.56.14 copy Harvester VIP (cluster dashboard) \nharvester1.iamworkin.lan 10.0.56.11 copy Harvester node 1 \nharvester2.iamworkin.lan 10.0.56.12 copy Harvester node 2 \nharvester3.iamworkin.lan 10.0.56.13 copy Harvester node 3 \n \n
\n
NOC Services (noc1) \n
\nHostname IP Role \n\nnoc1.iamworkin.lan 10.0.56.10 copy NOC management node (K3s) \nacme.iamworkin.lan 10.0.56.10 step-ca ACME CA \npki.iamworkin.lan 10.0.56.10 PKI cert/CRL distribution \nguac.iamworkin.lan 10.0.56.10 Apache Guacamole \ngrafana.iamworkin.lan 10.0.56.10 Grafana monitoring \nprometheus.iamworkin.lan 10.0.56.10 Prometheus metrics \ncockpit.iamworkin.lan 10.0.56.10 Cockpit web console \ntraefik.iamworkin.lan 10.0.56.10 Traefik dashboard (K3s) \ngitea.iamworkin.lan 10.0.56.10 Gitea Git hosting (K3s, :3000/SSH :30022) \nirc.iamworkin.lan 10.0.56.10 UnrealIRCd IRC server (K3s, TLS 6697) \nintranet.iamworkin.lan 10.0.56.10 Lab intranet dashboard (K3s + Traefik TLS) \nzabbix.iamworkin.lan 10.0.56.10 Zabbix monitoring (K3s, :30083, 10 hosts) \nop-connect.iamworkin.lan 10.0.56.10 1Password Connect (planned) \n \n
\n
RKE2 Workload Cluster \n
\nHostname IP Role \n\nrke2.iamworkin.lan 10.0.56.118 copy RKE2 API server \nrke2-node1.iamworkin.lan 10.0.56.118 RKE2 node 1 (on harvester2) \nrke2-node2.iamworkin.lan 10.0.56.119 copy RKE2 node 2 (on harvester1) \nrke2-node3.iamworkin.lan 10.0.56.120 copy RKE2 node 3 (on harvester3) \nrke2-traefik.iamworkin.lan 10.0.56.200 copy Traefik LoadBalancer (MetalLB) \nrke2-ingress.iamworkin.lan 10.0.56.200 RKE2 ingress (MetalLB) \nargocd.iamworkin.lan 10.0.56.200 ArgoCD GitOps (RKE2 via Traefik) \ntest.iamworkin.lan 10.0.56.200 RKE2 test workload \n \n
\n
Production / Edge Nodes \n
\nHostname IP Role \n\nmacmini.iamworkin.lan 10.0.57.50 copy Mac Mini build node (Xcode) \nedge1.iamworkin.lan 10.0.57.15 copy Pi 5 + Hailo AI HAT+ 2 \nedge2.iamworkin.lan 10.0.57.16 copy Pi 4 (Argon ONE, CI runner) \n \n
\n
Planned / Windows (pre-registered) \n
\nHostname IP Role \n\ndc1.iamworkin.lan 10.0.56.20 copy AD Domain Controller (planned) \nwac1.iamworkin.lan 10.0.56.21 copy Windows Admin Center (planned) \nrds1.iamworkin.lan 10.0.57.20 copy Remote Desktop Services (planned) \niis1.iamworkin.lan 10.0.57.21 copy IIS Web Server (planned) \nproxy.iamworkin.lan 10.0.56.22 copy Squid Authenticated Proxy (planned) \n \n
\n
\n\n\n\n
Kubernetes Clusters \n
K3s (noc1 — Management Services) \n
\n
\n
K3s on noc1
\n
\n Node: 10.0.56.10 (single-node) \n Version: K3s v1.34.5 \n Traefik: Disabled (using NodePort) \n ServiceLB: Disabled \n Tools: kubectl v1.35.2, virtctl v1.7.0, helm v3.20.0 \n \n
\n
\n
K3s Services
\n
\n Guacamole — :30080 \n PKI Web — :30081 \n Gitea — :3000 (SSH :30022) \n UnrealIRCd + Anope — :6667/:6697 \n Zabbix — :30083 \n \n
\n
\n
Harvester HCI (VM Platform) \n
\n
\n
Harvester Cluster
\n
\n Dashboard: https://10.0.56.14 copy \n Credentials: admin / getup-billion4AGAINST copy \n Version: \
- \ Harvester v1.7.1 (K8s v1.34.3+rke2r3) \n Kubeconfig: /root/.kube/harvester.yaml on noc1 \n Cluster Token: iamworkin.bluejay \n \n
\n
\n
Harvester Nodes
\n
\n harvester1: 10.0.56.11 — i7-1260P / 64GB \n harvester2: 10.0.56.12 — i7-1260P / 64GB \n harvester3: 10.0.56.13 — i5-1340P / 64GB \n SSH: rancher@10.0.56.{11,12,13} \n Password: 1qaz@WSX3edc$RFV copy \n \n
\n
\n
Harvester Resources
\n
\n VM Images: 11 (Ubuntu, openSUSE, Windows, SQL Server) \n VM Networks: 13 (12 VLAN bridges + mgmt-untagged) \n Storage: Longhorn (replica count 2) \n Active VMs: rke2-node1, rke2-node2, rke2-node3 \n \n
\n
\n
RKE2 (Workload Cluster) \n
\n
\n
RKE2 Cluster
\n
\n Version: RKE2 v1.34.4+rke2r1 \n OS: openSUSE Leap 16.0 (cloud image) \n CNI: Calico (VXLAN mode) \n Pod CIDR: 10.42.0.0/16 \n Service CIDR: 10.43.0.0/16 \n Kubeconfig: /root/.kube/rke2.yaml on noc1 \n Token: bluejay-rke2-2026 \n Root Password: BlueJay-RKE2-2026 copy \n \n
\n
\n
RKE2 Nodes
\n
\n rke2-node1: 10.0.56.118 (on harvester2) \n rke2-node2: 10.0.56.119 (on harvester1) \n rke2-node3: 10.0.56.120 (on harvester3) \n Specs: 4 vCPU, 16Gi RAM, 80Gi disk each \n SSH Key: /root/.ssh/rke2-nodes (ed25519) \n \n
\n
\n
RKE2 Infrastructure
\n
\n MetalLB: v0.14.9, L2 mode, pool 10.0.56.200-220 \n Traefik: v3.6.9, 2 replicas, LB 10.0.56.200 \n Namespaces: fc-system, fc-tenant-andrew, fc-tenant-matt, fc-tenant-dustin, fc-tenant-erik, test, traefik-system, metallb-system \n NetworkPolicies: Applied to all 5 tenant namespaces \n Test: nginx + IngressRoute on test.iamworkin.lan verified \n \n
\n
\n
pfSense Static Routes (K8s) \n
\nDestination Gateway Purpose \n\n10.42.0.0/16 10.0.56.118 (rke2-node1)Pod CIDR routing \n10.43.0.0/16 10.0.56.118 (rke2-node1)Service CIDR routing \n \n
\n
\n\n\n\n
NOC Services (noc1) \n
\n
\n
noc1 Host
\n
\n IP: 10.0.56.10 copy \n SSH: root@10.0.56.10 copy \n Password: 1qaz@WSX3edc$RFV copy \n OS: openSUSE Leap Micro 6.2 (immutable) \n CPU: Intel Celeron N5105 (4C/4T) \n RAM: 32 GB \n Disk: 1TB NVMe (929GB free) \n Runtimes: Podman 5.4.2, K3s v1.34.5 \n \n
\n
\n
Service Directory \n
\n
RKE2 Services \n
\nService URL Port Credentials Status \n\nArgoCD https://argocd.iamworkin.lan 443 (via Traefik) admin / Hau6JLvtxeFoEKMC copy — bluejay / BlueJay-ArgoCD-2026 copy Online \nTraefik https://rke2-traefik.iamworkin.lan 80/443 (MetalLB 10.0.56.200) Dashboard: :8080 Online \n \nPrometheus Alerting (8 rules) \nNodeDown, PfSenseDown, HighCPU, HighMemory, DiskSpaceLow, and 3 additional rules. 2 Grafana dashboards: Node Exporter Full + BlueJay Network Overview.
\nGuacamole Connection Groups (16 connections) \n\nGroup Connections Protocol \n\nKubernetes (6)Harvester 1, Harvester 2, Harvester 3, RKE2 Node 1,\
- \ RKE2 Node 2, RKE2 Node 3 SSH \nNetwork Devices (4)pfSense, UniFi Cloud Key, UniFi Switch, Synology WiFi SSH \nServers (5)noc1, Mac Mini (SSH+VNC), Edge1 Pi5, Synology NAS, Edge2 Pi4 SSH/VNC \nWeb Consoles (1)Harvester Dashboard HTTPS \n \n
\n\n\n\n\n
VPN & Security \n
OpenVPN Status: 8 servers were configured and verified but have been cleaned out pending ISP /28 fix. CA and certificates remain in pfSense config. Will re-create bound to new tenant VIPs (.17-.20) after Frontier restores /28 routing.
\n
OpenVPN Configuration \n
\nTenant VIP TUN Port TAP Port Tunnel (TUN) Tunnel (TAP) VLAN \n\nANDREW .17 1194/UDP 1195/UDP 10.0.68.0/27 10.0.68.128/27 60 \nMATT .18 1194/UDP 1195/UDP 10.0.68.32/27 10.0.68.160/27 61 \nDUSTIN .19 1194/UDP 1195/UDP 10.0.68.64/27 10.0.68.192/27 62 \nERIK .20 1194/UDP 1195/UDP 10.0.68.96/27 10.0.68.224/27 63 \n \n
\n
VPN Certificate Infrastructure \n
\nComponent Details \n\nCA BlueJay VPN CA (4096-bit RSA, SHA-256, 10-year) \nServer Certs 8 (one per VPN instance, 2048-bit RSA) \nClient Certs 4 (one per tenant, 2048-bit RSA) \nTLS Auth Shared HMAC key across all servers \nData Ciphers AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 \n \n
\n
IPsec Site-to-Site (Planned) \n
\nTunnel Local Remote Phase 1 Phase 2 SAs \n\nMatt .29 (pfSense WAN) Matt's public IP IKEv2, AES-256-GCM, DH 14+ MATT (10.0.61.0/24) + PROD (10.0.57.0/24) \nDustin .29 (pfSense WAN) Dustin's public IP IKEv2, AES-256-GCM, DH 14+ DUSTIN (10.0.62.0/24) + PROD (10.0.57.0/24) \n \n
\n
PKI Hierarchy \n
\nCA Status Purpose \n\nRoot CA (IAmWorkin ACME CA) Operational Trust anchor, ECDSA P-256, expires 2036 \nACME CA (step-ca on noc1) Operational Automated cert issuance via ACME protocol \nNetwork CA Planned Switch, AP, pfSense device certs \nWindows AD CS CA Planned Domain-joined machine/user certs \nInternal Services CA Planned K8s service mesh, inter-service mTLS \n \n
\n
\n\n\n\n
Edge Nodes \n
\n
\n
edge1 — Raspberry Pi 5 + Hailo AI
\n
\n IP: 10.0.57.15 copy (PROD VLAN 57) \n SSH: stoltz@10.0.57.15 copy \n Password: 1qaz@WSX3edc$RFV copy \n Hardware: Pi 5 16GB + Hailo-10H 40 TOPS \n OS: Debian 13 (trixie) aarch64 \n PCIe: Gen 3 x1 (8.0 GT/s) \n Power: 27W USB-C \n .NET SDK: 10.0.103 \n GitHub Runner: v2.332.0 (labels: pi5, hailo) \n Node Exporter: :9100 \n Switch Port: 13 \n \n
\n
\n
edge2 — Raspberry Pi 4 (Argon ONE)
\n
\n IP: 10.0.57.16 copy (PROD VLAN 57) \n SSH: stoltz@10.0.57.16 copy \n Password: 1qaz@WSX3edc$RFV \n Hardware: Pi 4 Model B 4GB, Argon ONE case \n OS: Debian 13 (trixie) aarch64 \n Fan Control: argononed.service \n .NET SDK: 10.0.103 \n GitHub Runner: v2.332.0 (labels: pi4, ci-runner) \n Node Exporter: :9100 \n Switch Port: 11 \n \n
\n
\n
Mac Mini (Build/Test Node)
\n
\n IP: 10.0.57.50 copy (PROD VLAN 57) \n SSH: bluejay@10.0.57.50 copy \n Password: indigene-new-neptune-nuthatch copy \n VNC Password: tacokisses copy \n Role: Xcode builds, automated browser/app testing \n \n
\n
\n
\n\n\n\n
WiFi Networks \n
Credentials: All WiFi passwords are stored in the IAmWorkin vault on 1Password. To connect a device, open the 1Password app, find the WiFi entry, and scan the QR code from there. Passwords are not stored in this page for security.
\n
QR Code Connection: Open 1Password → search for the SSID name → tap “Show QR Code” → scan with your device camera. The QR code encodes the full WIFI:T:WPA;S:{SSID};P:{PASSWORD};;; connection string.
\n\n
\n \n
\n \n
\n
\n \n \n \n \n \n Scan from 1Password app \n
\n
\n
\n
\n SSID \n BlueJay-Home \n
\n
\n VLAN \n 58 (untagged on AP) \n
\n
\n Security \n WPA2/WPA3 \n
\n
\n Password \n See 1Password \n
\n
\n Purpose \n Home network — personal / family use \n
\n
Merlin~Ivory~Oakleaf~Bramble copy \n
BlueJay-Work br3 64 Custom Forge.Hawk.Oakleaf.Topaz copy \nBlueJay-School br4 65 Custom Harbor-Eagle-Condor-Topaz copy \nBlueJay-Guest gbr0 66 Guest (isolation+NAT) Eagle.Oriole.Osprey.Silver copy \n\n
\n
\n\n\n\n
DNS Directory \n
All entries are pfSense Unbound host overrides under iamworkin.lan. 42+ total entries configured.
\n
Management Devices \n
\nHostname IP Role \n\npfsense.iamworkin.lan 10.0.56.1 copy pfSense firewall \nswitch.iamworkin.lan 10.0.56.2 copy UniFi PoE Switch \nunifi.iamworkin.lan 10.0.56.3 copy UniFi Cloud Key G2 \nwifi.iamworkin.lan 10.0.58.2 copy Synology WiFi Router (AP) \nnas.iamworkin.lan 10.0.58.3 copy Synology NAS \n \n
\n
Harvester Cluster \n
\nHostname IP Role \n\nharvester.iamworkin.lan 10.0.56.14 copy Harvester VIP (cluster dashboard) \nharvester1.iamworkin.lan 10.0.56.11 copy Harvester node 1 \nharvester2.iamworkin.lan 10.0.56.12 copy Harvester node 2 \nharvester3.iamworkin.lan 10.0.56.13 copy Harvester node 3 \n \n
\n
NOC Services (noc1) \n
\nHostname IP Role \n\nnoc1.iamworkin.lan 10.0.56.10 copy NOC management node (K3s) \nacme.iamworkin.lan 10.0.56.10 step-ca ACME CA \npki.iamworkin.lan 10.0.56.10 PKI cert/CRL distribution \nguac.iamworkin.lan 10.0.56.10 Apache Guacamole \ngrafana.iamworkin.lan 10.0.56.10 Grafana monitoring \nprometheus.iamworkin.lan 10.0.56.10 Prometheus metrics \ncockpit.iamworkin.lan 10.0.56.10 Cockpit web console \ntraefik.iamworkin.lan 10.0.56.10 Traefik dashboard (K3s) \ngitea.iamworkin.lan 10.0.56.10 Gitea Git hosting (K3s, :3000/SSH :30022) \nirc.iamworkin.lan 10.0.56.10 UnrealIRCd IRC server (K3s, TLS 6697) \nintranet.iamworkin.lan 10.0.56.10 Lab intranet dashboard (K3s + Traefik TLS) \nzabbix.iamworkin.lan 10.0.56.10 Zabbix monitoring (K3s, :30083, 10 hosts) \nop-connect.iamworkin.lan 10.0.56.10 1Password Connect (planned) \n \n
\n
RKE2 Workload Cluster \n
\nHostname IP Role \n\nrke2.iamworkin.lan 10.0.56.118 copy RKE2 API server \nrke2-node1.iamworkin.lan 10.0.56.118 RKE2 node 1 (on harvester2) \nrke2-node2.iamworkin.lan 10.0.56.119 copy RKE2 node 2 (on harvester1) \nrke2-node3.iamworkin.lan 10.0.56.120 copy RKE2 node 3 (on harvester3) \ntraefik.iamworkin.lan 10.0.56.200 copy Traefik LoadBalancer (MetalLB) \nrke2-ingress.iamworkin.lan 10.0.56.200 RKE2 ingress (MetalLB) \nargocd.iamworkin.lan 10.0.56.200 ArgoCD GitOps (RKE2 via Traefik) \ntest.iamworkin.lan 10.0.56.200 RKE2 test workload \n \n
\n
Production / Edge Nodes \n
\nHostname IP Role \n\nmacmini.iamworkin.lan 10.0.57.50 copy Mac Mini build node (Xcode) \nedge1.iamworkin.lan 10.0.57.15 copy Pi 5 + Hailo AI HAT+ 2 \nedge2.iamworkin.lan 10.0.57.16 copy Pi 4 (Argon ONE, CI runner) \n \n
\n
Planned / Windows (pre-registered) \n
\nHostname IP Role \n\ndc1.iamworkin.lan 10.0.56.20 copy AD Domain Controller (planned) \nwac1.iamworkin.lan 10.0.56.21 copy Windows Admin Center (planned) \nrds1.iamworkin.lan 10.0.57.20 copy Remote Desktop Services (planned) \niis1.iamworkin.lan 10.0.57.21 copy IIS Web Server (planned) \nproxy.iamworkin.lan 10.0.56.22 copy Squid Authenticated Proxy (planned) \n \n
\n
\n\n\n\n
Kubernetes Clusters \n
K3s (noc1 — Management Services) \n
\n
\n
K3s on noc1
\n
\n Node: 10.0.56.10 (single-node) \n Version: K3s v1.34.5 \n Traefik: Disabled (using NodePort) \n ServiceLB: Disabled \n Tools: kubectl v1.35.2, virtctl v1.7.0, helm v3.20.0 \n \n
\n
\n
K3s Services
\n
\n Guacamole — :30080 \n PKI Web — :30081 \n Gitea — :3000 (SSH :30022) \n UnrealIRCd + Anope — :6667/:6697 \n Zabbix — :30083 \n \n
\n
\n
Harvester HCI (VM Platform) \n
\n
\n
Harvester Cluster
\n
\n Dashboard: https://10.0.56.14 copy \n Credentials: admin / getup-billion4AGAINST copy \n Version: \
+ \ DECOMMISSIONED — Replaced by Bare-Metal RKE2 \n Kubeconfig: /home/stoltz/.kube/rke2.yaml (WSL) on noc1 \n Cluster Token: See 1Password \n \n
\n
\n
Harvester Nodes
\n
\n rke2-server: 10.0.56.11 — i7-1260P / 64GB \n rke2-agent1: 10.0.56.12 — i7-1260P / 64GB \n rke2-agent2: 10.0.56.13 — i5-1340P / 64GB (bare-metal openSUSE Leap 16) \n SSH: root@10.0.56.{11,12,13} (ed25519 key auth) \n Password: SSH Key Only — See 1Password \n \n
\n
\n
Harvester Resources
\n
\n VM Images: 11 (Ubuntu, openSUSE, Windows, SQL Server) \n VM Networks: 13 (12 VLAN bridges + mgmt-untagged) \n Storage: Longhorn (replica count 2) \n Active VMs: rke2-node1, rke2-node2, rke2-node3 \n \n
\n
\n
RKE2 (Workload Cluster) \n
\n
\n
RKE2 Cluster
\n
\n Version: RKE2 v1.34.5+rke2r1 \n OS: openSUSE Leap 16.0 (bare-metal) \n CNI: Calico (VXLAN mode) \n Pod CIDR: 10.42.0.0/16 \n Service CIDR: 10.43.0.0/16 \n Kubeconfig: /root/.kube/rke2.yaml on noc1 \n Token: bluejay-rke2-2026 \n Root Password: BlueJay-RKE2-2026 copy \n \n
\n
\n
RKE2 Nodes
\n
\n rke2-server: 10.0.56.11 (bare-metal) \n rke2-agent1: 10.0.56.12 (bare-metal) \n rke2-agent2: 10.0.56.13 (bare-metal) \n Specs: Full NUC hardware (bare-metal) \n SSH Key: ed25519 key (stoltz@IAMWORKIN-WS) (ed25519) \n \n
\n
\n
RKE2 Infrastructure
\n
\n MetalLB: v0.14.9, L2 mode, pool 10.0.56.200-220 \n Traefik: v3.6.9, 2 replicas, LB 10.0.56.200 \n Namespaces: fc-system, fc-tenant-andrew, fc-tenant-matt, fc-tenant-dustin, fc-tenant-erik, test, traefik-system, metallb-system \n NetworkPolicies: Applied to all 5 tenant namespaces \n Test: nginx + IngressRoute on test.iamworkin.lan verified \n \n
\n
\n
pfSense Static Routes (K8s) \n
\nDestination Gateway Purpose \n\n10.42.0.0/16 10.0.56.11 (rke2-server)Pod CIDR routing \n10.43.0.0/16 10.0.56.11 (rke2-server)Service CIDR routing \n \n
\n
\n\n\n\n
NOC Services (noc1) \n
\n
\n
noc1 Host
\n
\n IP: 10.0.56.10 copy \n SSH: root@10.0.56.10 copy \n Password: harbor-badge-kitten-valley-falcon copy \n OS: openSUSE Leap Micro 6.2 (immutable) \n CPU: Intel Celeron N5105 (4C/4T) \n RAM: 32 GB \n Disk: 1TB NVMe (929GB free) \n Runtimes: Podman 5.4.2, K3s v1.34.5 \n \n
\n
\n
Service Directory \n
\n
RKE2 Services \n
\nService URL Port Credentials Status \n\nArgoCD https://argocd.iamworkin.lan 443 (via Traefik) admin / 6KJcJtH3SCAPrWVQ copy — bluejay / 6KJcJtH3SCAPrWVQ copy Online \nTraefik https://traefik.iamworkin.lan 80/443 (MetalLB 10.0.56.200) admin / zenith-turret-falcon-umber (BasicAuth)Online \n \nPrometheus Alerting (8 rules) \nNodeDown, PfSenseDown, HighCPU, HighMemory, DiskSpaceLow, and 3 additional rules. 2 Grafana dashboards: Node Exporter Full + BlueJay Network Overview.
\nGuacamole Connection Groups (16 connections) \n\nGroup Connections Protocol \n\nKubernetes (6)rke2-server, rke2-agent1, rke2-agent2,\
+ \ noc1 SSH \nNetwork Devices (4)pfSense, UniFi Cloud Key, UniFi Switch, Synology WiFi SSH \nServers (5)noc1, Mac Mini (SSH+VNC), Edge1 Pi5, Synology NAS, Edge2 Pi4 SSH/VNC \nWeb Consoles (1)Traefik Dashboard HTTPS \n \n
\n\n\n\n\n
VPN & Security \n
OpenVPN Status: 8 servers were configured and verified but have been cleaned out pending ISP /28 fix. CA and certificates remain in pfSense config. Will re-create bound to new tenant VIPs (.17-.20) after Frontier restores /28 routing.
\n
OpenVPN Configuration \n
\nTenant VIP TUN Port TAP Port Tunnel (TUN) Tunnel (TAP) VLAN \n\nANDREW .17 1194/UDP 1195/UDP 10.0.68.0/27 10.0.68.128/27 60 \nMATT .18 1194/UDP 1195/UDP 10.0.68.32/27 10.0.68.160/27 61 \nDUSTIN .19 1194/UDP 1195/UDP 10.0.68.64/27 10.0.68.192/27 62 \nERIK .20 1194/UDP 1195/UDP 10.0.68.96/27 10.0.68.224/27 63 \n \n
\n
VPN Certificate Infrastructure \n
\nComponent Details \n\nCA BlueJay VPN CA (4096-bit RSA, SHA-256, 10-year) \nServer Certs 8 (one per VPN instance, 2048-bit RSA) \nClient Certs 4 (one per tenant, 2048-bit RSA) \nTLS Auth Shared HMAC key across all servers \nData Ciphers AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 \n \n
\n
IPsec Site-to-Site (Planned) \n
\nTunnel Local Remote Phase 1 Phase 2 SAs \n\nMatt .29 (pfSense WAN) Matt's public IP IKEv2, AES-256-GCM, DH 14+ MATT (10.0.61.0/24) + PROD (10.0.57.0/24) \nDustin .29 (pfSense WAN) Dustin's public IP IKEv2, AES-256-GCM, DH 14+ DUSTIN (10.0.62.0/24) + PROD (10.0.57.0/24) \n \n
\n
PKI Hierarchy \n
\nCA Status Purpose \n\nRoot CA (IAmWorkin ACME CA) Operational Trust anchor, ECDSA P-256, expires 2036 \nACME CA (step-ca on noc1) Operational Automated cert issuance via ACME protocol \nNetwork CA Planned Switch, AP, pfSense device certs \nWindows AD CS CA Planned Domain-joined machine/user certs \nInternal Services CA Planned K8s service mesh, inter-service mTLS \n \n
\n
\n\n\n\n
Edge Nodes \n
\n
\n
edge1 — Raspberry Pi 5 + Hailo AI
\n
\n IP: 10.0.57.15 copy (PROD VLAN 57) \n SSH: stoltz@10.0.57.15 copy \n Password: lemon-torch-ruby-raven copy \n Hardware: Pi 5 16GB + Hailo-10H 40 TOPS \n OS: Debian 13 (trixie) aarch64 \n PCIe: Gen 3 x1 (8.0 GT/s) \n Power: 27W USB-C \n .NET SDK: 10.0.103 \n GitHub Runner: v2.332.0 (labels: pi5, hailo) \n Node Exporter: :9100 \n Switch Port: 13 \n \n
\n
\n
edge2 — Raspberry Pi 4 (Argon ONE)
\n
\n IP: 10.0.57.16 copy (PROD VLAN 57) \n SSH: stoltz@10.0.57.16 copy \n Password: nebula-cipher-indigo-tango \n Hardware: Pi 4 Model B 4GB, Argon ONE case \n OS: Debian 13 (trixie) aarch64 \n Fan Control: argononed.service \n .NET SDK: 10.0.103 \n GitHub Runner: v2.332.0 (labels: pi4, ci-runner) \n Node Exporter: :9100 \n Switch Port: 11 \n \n
\n
\n
Mac Mini (Build/Test Node)
\n
\n IP: 10.0.57.50 copy (PROD VLAN 57) \n SSH: bluejay@10.0.57.50 copy \n Password: indigene-new-neptune-nuthatch copy \n VNC Password: tacokisses copy \n Role: Xcode builds, automated browser/app testing \n \n
\n
\n
\n\n\n\n
WiFi Networks \n
Credentials: All WiFi passwords are stored in the IAmWorkin vault on 1Password. To connect a device, open the 1Password app, find the WiFi entry, and scan the QR code from there. Passwords are not stored in this page for security.
\n
QR Code Connection: Open 1Password → search for the SSID name → tap “Show QR Code” → scan with your device camera. The QR code encodes the full WIFI:T:WPA;S:{SSID};P:{PASSWORD};;; connection string.
\n\n
\n \n
\n \n
\n
\n \n \n \n \n \n Scan from 1Password app \n
\n
\n
\n
\n SSID \n BlueJay-Home \n
\n
\n VLAN \n 58 (untagged on AP) \n
\n
\n Security \n WPA2/WPA3 \n
\n
\n Password \n See 1Password \n
\n
\n Purpose \n Home network — personal / family use \n
\n
\n Bandwidth \n 800 / 800 Mbps \n
\n
\n Public IP \n 74.40.140.29 \n
\n
\n
\n\n \n
\n \n
\n
\n \n \n \n \n \n Scan from 1Password app \n
\n
\n
\n
\n SSID \n BlueJay-Employee \n
\n
\n VLAN \n 59 \n
\n
\n Security \n WPA2/WPA3 \n
\n
\n Password \n See 1Password \n
\n
\n Purpose \n Employee network — staff device access \n
\n
\n Bandwidth \n 500 / 500 Mbps \n
\n
\n Public IP \n 74.40.140.28 (shared) \n
\n
\n
\n\n \n
\n \n
\n
\n \n \n \n \n \n Scan from 1Password app \n
\n
\n
\n
\n SSID \n BlueJay-Work \n
\n
\n VLAN \n 64 \n
\n
\n Security \n WPA2/WPA3 \n
\n
\n Password \n See 1Password \n
\n
\n Purpose \n Work network — business devices \n
\n
\n Bandwidth \n 500 / 500 Mbps \n
\n
\n Public IP \n 74.40.140.28 (shared) \n
\n
\n
\n\n \n
\n \n
\n
\n \n \n \n \n \n Scan from 1Password app \n
\n
\n
\n
\n SSID \n BlueJay-School \n
\n
\n VLAN \n 65 \n
\n
\n Security \n WPA2/WPA3 \n
\n
\n Password \n See 1Password \n
\n
\n Purpose \n School network — student devices \n
\n
\n Bandwidth \n 200 / 200 Mbps \n
\n
\n Public IP \n 74.40.140.28 (shared) \n
\n
\n
\n\n \n
\n \n
\n
\n \n \n \n \n \n Open network — no password required \n
\n
\n
\n
\n SSID \n BlueJay-Guest \n
\n
\n VLAN \n 66 \n
\n
\n Security \n Open / Captive Portal \n
\n
\n Password \n None (open) \n
\n
\n Purpose \n Guest WiFi — fully isolated, NAT only \n
\n
\n Bandwidth \n 100 / 50 Mbps \n
\n
\n Public IP \n 74.40.140.28 (shared) \n
\n
\n
\n
\n\n
WiFi Access Point \n
\n
\n
Synology RT6600AX (AP Mode)
\n
\n Management: http://10.0.58.2:8000 \n Credentials: bluejay / galileo_parisian8ADMIRE copy \n Mode: Access Point (bridge mode), all trunk ports enabled \n Bands: Wi-Fi 6E (2.4 GHz + 5 GHz + 6 GHz) \n Switch Port: 3 (trunk, native VLAN 58) \n \n
\n
\n\n
Network Isolation: Each SSID maps to a separate VLAN with independent firewall rules and bandwidth limits. GUEST is fully isolated with NAT — no access to internal resources. EMPLOYEE, WORK, and SCHOOL share public IP .28 with traffic shaping.
\n
\n\n\n\n
Credentials & 1Password \n
\n
\n
1Password Connect Server
\n
\n API: http://10.0.56.10:8180 copy \n Sync: http://10.0.56.10:8181 \n Host: noc1 (Podman containers) \n Status: Online \n \n
\n
\n
1Password K8s Operator
\n
\n Namespace: onepassword-system \n Chart: 1password/connect v2.3.0 \n Operator: v1.11.0 \n Poll Interval: 600s \n Status: Online \n \n
\n
\n
IAmWorkin Vault
\n
\n Vault Name: IAmWorkin \n Items: 26+ credentials \n Rotation: Quarterly (Jan/Apr/Jul/Oct) \n Script: /opt/scripts/rotate-credentials.sh \n Timer: credential-rotation.timer \n \n
\n
\n\n
All infrastructure credentials are managed in 1Password. The IAmWorkin vault contains credentials for every service listed on this intranet. K8s workloads (Zabbix, Matrix, Guacamole, Mail, IRC, Gitea, ArgoCD) sync secrets automatically via OnePasswordItem CRDs. Credential rotation runs quarterly via systemd timer.
\n\n
K8s Secret Sync (OnePasswordItem CRDs) \n
\nNamespace Secret Name Source (1Password Item) Status \n\nzabbix zabbix-credentials Zabbix Monitoring Synced \nmatrix matrix-credentials Matrix Synapse Synced \nguacamole guacamole-credentials Apache Guacamole Synced \nmail mail-credentials Mail Server Synced \nirc irc-credentials IRC Services Synced \ngitea gitea-credentials Gitea Synced \nargocd argocd-credentials ArgoCD Synced \n \n
\n\n
Credential Rotation \n
\n
\n
Rotation Script
\n
\n Path: /opt/scripts/rotate-credentials.sh \n Usage: rotate-credentials.sh {service|all} [--dry-run] \n Services: grafana, guacamole, zabbix, argocd, gitea, snappymail, traefik, matrix, harvester \n Schedule: Quarterly (1st of Jan/Apr/Jul/Oct at 03:00 UTC) \n Log: /var/log/credential-rotation.log \n \n
\n
\n
\n\n\n\n
Planned Services \n
\nService IP Host Role Status \n\nWindows DC1 10.0.56.20 Harvester VM AD Domain Controller (iamworkin.lan) Planned \nWindows WAC1 10.0.56.21 Harvester VM Windows Admin Center Planned \nWindows RDS1 10.0.57.20 Harvester VM Remote Desktop Services Planned \nWindows IIS1 10.0.57.21 Harvester VM IIS Web Server Planned \nGitea 10.0.56.10 K3s (noc1) Git hosting (gitea.iamworkin.lan) Live \nUnrealIRCd 10.0.56.10 K3s (noc1) IRC server (irc.iamworkin.lan:6697) Live \nZabbix 10.0.56.10 K3s (noc1) Network monitoring (zabbix.iamworkin.lan, 10 hosts) Live \n1Password Connect 10.0.56.10 noc1 Secrets management API Planned \nSquid Proxy 10.0.56.22 Harvester VM Authenticated web proxy (Kerberos/LDAP) Planned \nArgoCD 10.0.56.200 RKE2 (via Traefik) GitOps for K8s workloads (argocd.iamworkin.lan) Live \n \n
\n
\n\n\n\n
Network Topology \n
\n\n
\n
\n
Frontier ONT + NVG468MQ Modem
WAN: 74.32.187.152 • /28: .17-.29
192.168.254.254 • DMZ to pfSense
\n
\n
pfSense Netgate 4100
WAN: ix3 (.122) • LAN: igc0 (802.1Q trunk)
12 VLANs • 36 aliases • 90 rules • DNS/DHCP/NTP/SNMP
\n
\n
UniFi USW-Lite-16-PoE Switch
10.0.56.2 • 16 ports • VLANs 56-67
\n
\n\n
\n
\n
noc1
\n
10.0.56.10 MGMT
\n
Celeron N5105 • 32GB • K3s + Podman
\n
\n Guacamole :30080 Grafana :3000 Prometheus :9091 \n step-ca :9443 Gitea :3000 IRC :6697 \n Zabbix :30083 Cockpit\
- \ :9090 Puppet :8140 \n \n
\n
\n
Harvester Cluster
\n
VIP: 10.0.56.14 MGMT
\n
\n harvester1: .11 (i7-1260P/64GB) \n harvester2: .12 (i7-1260P/64GB) \n harvester3: .13 (i5-1340P/64GB) \n \n
Harvester v1.7.1 • Longhorn • Rancher embedded
\n
\n
\n
RKE2 Workload Cluster
\n
Traefik: 10.0.56.200 MGMT
\n
\n rke2-node1: .118 (on harvester2) \n rke2-node2: .119 (on harvester1) \n rke2-node3: .120 (on harvester3) \n \n
Calico • MetalLB • Traefik v3.6.9 • ArgoCD
\n
\n
\n
WiFi (Synology RT6600AX)
\n
10.0.58.2 HOME
\n
\n BlueJay-Home (untagged) BlueJay-Employee (VLAN 59) \n BlueJay-Work (VLAN 64) BlueJay-School (VLAN 65) \n BlueJay-Guest (VLAN 66) \n \n
\n
\n
PROD Nodes
\n
PROD VLAN 57
\n
\n Mac Mini: 10.0.57.50 (Xcode) \n edge1 Pi5: 10.0.57.15 (Hailo AI) \n edge2 Pi4: 10.0.57.16 (CI runner) \n \n
\n
\n
Network Devices
\n
\n Cloud Key: 10.0.56.3 \n NAS: 10.0.58.3 \n Modem: 192.168.254.254 \n \n
\n
\n
\n
\n\n\n\n
Domains \n
\n
\n
\n
1
Blog Hosting (DreamHost)
\n
\n
\n\n
FlowerCore Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\nflowercore.io FlowerCore Andrew Production API Cloudflare Namecheap \nflowerinsider.xyz FlowerCore Andrew Dev/staging Namecheap Namecheap \nflowerinsider.com FlowerCore Co Andrew Company site Namecheap Namecheap \nflowerinsider.nl FlowerCore Co Andrew Dutch site Namecheap Namecheap \n \n
\n\n
Work Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\niamwork.in Work Andrew Employee portal, IVR Namecheap Namecheap \niamworkin.com Work Andrew Redirect Namecheap Namecheap \n \n
\n\n
Personal & Tenant Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\nackeroni.com Erik Erik Personal Namecheap Namecheap \nerckak.com Erik Erik Personal Namecheap Namecheap \nerckak.dev Erik Erik Developer portfolio Namecheap Namecheap \ndigirido.com Random Andrew DigiKey testing Namecheap Namecheap \ntimeforta.co Dustin Dustin Personal Namecheap Namecheap \nshenanjia.com Wife Wife Personal site Namecheap Namecheap \nbluejay.api Personal Fun Andrew API experiments Namecheap Namecheap \nbluejay.dev Personal Fun Andrew Dev projects Namecheap Namecheap \njayblue.dev Personal Fun Andrew Dev projects Namecheap Namecheap \nz.orb Random Andrew Short URL Namecheap Namecheap \n \n
\n\n
Blog & Content Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\npebbleandpeanut.com Blog Andrew Personal blog DreamHost Namecheap \npebblesandpeanuts.com Blog Andrew Alt redirect Namecheap Namecheap \n \n
\n\n
Internal Domain \n
\nDomain Category Owner Purpose DNS Provider Notes \n\niamworkin.lan Internal Andrew Internal infrastructure, future AD DS pfSense Unbound 43+ host overrides, not publicly registered \n \n
\n\n
Namecheap API \n
\n
\n
API Configuration
\n
\n Base URL: https://api.namecheap.com/xml.response copy \n API User: astoltz copy \n API Key: e36f347844fb4cc3a82d4e0f4e4af82e copy \n Sandbox URL: https://api.sandbox.namecheap.com/xml.response copy \n \n
\n
\n
Dynamic DNS
\n
\n Hostname: gateway.iamwork.in copy \n Points to: pfSense WAN IP (auto-updated) \n DDNS Endpoint: https://dynamicdns.park-your-domain.com/update?host=gateway&domain=iamwork.in&password=d8ad7194c9224c26bc50cfa5feb8764e copy \n Update Method: pfSense Dynamic DNS client or cron \n \n
\n
\n\n
Internal DNS Architecture \n
Split-Horizon DNS (planned): External requests to flowercore.io resolve via Cloudflare to public IP .21. Internal requests resolve via pfSense Unbound to K8s MetalLB VIP (10.0.56.200), avoiding NAT hairpin. All internal infrastructure uses iamworkin.lan zone.
\n\n
Planned IPv6 (ULA) \n
\nPrefix Scheme Method \n\nfdbc:56:XX::/64XX = VLAN ID (e.g., fdbc:56:56::/64 for MGMT) SLAAC + DHCPv6 (servers),\
+ \ :9090Puppet :8140 \n \n \n \n
Harvester Cluster
\n
VIP: 10.0.56.14 MGMT
\n
\n harvester1: .11 (i7-1260P/64GB) \n harvester2: .12 (i7-1260P/64GB) \n harvester3: .13 (i5-1340P/64GB) \n \n
Harvester v1.7.1 • Longhorn • Rancher embedded
\n
\n \n
RKE2 Workload Cluster
\n
Traefik: 10.0.56.200 MGMT
\n
\n rke2-node1: .118 (on harvester2) \n rke2-node2: .119 (on harvester1) \n rke2-node3: .120 (on harvester3) \n \n
Calico • MetalLB • Traefik v3.6.10 • ArgoCD
\n
\n \n
WiFi (Synology RT6600AX)
\n
10.0.58.2 HOME
\n
\n BlueJay-Home (untagged) BlueJay-Employee (VLAN 59) \n BlueJay-Work (VLAN 64) BlueJay-School (VLAN 65) \n BlueJay-Guest (VLAN 66) \n \n
\n \n
PROD Nodes
\n
PROD VLAN 57
\n
\n Mac Mini: 10.0.57.50 (Xcode) \n edge1 Pi5: 10.0.57.15 (Hailo AI) \n edge2 Pi4: 10.0.57.16 (CI runner) \n \n
\n \n
Network Devices
\n
\n Cloud Key: 10.0.56.3 \n NAS: 10.0.58.3 \n Modem: 192.168.254.254 \n \n
\n\n\n\n\n\n\n
Domains \n
\n
\n
\n
1
Blog Hosting (DreamHost)
\n
\n
\n\n
FlowerCore Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\nflowercore.io FlowerCore Andrew Production API Cloudflare Namecheap \nflowerinsider.xyz FlowerCore Andrew Dev/staging Namecheap Namecheap \nflowerinsider.com FlowerCore Co Andrew Company site Namecheap Namecheap \nflowerinsider.nl FlowerCore Co Andrew Dutch site Namecheap Namecheap \n \n
\n\n
Work Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\niamwork.in Work Andrew Employee portal, IVR Namecheap Namecheap \niamworkin.com Work Andrew Redirect Namecheap Namecheap \n \n
\n\n
Personal & Tenant Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\nackeroni.com Erik Erik Personal Namecheap Namecheap \nerckak.com Erik Erik Personal Namecheap Namecheap \nerckak.dev Erik Erik Developer portfolio Namecheap Namecheap \ndigirido.com Random Andrew DigiKey testing Namecheap Namecheap \ntimeforta.co Dustin Dustin Personal Namecheap Namecheap \nshenanjia.com Wife Wife Personal site Namecheap Namecheap \nbluejay.api Personal Fun Andrew API experiments Namecheap Namecheap \nbluejay.dev Personal Fun Andrew Dev projects Namecheap Namecheap \njayblue.dev Personal Fun Andrew Dev projects Namecheap Namecheap \nz.orb Random Andrew Short URL Namecheap Namecheap \n \n
\n\n
Blog & Content Domains \n
\nDomain Category Owner Purpose DNS Provider Registrar \n\npebbleandpeanut.com Blog Andrew Personal blog DreamHost Namecheap \npebblesandpeanuts.com Blog Andrew Alt redirect Namecheap Namecheap \n \n
\n\n
Internal Domain \n
\nDomain Category Owner Purpose DNS Provider Notes \n\niamworkin.lan Internal Andrew Internal infrastructure, future AD DS pfSense Unbound 43+ host overrides, not publicly registered \n \n
\n\n
Namecheap API \n
\n
\n
API Configuration
\n
\n Base URL: https://api.namecheap.com/xml.response copy \n API User: astoltz copy \n API Key: e36f347844fb4cc3a82d4e0f4e4af82e copy \n Sandbox URL: https://api.sandbox.namecheap.com/xml.response copy \n \n
\n
\n
Dynamic DNS
\n
\n Hostname: gateway.iamwork.in copy \n Points to: pfSense WAN IP (auto-updated) \n DDNS Endpoint: https://dynamicdns.park-your-domain.com/update?host=gateway&domain=iamwork.in&password=d8ad7194c9224c26bc50cfa5feb8764e copy \n Update Method: pfSense Dynamic DNS client or cron \n \n
\n
\n\n
Internal DNS Architecture \n
Split-Horizon DNS (planned): External requests to flowercore.io resolve via Cloudflare to public IP .21. Internal requests resolve via pfSense Unbound to K8s MetalLB VIP (10.0.56.200), avoiding NAT hairpin. All internal infrastructure uses iamworkin.lan zone.
\n\n
Planned IPv6 (ULA) \n
\nPrefix Scheme Method \n\nfdbc:56:XX::/64XX = VLAN ID (e.g., fdbc:56:56::/64 for MGMT) SLAAC + DHCPv6 (servers),\
\ SLAAC-only (clients) \n \n
\n
\n\n\n\n\n"
diff --git a/apps/irc/irc.yaml b/apps/irc/irc.yaml
index ad2489f..9163347 100644
--- a/apps/irc/irc.yaml
+++ b/apps/irc/irc.yaml
@@ -283,6 +283,7 @@ data:
nickserv
{
nick = "NickServ"
+ client = "NickServ"
defaults = "kill_quick ns_secure ns_private hide_email"
registration = "none"
expire = 90d
@@ -291,6 +292,7 @@ data:
chanserv
{
nick = "ChanServ"
+ client = "ChanServ"
defaults = "keeptopic peace cs_secure"
expire = 14d
}
@@ -298,28 +300,33 @@ data:
operserv
{
nick = "OperServ"
+ client = "OperServ"
}
botserv
{
nick = "BotServ"
+ client = "BotServ"
defaults = "dontkickops fantasy greet"
}
hostserv
{
nick = "HostServ"
+ client = "HostServ"
}
memoserv
{
nick = "MemoServ"
+ client = "MemoServ"
maxmemos = 20
}
global
{
nick = "Global"
+ client = "Global"
}
opertype
@@ -338,12 +345,12 @@ data:
db_flatfile
{
database = "/anope/data/anope.db"
- fork = yes
+ fork = no
}
log
{
- target = "/anope/data/services.log"
+ target = "services.log"
admin = "*"
override = "chanserv/* nickserv/* operserv/*"
commands = "chanserv/* nickserv/* operserv/*"
@@ -519,9 +526,11 @@ spec:
command: ["sh", "-c"]
args:
- |
- mkdir -p /data/db /data/logs
- touch /data/anope.db
+ mkdir -p /data/db /data/logs /data/runtime
+ touch /data/anope.db /data/services.motd
+ chmod 666 /data/anope.db
chown -R 10000:10000 /data 2>/dev/null || chmod -R 777 /data
+ echo "Anope data dir prepared: $(ls -la /data/anope.db)"
volumeMounts:
- name: anope-data
mountPath: /data