10 KiB
10 KiB
Project Blueprint: High-Availability DNS Stack, Network Honeypot & VLAN Security Architecture
1. Project Objectives & Current State Assessment
1.1 Objectives
- Enterprise-Grade DNS Stack:
- Deploy a resilient, scalable, dual-cluster DNS architecture across Aerodrome (
local) and Spaceport (c-m-4fgkl75b). - Implement Pi-hole as the front-end ad/malware filtering and caching engine.
- Implement Technitium DNS Server as the authoritative local DNS resolver (
snarfnet.netsplit-horizon and PTR zones) and recursive DNS-over-HTTPS (DoH) upstream. - Ensure Active-Active / High Availability across both clusters with zero rate-limiting bottlenecks.
- Deploy a resilient, scalable, dual-cluster DNS architecture across Aerodrome (
- Network Security & Honeypot:
- Deploy an automated, containerized honeypot (OpenCanary or Cowrie) with centralized logging and instant alerts to Gotify / Zabbix.
- VLAN Segmentation & Firewall Policy Hardening:
- Audit and enforce inter-VLAN firewall rules on the UniFi Dream Machine Pro (UDM Pro) (
140.44.4.1). - Isolate Smart Home / IoT, Storage, and Guest traffic from the Management/Infrastructure plane.
- Apply Kubernetes
NetworkPolicyresources to restrict east-west namespace traffic.
- Audit and enforce inter-VLAN firewall rules on the UniFi Dream Machine Pro (UDM Pro) (
1.2 Inspection of Existing Cluster "Stubs"
We probed both clusters and discovered why the existing DNS implementations stalled:
| Cluster | Component | Current State | Root Cause Failure | Recommendation |
|---|---|---|---|---|
Aerodrome (140.44.4.11) |
pihole (deploy) |
0/1 Pending |
PVC pihole does not exist (FailedScheduling) |
Delete and rebuild cleanly |
Aerodrome (140.44.4.11) |
technitium-dns (deploy) |
0/1 Pending |
PVC technitium-longhorn-pvc does not exist |
Delete and rebuild cleanly |
Aerodrome (140.44.4.11) |
pihole-dns-tcp/udp |
NodePort | Mapped to ephemeral high ports (32655/31195); standard DNS clients cannot query NodePorts |
Replace with Port 53 LoadBalancer VIP |
Spaceport (140.44.4.41) |
pihole (deploy) |
1/1 Running |
Uses unmanaged local storage, exposed via NodePort only | Delete and replace with unified manifest |
Spaceport (140.44.4.41) |
technitium-dns (deploy) |
0/1 Pending |
PVC technitium-longhorn-pvc missing |
Delete and rebuild cleanly |
Important
Decision: Clean Teardown & Declarative Deployment. Rather than patching fractured, incomplete stubs, we will prune the orphaned resources in
infraandinfrastructureand deploy a unified, declarative GitOps stack with dedicated Longhorn storage volumes and MetalLB VIPs on standard port 53.
2. High-Availability DNS Architecture (Pi-hole + Technitium)
flowchart TD
subgraph Clients["LAN Clients across all VLANs (VLAN 20, 40, 50, Guest)"]
ClientDevices["Laptops, Phones, Servers, IoT"]
end
subgraph UDM["UniFi Dream Machine Pro (140.44.4.1)"]
DHCP["DHCP Options 6:<br>Primary DNS: 140.44.4.35 (Aerodrome VIP)<br>Secondary DNS: 140.44.4.65 (Spaceport VIP)"]
end
subgraph AeroCluster["Aerodrome K3s Cluster"]
AeroVIP["MetalLB VIP: 140.44.4.35:53 (UDP/TCP)"]
AeroPihole["Pi-hole Instance 1<br>(Ad-blocking, Caching, FTL rate-limit: 0)"]
AeroTech["Technitium Instance 1 (Primary Authoritative)<br>(snarfnet.net Zone, PTR Records, DNSSEC)"]
AeroStorage["Longhorn Persistent Volume"]
end
subgraph SpaceCluster["Spaceport K3s Cluster"]
SpaceVIP["MetalLB VIP: 140.44.4.65:53 (UDP/TCP)"]
SpacePihole["Pi-hole Instance 2<br>(Ad-blocking, Caching, FTL rate-limit: 0)"]
SpaceTech["Technitium Instance 2 (Secondary Authoritative)<br>(Zone Transfer AXFR/IXFR from Primary)"]
SpaceStorage["Longhorn Persistent Volume"]
end
subgraph Upstream["Encrypted Upstream Resolvers"]
DoH["DNS-over-HTTPS (Quad9 / Cloudflare / Mullvad)"]
end
ClientDevices -->|Queries 140.44.4.35| AeroVIP
ClientDevices -.->|Fallback 140.44.4.65| SpaceVIP
AeroVIP --> AeroPihole
SpaceVIP --> SpacePihole
AeroPihole -->|Recursive / Local Lookup| AeroTech
SpacePihole -->|Recursive / Local Lookup| SpaceTech
AeroTech <==>|Automatic Zone Replication (AXFR)| SpaceTech
AeroTech -->|Encrypted Upstream| DoH
SpaceTech -->|Encrypted Upstream| DoH
AeroPihole --- AeroStorage
AeroTech --- AeroStorage
SpacePihole --- SpaceStorage
SpaceTech --- SpaceStorage
2.1 Solving the Historical Rate-Limiting & Performance Bottleneck
Your earlier Raspberry Pi Unbound/Pi-hole suffered when local devices (especially smart home polling, K8s CoreDNS forwards, and mobile apps) sent bursts of queries, tripping Pi-hole FTL's default rate-limit (1000 queries in 60s per client) and saturating single-threaded Unbound.
How our cluster architecture resolves this:
- Configurable Rate Limiting:
- Set
FTLCONF_RATE_LIMIT=0(or10000/60for WAN only) in the Pi-hole configuration so internal bursts are never blocked.
- Set
- Technitium Engine vs. Unbound:
- Technitium is built on .NET 8/9 with an asynchronous, high-throughput DNS engine capable of handling tens of thousands of QPS without degrading.
- Built-in caching with negative caching and aggressive prefetching ensures queries are answered from RAM in
<0.5ms.
- Clustered Failover:
- MetalLB VIP on Aerodrome (
140.44.4.35) and Spaceport (140.44.4.65) guarantees high availability: if an entire Kubernetes node or cluster is undergoing maintenance, clients seamlessly failover to the secondary VIP without DNS interruption.
- MetalLB VIP on Aerodrome (
- Zone Synchronization:
- Aerodrome acts as the primary Technitium DNS server.
- Spaceport acts as the secondary Technitium DNS server, replicating zones via standard DNS NOTIFY / AXFR transfers automatically.
3. Network Security & Honeypot Architecture
flowchart LR
subgraph VLANs["Network VLAN Segments (UDM Pro)"]
VLAN20["VLAN 20: Infra / Management<br>(140.44.4.0/24)"]
VLAN40["VLAN 40: Storage<br>(14.10.10.0/24)"]
VLAN50["VLAN 50: Smart Home / IoT<br>(14.4.4.0/24)"]
VLAN90["VLAN 90: Isolated DMZ / Honeypot<br>(14.99.99.0/24)"]
VLAN80["VLAN 80: Guest Network<br>(14.80.80.0/24)"]
end
subgraph UDM_FW["UDM Pro Firewall Rules"]
DropInterVLAN["Block Inter-VLAN Routing"]
AllowEstablished["Allow Established & Related"]
AllowDNS["Allow Port 53 to DNS VIPs"]
end
subgraph SecurityCluster["Security Monitoring Services"]
Honeypot["OpenCanary / Cowrie Honeypot<br>(Simulating SSH, HTTP, SMB, RDP)"]
GotifyAlert["Gotify Alerting Bridge<br>(Instant Mobile Notification)"]
ZabbixLog["Zabbix / Syslog Telemetry"]
end
VLAN50 -.->|Blocked from accessing| VLAN20
VLAN80 -.->|Blocked from accessing| VLAN20
VLAN80 -.->|Blocked from accessing| VLAN40
VLAN50 -->|Allowed only port 53| DropInterVLAN
VLAN90 --> Honeypot
Honeypot -->|Triggered Event| GotifyAlert
Honeypot -->|Audit Event| ZabbixLog
3.1 Honeypot Implementation: OpenCanary / Cowrie
- OpenCanary:
- Low-interaction, highly modular honeypot that exposes simulated services:
- Port 22 (SSH fake login banner)
- Port 80 / 8080 (Fake router admin login)
- Port 445 (Fake SMB share)
- Port 3389 (Fake RDP prompt)
- Port 21 (Fake FTP)
- Any packet or connection attempt to these ports triggers an immediate high-priority alert via webhook to Gotify and logs to syslog/Zabbix.
- Low-interaction, highly modular honeypot that exposes simulated services:
- Placement Options:
- Option A: Deployed on a dedicated honeypot IP in the IoT/Guest subnet to detect lateral movement.
- Option B: Containerized pod in Spaceport with hostPort binding to a decoy IP.
3.2 UDM Pro Firewall Rules Matrix
| Rule Name | Direction | Source | Destination | Action | Purpose |
|---|---|---|---|---|---|
Allow-Established-Related |
LAN IN |
Any | Any | ACCEPT | Allows responses to existing connections |
Allow-DNS-Traffic |
LAN IN |
All VLANs | 140.44.4.35, 140.44.4.65 (port 53) |
ACCEPT | Allows all devices to query the DNS stack |
Allow-NTP-Traffic |
LAN IN |
All VLANs | 140.44.4.11, 14.4.4.44 (port 123) |
ACCEPT | Allows Chrony time synchronization |
Isolate-IoT-to-Infra |
LAN IN |
VLAN 50 (SmartHome) |
VLAN 20 (Infra), VLAN 40 (Storage) |
DROP | Prevents compromised IoT devices from pivoting into servers |
Isolate-Guest-Network |
GUEST IN |
VLAN 80 (Guest) |
RFC1918 / Private Subnets | DROP | Isolates guest devices to Internet-only |
Isolate-Storage-VLAN |
LAN IN |
Non-Storage Subnets | VLAN 40 (14.10.10.0/24) |
DROP | Restricts Synology NFS/iSCSI to hypervisors and K8s storage nodes |
4. Phased Execution Roadmap
Phase 1: Clean Up Legacy Stubs
- Delete broken deployments, services, and lingering pods in namespace
infra(Aerodrome) andinfrastructure(Spaceport). - Verify MetalLB IP pool allocations:
- Allocate
140.44.4.35on Aerodrome for Primary DNS. - Allocate
140.44.4.65on Spaceport for Secondary DNS.
- Allocate
Phase 2: Deploy Pi-hole + Technitium on Aerodrome (Primary Stack)
- Create Longhorn PVCs for Pi-hole config (
etc-pihole,etc-dnsmasq) and Technitium config (technitium-data). - Deploy Technitium DNS container (port 5353 internally).
- Deploy Pi-hole container (port 53 externally via MetalLB
140.44.4.35, upstream pointing to Technitium127.0.0.1:5353). - Configure
FTLCONF_RATE_LIMIT=0and subscribe to standard curated blocklists. - Configure
snarfnet.netforward and reverse zones in Technitium.
Phase 3: Deploy Pi-hole + Technitium on Spaceport (Secondary Stack)
- Deploy identical stack on Spaceport bound to MetalLB VIP
140.44.4.65. - Establish Technitium zone replication between Primary (Aerodrome) and Secondary (Spaceport).
- Test dual-stack failover by querying both VIPs independently.
Phase 4: Network Honeypot & Alerting Setup
- Deploy OpenCanary / Cowrie with active listeners on decoy ports.
- Configure Gotify webhook integration for instant mobile push notifications upon probe detection.
Phase 5: UDM Pro Network Firewall & VLAN Policy Enforcement
- Configure DHCP on UDM Pro to distribute
140.44.4.35and140.44.4.65across all VLANs. - Apply and verify LAN IN / GUEST IN firewall rules on UDM Pro.
- Apply Kubernetes
NetworkPolicyobjects for cluster namespace segmentation.