<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Firewall on Homelab Journal</title><link>https://mareox.github.io/homelab-journal/topics/firewall/</link><description>Recent content in Firewall on Homelab Journal</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Mario</copyright><lastBuildDate>Wed, 01 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mareox.github.io/homelab-journal/topics/firewall/index.xml" rel="self" type="application/rss+xml"/><item><title>How I Got Every Device Named in My Firewall Logs (Without Active Directory)</title><link>https://mareox.github.io/homelab-journal/posts/2026/user-id-from-dhcp-panos/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://mareox.github.io/homelab-journal/posts/2026/user-id-from-dhcp-panos/</guid><description>&lt;h2 class="relative group">TL;DR
 &lt;div id="tldr" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tldr" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h2>
&lt;p>A Python script that identifies every device on your network in PAN-OS traffic logs, without Active Directory. Combines Pi-hole DNS, UniFi Controller, and DHCP leases into one priority merge. 124 devices named on my PA-440.&lt;/p>
&lt;p>&lt;strong>Before:&lt;/strong>&lt;/p>
&lt;div class="highlight-wrapper">&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">192.168.10.128 → 8.8.8.8 user: unknown
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">192.168.30.240 → 1.1.1.1 user: unknown
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">172.30.50.77 → 52.26.132.60 user: unknown&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/div>
&lt;p>&lt;strong>After:&lt;/strong>&lt;/p></description></item><item><title>Security</title><link>https://mareox.github.io/homelab-journal/wiki/security/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><guid>https://mareox.github.io/homelab-journal/wiki/security/</guid><description>&lt;p>&lt;figure>&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Security Architecture"
 src="../../images/banner-security.png"
 >&lt;/figure>
&lt;/p>
&lt;p>Enterprise security principles applied to a homelab. This wiki covers the layered security architecture — from next-gen firewall policies to XDR threat detection to certificate lifecycle automation.&lt;/p>

&lt;h2 class="relative group">Firewall Architecture
 &lt;div id="firewall-architecture" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#firewall-architecture" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h2>
&lt;p>The Palo Alto Networks PA-440 provides the network security foundation with App-ID, zone-based policies, and centralized logging. Full details in the &lt;a href="https://mareox.github.io/homelab-journal/wiki/networking/#firewall-architecture" >Networking&lt;/a> wiki — including security zones, VLAN trust levels, and DNS proxy configuration.&lt;/p></description></item><item><title>Networking</title><link>https://mareox.github.io/homelab-journal/wiki/networking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://mareox.github.io/homelab-journal/wiki/networking/</guid><description>&lt;p>&lt;figure>&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Network Architecture"
 src="../../images/banner-networking.png"
 >&lt;/figure>
&lt;/p>
&lt;p>My homelab network is segmented into &lt;strong>5 VLANs&lt;/strong> with a multi-tier DNS architecture and high-availability reverse proxy. This wiki covers the design decisions and implementation details.&lt;/p>

&lt;h2 class="relative group">Complete Network Topology
 &lt;div id="complete-network-topology" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#complete-network-topology" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h2>

&lt;div class="network-topology-wrapper" style="position:relative;cursor:pointer;margin:2rem 0;" title="Click to expand">
 &lt;div class="network-topology-expand-hint" style="position:absolute;top:8px;right:8px;background:rgba(0,0,0,0.5);color:#fff;border-radius:6px;padding:4px 10px;font-size:12px;opacity:0;transition:opacity 0.2s;pointer-events:none;z-index:2;">
 ⛶ Click to expand
 &lt;/div>
 &lt;svg viewBox="0 0 1400 1050" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto;border-radius:12px;display:block;">
 &lt;style>
 .nt-bg { fill: #0d1117; }
 .nt-zone { rx: 10; ry: 10; stroke-width: 1.5; stroke-dasharray: 6 3; }
 .nt-zone-label { font-size: 13px; font-weight: 700; font-family: Inter, system-ui, sans-serif; letter-spacing: 0.5px; }
 .nt-subzone { rx: 8; ry: 8; stroke-width: 1; stroke-dasharray: 4 2; }
 .nt-device { rx: 8; ry: 8; fill: #161b22; stroke-width: 1.5; }
 .nt-device-name { font-size: 11px; font-weight: 600; fill: #e6edf3; font-family: Inter, system-ui, sans-serif; }
 .nt-device-detail { font-size: 9px; fill: #8b949e; font-family: Inter, system-ui, sans-serif; }
 .nt-device-icon { font-size: 16px; }
 .nt-conn { stroke-width: 1.5; fill: none; }
 .nt-conn-dash { stroke-dasharray: 6 3; }
 .nt-conn-label { font-size: 8px; fill: #8b949e; font-family: Inter, system-ui, sans-serif; }
 .nt-title { font-size: 16px; font-weight: 700; fill: #e6edf3; font-family: Inter, system-ui, sans-serif; }
 .nt-subtitle { font-size: 10px; fill: #8b949e; font-family: Inter, system-ui, sans-serif; }
 .nt-ha-badge { font-size: 8px; font-weight: 700; fill: #0d1117; font-family: Inter, system-ui, sans-serif; }
 &lt;/style>

 
 &lt;rect class="nt-bg" width="1400" height="1050" rx="12"/>

 
 &lt;text class="nt-title" x="700" y="28" text-anchor="middle">Homelab Network Topology&lt;/text>
 &lt;text class="nt-subtitle" x="700" y="42" text-anchor="middle">5 VLANs · PA-440 NGFW · HA DNS · HA Reverse Proxy&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="480" y="55" width="440" height="65" fill="rgba(30,58,95,0.15)" stroke="#1e5f8f"/>
 &lt;text class="nt-zone-label" x="700" y="73" text-anchor="middle" fill="#4fc3f7">☁️ INTERNET&lt;/text>

 
 &lt;rect class="nt-device" x="520" y="80" width="130" height="32" stroke="#4fc3f7"/>
 &lt;text class="nt-device-icon" x="532" y="102">🌐&lt;/text>
 &lt;text class="nt-device-name" x="552" y="100">ISP Gateway&lt;/text>

 
 &lt;rect class="nt-device" x="750" y="80" width="150" height="32" stroke="#4fc3f7"/>
 &lt;text class="nt-device-icon" x="762" y="102">🛡️&lt;/text>
 &lt;text class="nt-device-name" x="782" y="95">Cloudflare&lt;/text>
 &lt;text class="nt-device-detail" x="782" y="107">CDN + WAF + Access&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="380" y="130" width="640" height="85" fill="rgba(95,30,30,0.15)" stroke="#8f3030"/>
 &lt;text class="nt-zone-label" x="700" y="148" text-anchor="middle" fill="#ef5350">🔥 SECURITY EDGE&lt;/text>

 
 &lt;rect class="nt-device" x="430" y="155" width="280" height="50" stroke="#ef5350"/>
 &lt;text class="nt-device-icon" x="445" y="180">🛡️&lt;/text>
 &lt;text class="nt-device-name" x="468" y="175">PA-440 Next-Gen Firewall&lt;/text>
 &lt;text class="nt-device-detail" x="468" y="188">App-ID · DNS Proxy · DHCP · NAT · Zone Security&lt;/text>

 
 &lt;rect class="nt-device" x="780" y="158" width="180" height="45" stroke="#ef5350"/>
 &lt;text class="nt-device-icon" x="792" y="183">☁️&lt;/text>
 &lt;text class="nt-device-name" x="812" y="176">CF Tunnel Agent&lt;/text>
 &lt;text class="nt-device-detail" x="812" y="189">Zero-Trust Tunnel&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="280" y="225" width="840" height="100" fill="rgba(58,30,95,0.12)" stroke="#6a3a8f"/>
 &lt;text class="nt-zone-label" x="700" y="243" text-anchor="middle" fill="#ab47bc">🔀 NETWORK FABRIC&lt;/text>

 
 &lt;rect class="nt-device" x="420" y="252" width="140" height="38" stroke="#ab47bc"/>
 &lt;text class="nt-device-icon" x="432" y="276">🚪&lt;/text>
 &lt;text class="nt-device-name" x="452" y="270">UniFi Gateway&lt;/text>
 &lt;text class="nt-device-detail" x="452" y="282">Inter-VLAN Routing&lt;/text>

 
 &lt;rect class="nt-device" x="610" y="252" width="170" height="38" stroke="#ab47bc"/>
 &lt;text class="nt-device-icon" x="622" y="276">📡&lt;/text>
 &lt;text class="nt-device-name" x="642" y="270">USW-24 Managed&lt;/text>
 &lt;text class="nt-device-detail" x="642" y="282">24-Port PoE Switch&lt;/text>

 
 &lt;rect class="nt-device" x="830" y="252" width="120" height="38" stroke="#ab47bc"/>
 &lt;text class="nt-device-icon" x="842" y="276">📶&lt;/text>
 &lt;text class="nt-device-name" x="862" y="270">U6-LR&lt;/text>
 &lt;text class="nt-device-detail" x="862" y="282">WiFi 6 AP&lt;/text>

 
 &lt;rect class="nt-device" x="990" y="252" width="120" height="38" stroke="#ab47bc"/>
 &lt;text class="nt-device-icon" x="1002" y="276">📶&lt;/text>
 &lt;text class="nt-device-name" x="1022" y="270">U6-Pro&lt;/text>
 &lt;text class="nt-device-detail" x="1022" y="282">WiFi 6 AP&lt;/text>

 
 &lt;rect class="nt-device" x="300" y="256" width="100" height="30" stroke="#ab47bc" opacity="0.7"/>
 &lt;text class="nt-device-detail" x="316" y="275" fill="#ab47bc">TP-Link Switch&lt;/text>

 
 
 

 
 &lt;line class="nt-conn" x1="585" y1="112" x2="570" y2="155" stroke="#4fc3f7"/>

 
 &lt;line class="nt-conn nt-conn-dash" x1="825" y1="112" x2="860" y2="158" stroke="#4fc3f7"/>
 &lt;text class="nt-conn-label" x="855" y="138" text-anchor="middle">Authenticated&lt;/text>

 
 &lt;line class="nt-conn nt-conn-dash" x1="780" y1="180" x2="710" y2="180" stroke="#ef5350" opacity="0.5"/>

 
 &lt;line class="nt-conn" x1="570" y1="205" x2="490" y2="252" stroke="#ef5350"/>

 
 &lt;line class="nt-conn" x1="560" y1="271" x2="610" y2="271" stroke="#ab47bc"/>

 
 &lt;line class="nt-conn" x1="780" y1="271" x2="830" y2="271" stroke="#ab47bc"/>
 &lt;line class="nt-conn" x1="950" y1="271" x2="990" y2="271" stroke="#ab47bc"/>

 
 &lt;line class="nt-conn" x1="610" y1="271" x2="400" y2="271" stroke="#ab47bc" opacity="0.5"/>

 
 
 

 
 &lt;path class="nt-conn" d="M 620,290 L 620,320 Q 620,335 605,335 L 200,335 L 200,345" stroke="#66bb6a" stroke-width="2" opacity="0.6"/>
 &lt;text class="nt-conn-label" x="400" y="332" fill="#66bb6a">Trunk&lt;/text>

 
 &lt;line class="nt-conn" x1="695" y1="290" x2="695" y2="345" stroke="#ffa726" stroke-width="2" opacity="0.6"/>
 &lt;text class="nt-conn-label" x="708" y="332" fill="#ffa726">Trunk&lt;/text>

 
 &lt;path class="nt-conn" d="M 770,290 L 770,320 Q 770,335 785,335 L 1200,335 L 1200,345" stroke="#ec407a" stroke-width="2" opacity="0.6"/>
 &lt;text class="nt-conn-label" x="1000" y="332" fill="#ec407a">Trunk&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="30" y="345" width="340" height="690" fill="rgba(30,95,58,0.1)" stroke="#2e7d32"/>
 &lt;text class="nt-zone-label" x="200" y="368" text-anchor="middle" fill="#66bb6a">🔒 VLAN 10 · MANAGEMENT&lt;/text>
 &lt;text class="nt-device-detail" x="200" y="382" text-anchor="middle">192.168.10.0/24&lt;/text>

 
 &lt;rect class="nt-device" x="50" y="400" width="140" height="50" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="62" y="427">💾&lt;/text>
 &lt;text class="nt-device-name" x="82" y="421">NAS-Primary&lt;/text>
 &lt;text class="nt-device-detail" x="82" y="434">DS920+ · 4-Bay&lt;/text>
 &lt;text class="nt-device-detail" x="82" y="445">NFS · iSCSI&lt;/text>

 
 &lt;rect class="nt-device" x="210" y="400" width="140" height="50" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="222" y="427">💾&lt;/text>
 &lt;text class="nt-device-name" x="242" y="421">NAS-Secondary&lt;/text>
 &lt;text class="nt-device-detail" x="242" y="434">DS719 · 2-Bay&lt;/text>
 &lt;text class="nt-device-detail" x="242" y="445">Backup Target&lt;/text>

 
 &lt;rect class="nt-subzone" x="45" y="470" width="310" height="110" fill="rgba(30,95,58,0.12)" stroke="#2e7d32"/>
 &lt;text class="nt-device-detail" x="200" y="487" text-anchor="middle" fill="#66bb6a" style="font-weight:600;">DNS HIGH AVAILABILITY&lt;/text>

 
 &lt;rect x="165" y="476" width="24" height="14" rx="7" fill="#66bb6a"/>
 &lt;text class="nt-ha-badge" x="177" y="486" text-anchor="middle">HA&lt;/text>

 
 &lt;rect class="nt-device" x="55" y="496" width="130" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="67" y="521">🟢&lt;/text>
 &lt;text class="nt-device-name" x="85" y="514">DNS-Primary&lt;/text>
 &lt;text class="nt-device-detail" x="85" y="527">Pi-hole · Pri 200&lt;/text>

 
 &lt;circle cx="200" y="517" r="20" fill="none" stroke="#4fc3f7" stroke-width="2" cy="517"/>
 &lt;text class="nt-device-detail" x="200" y="514" text-anchor="middle" fill="#4fc3f7" style="font-weight:700;">VIP&lt;/text>
 &lt;text class="nt-device-detail" x="200" y="526" text-anchor="middle" fill="#4fc3f7">.110&lt;/text>

 
 &lt;line class="nt-conn nt-conn-dash" x1="185" y1="517" x2="180" y2="517" stroke="#4fc3f7" stroke-width="1" opacity="0.6"/>
 &lt;line class="nt-conn nt-conn-dash" x1="220" y1="517" x2="225" y2="517" stroke="#4fc3f7" stroke-width="1" opacity="0.6"/>

 
 &lt;rect class="nt-device" x="225" y="496" width="120" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="237" y="521">🟡&lt;/text>
 &lt;text class="nt-device-name" x="255" y="514">DNS-Secondary&lt;/text>
 &lt;text class="nt-device-detail" x="255" y="527">Pi-hole · Pri 100&lt;/text>

 
 &lt;text class="nt-device-detail" x="200" y="572" text-anchor="middle" fill="#4fc3f7">keepalived VRRP&lt;/text>

 
 &lt;rect class="nt-device" x="50" y="595" width="130" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="62" y="620">🖥️&lt;/text>
 &lt;text class="nt-device-name" x="82" y="612">TinyPilot KVM&lt;/text>
 &lt;text class="nt-device-detail" x="82" y="625">Remote Console&lt;/text>

 &lt;rect class="nt-device" x="210" y="595" width="130" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="222" y="620">🖥️&lt;/text>
 &lt;text class="nt-device-name" x="242" y="612">GL KVM&lt;/text>
 &lt;text class="nt-device-detail" x="242" y="625">IP-KVM Device&lt;/text>

 
 &lt;rect class="nt-device" x="50" y="655" width="130" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="62" y="680">🔥&lt;/text>
 &lt;text class="nt-device-name" x="82" y="672">FW Management&lt;/text>
 &lt;text class="nt-device-detail" x="82" y="685">Out-of-Band Mgmt&lt;/text>

 
 &lt;rect class="nt-device" x="210" y="655" width="130" height="42" stroke="#66bb6a"/>
 &lt;text class="nt-device-icon" x="222" y="680">📡&lt;/text>
 &lt;text class="nt-device-name" x="242" y="672">Uplink Switch&lt;/text>
 &lt;text class="nt-device-detail" x="242" y="685">TP-Link Managed&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="390" y="345" width="610" height="690" fill="rgba(95,74,30,0.1)" stroke="#e65100"/>
 &lt;text class="nt-zone-label" x="695" y="368" text-anchor="middle" fill="#ffa726">⚙️ VLAN 30 · SERVERS &amp;amp; SERVICES&lt;/text>
 &lt;text class="nt-device-detail" x="695" y="382" text-anchor="middle">192.168.30.0/24&lt;/text>

 
 &lt;rect class="nt-subzone" x="405" y="395" width="580" height="90" fill="rgba(95,74,30,0.12)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="695" y="412" text-anchor="middle" fill="#ffa726" style="font-weight:600;">PROXMOX VE CLUSTER&lt;/text>

 
 &lt;rect class="nt-device" x="415" y="420" width="100" height="55" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="427" y="445">📦&lt;/text>
 &lt;text class="nt-device-name" x="447" y="440">Node-2&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="452">LVM-thin&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="463">Mini PC&lt;/text>

 &lt;rect class="nt-device" x="525" y="420" width="100" height="55" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="537" y="445">📦&lt;/text>
 &lt;text class="nt-device-name" x="557" y="440">Node-3&lt;/text>
 &lt;text class="nt-device-detail" x="557" y="452">ZFS&lt;/text>
 &lt;text class="nt-device-detail" x="557" y="463">Primary API&lt;/text>

 &lt;rect class="nt-device" x="635" y="420" width="100" height="55" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="647" y="445">📦&lt;/text>
 &lt;text class="nt-device-name" x="667" y="440">Node-5&lt;/text>
 &lt;text class="nt-device-detail" x="667" y="452">LVM-thin&lt;/text>
 &lt;text class="nt-device-detail" x="667" y="463">Mini PC&lt;/text>

 &lt;rect class="nt-device" x="745" y="420" width="100" height="55" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="757" y="445">📦&lt;/text>
 &lt;text class="nt-device-name" x="777" y="440">Node-6&lt;/text>
 &lt;text class="nt-device-detail" x="777" y="452">ZFS&lt;/text>
 &lt;text class="nt-device-detail" x="777" y="463">Mini PC&lt;/text>

 &lt;rect class="nt-device" x="860" y="420" width="110" height="55" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="872" y="445">💿&lt;/text>
 &lt;text class="nt-device-name" x="892" y="440">PBS&lt;/text>
 &lt;text class="nt-device-detail" x="892" y="452">Backup Server&lt;/text>
 &lt;text class="nt-device-detail" x="892" y="463">NFS → NAS&lt;/text>

 
 &lt;rect class="nt-subzone" x="405" y="500" width="285" height="80" fill="rgba(95,74,30,0.08)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="547" y="515" text-anchor="middle" fill="#ffa726" style="font-weight:600;">REVERSE PROXY HA&lt;/text>
 &lt;rect x="520" y="507" width="24" height="14" rx="7" fill="#ffa726"/>
 &lt;text class="nt-ha-badge" x="532" y="517" text-anchor="middle">HA&lt;/text>

 &lt;rect class="nt-device" x="415" y="524" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="427" y="549">🔀&lt;/text>
 &lt;text class="nt-device-name" x="447" y="542">Caddy Primary&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="555">Reverse Proxy&lt;/text>

 &lt;circle cx="547" cy="545" r="16" fill="none" stroke="#4fc3f7" stroke-width="2"/>
 &lt;text class="nt-device-detail" x="547" y="542" text-anchor="middle" fill="#4fc3f7" style="font-weight:700;">VIP&lt;/text>
 &lt;text class="nt-device-detail" x="547" y="553" text-anchor="middle" fill="#4fc3f7">.161&lt;/text>

 &lt;rect class="nt-device" x="565" y="524" width="115" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="577" y="549">🔀&lt;/text>
 &lt;text class="nt-device-name" x="597" y="542">Caddy Backup&lt;/text>
 &lt;text class="nt-device-detail" x="597" y="555">Hot Standby&lt;/text>

 
 &lt;rect class="nt-subzone" x="700" y="500" width="285" height="80" fill="rgba(95,74,30,0.08)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="842" y="515" text-anchor="middle" fill="#ffa726" style="font-weight:600;">MONITORING &amp;amp; LOGGING&lt;/text>

 &lt;rect class="nt-device" x="710" y="524" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="722" y="549">📊&lt;/text>
 &lt;text class="nt-device-name" x="742" y="542">Graylog&lt;/text>
 &lt;text class="nt-device-detail" x="742" y="555">SIEM · Log Server&lt;/text>

 &lt;rect class="nt-device" x="845" y="524" width="130" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="857" y="549">🛡️&lt;/text>
 &lt;text class="nt-device-name" x="877" y="542">Wazuh XDR&lt;/text>
 &lt;text class="nt-device-detail" x="877" y="555">FIM · Vuln · CIS&lt;/text>

 
 &lt;rect class="nt-device" x="405" y="598" width="125" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="417" y="623">📈&lt;/text>
 &lt;text class="nt-device-name" x="437" y="615">Uptime Kuma&lt;/text>
 &lt;text class="nt-device-detail" x="437" y="628">Status × 2&lt;/text>

 &lt;rect class="nt-device" x="540" y="598" width="145" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="552" y="623">📉&lt;/text>
 &lt;text class="nt-device-name" x="572" y="615">Prometheus&lt;/text>
 &lt;text class="nt-device-detail" x="572" y="628">Metrics + Grafana&lt;/text>

 &lt;rect class="nt-device" x="695" y="598" width="130" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="707" y="623">🔍&lt;/text>
 &lt;text class="nt-device-name" x="727" y="615">Pi.Alert&lt;/text>
 &lt;text class="nt-device-detail" x="727" y="628">Network Scanner&lt;/text>

 &lt;rect class="nt-device" x="835" y="598" width="140" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="847" y="623">💨&lt;/text>
 &lt;text class="nt-device-name" x="867" y="615">MySpeed&lt;/text>
 &lt;text class="nt-device-detail" x="867" y="628">Speed Tracker&lt;/text>

 
 &lt;rect class="nt-subzone" x="405" y="655" width="580" height="80" fill="rgba(95,74,30,0.08)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="695" y="670" text-anchor="middle" fill="#ffa726" style="font-weight:600;">AUTOMATION &amp;amp; WORKFLOWS&lt;/text>

 &lt;rect class="nt-device" x="415" y="680" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="427" y="705">⚡&lt;/text>
 &lt;text class="nt-device-name" x="447" y="697">n8n&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="710">Workflow Engine&lt;/text>

 &lt;rect class="nt-device" x="545" y="680" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="557" y="705">🎯&lt;/text>
 &lt;text class="nt-device-name" x="577" y="697">Semaphore&lt;/text>
 &lt;text class="nt-device-detail" x="577" y="710">Ansible CI/CD&lt;/text>

 &lt;rect class="nt-device" x="675" y="680" width="130" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="687" y="705">🐳&lt;/text>
 &lt;text class="nt-device-name" x="707" y="697">Portainer&lt;/text>
 &lt;text class="nt-device-detail" x="707" y="710">Container Mgmt&lt;/text>

 &lt;rect class="nt-device" x="815" y="680" width="155" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="827" y="705">📡&lt;/text>
 &lt;text class="nt-device-name" x="847" y="697">UniFi Controller&lt;/text>
 &lt;text class="nt-device-detail" x="847" y="710">Network Mgmt&lt;/text>

 
 &lt;rect class="nt-subzone" x="405" y="750" width="580" height="80" fill="rgba(95,74,30,0.08)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="695" y="765" text-anchor="middle" fill="#ffa726" style="font-weight:600;">APPLICATION SERVICES&lt;/text>

 &lt;rect class="nt-device" x="415" y="775" width="110" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="427" y="800">🔐&lt;/text>
 &lt;text class="nt-device-name" x="447" y="792">Vaultwarden&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="805">Passwords&lt;/text>

 &lt;rect class="nt-device" x="535" y="775" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="547" y="800">🏠&lt;/text>
 &lt;text class="nt-device-name" x="567" y="792">Home Assist.&lt;/text>
 &lt;text class="nt-device-detail" x="567" y="805">Smart Home&lt;/text>

 &lt;rect class="nt-device" x="665" y="775" width="100" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="677" y="800">📱&lt;/text>
 &lt;text class="nt-device-name" x="697" y="792">Homarr&lt;/text>
 &lt;text class="nt-device-detail" x="697" y="805">Dashboard&lt;/text>

 &lt;rect class="nt-device" x="775" y="775" width="100" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="787" y="800">🔑&lt;/text>
 &lt;text class="nt-device-name" x="807" y="792">Infisical&lt;/text>
 &lt;text class="nt-device-detail" x="807" y="805">Secrets Mgmt&lt;/text>

 &lt;rect class="nt-device" x="885" y="775" width="95" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="897" y="800">🌐&lt;/text>
 &lt;text class="nt-device-name" x="917" y="792">NetBox&lt;/text>
 &lt;text class="nt-device-detail" x="917" y="805">IPAM&lt;/text>

 
 &lt;rect class="nt-subzone" x="405" y="845" width="580" height="80" fill="rgba(95,74,30,0.08)" stroke="#e65100"/>
 &lt;text class="nt-device-detail" x="695" y="860" text-anchor="middle" fill="#ffa726" style="font-weight:600;">SECURITY &amp;amp; VPN&lt;/text>

 &lt;rect class="nt-device" x="415" y="870" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="427" y="895">🔒&lt;/text>
 &lt;text class="nt-device-name" x="447" y="887">WireGuard&lt;/text>
 &lt;text class="nt-device-detail" x="447" y="900">VPN Server&lt;/text>

 &lt;rect class="nt-device" x="545" y="870" width="120" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="557" y="895">🛡️&lt;/text>
 &lt;text class="nt-device-name" x="577" y="887">Panorama&lt;/text>
 &lt;text class="nt-device-detail" x="577" y="900">FW Mgmt&lt;/text>

 &lt;rect class="nt-device" x="675" y="870" width="130" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="687" y="895">🔥&lt;/text>
 &lt;text class="nt-device-name" x="707" y="887">VM Firewalls&lt;/text>
 &lt;text class="nt-device-detail" x="707" y="900">PAN-OS Lab × 5&lt;/text>

 &lt;rect class="nt-device" x="815" y="870" width="155" height="42" stroke="#ffa726"/>
 &lt;text class="nt-device-icon" x="827" y="895">🤖&lt;/text>
 &lt;text class="nt-device-name" x="847" y="887">AI Assistants&lt;/text>
 &lt;text class="nt-device-detail" x="847" y="900">Claude · Gilfoyle&lt;/text>

 
 &lt;rect x="920" y="935" width="65" height="18" rx="9" fill="rgba(255,167,38,0.2)" stroke="#ffa726" stroke-width="1"/>
 &lt;text class="nt-device-detail" x="952" y="948" text-anchor="middle" fill="#ffa726" style="font-weight:600;">40+ LXCs&lt;/text>

 
 
 
 &lt;rect class="nt-zone" x="30" y="720" width="340" height="115" fill="rgba(30,58,95,0.1)" stroke="#1565c0"/>
 &lt;text class="nt-zone-label" x="200" y="740" text-anchor="middle" fill="#42a5f5">🧠 VLAN 20 · AI / DEV&lt;/text>
 &lt;text class="nt-device-detail" x="200" y="754" text-anchor="middle">192.168.20.0/24&lt;/text>

 &lt;rect class="nt-device" x="50" y="768" width="300" height="50" stroke="#42a5f5"/>
 &lt;text class="nt-device-icon" x="62" y="797">💻&lt;/text>
 &lt;text class="nt-device-name" x="82" y="789">OpenClaw AI Agent&lt;/text>
 &lt;text class="nt-device-detail" x="82" y="802">MacBook Pro M4 Max · 48GB · Ollama LLM Inference&lt;/text>

 
 
 

 
 &lt;rect class="nt-zone" x="1020" y="345" width="360" height="200" fill="rgba(74,30,95,0.1)" stroke="#880e4f"/>
 &lt;text class="nt-zone-label" x="1200" y="368" text-anchor="middle" fill="#ec407a">🔸 VLAN 40 · ISOLATED&lt;/text>
 &lt;text class="nt-device-detail" x="1200" y="382" text-anchor="middle">172.30.40.0/24&lt;/text>

 &lt;rect class="nt-device" x="1050" y="400" width="140" height="42" stroke="#ec407a"/>
 &lt;text class="nt-device-icon" x="1062" y="425">🌐&lt;/text>
 &lt;text class="nt-device-name" x="1082" y="417">DNS-40&lt;/text>
 &lt;text class="nt-device-detail" x="1082" y="430">Standalone Pi-hole&lt;/text>

 &lt;rect class="nt-device" x="1210" y="400" width="150" height="42" stroke="#ec407a"/>
 &lt;text class="nt-device-icon" x="1222" y="425">🔒&lt;/text>
 &lt;text class="nt-device-name" x="1242" y="417">Isolated Services&lt;/text>
 &lt;text class="nt-device-detail" x="1242" y="430">Restricted Access&lt;/text>

 
 &lt;rect x="1100" y="460" width="180" height="18" rx="9" fill="rgba(236,64,122,0.15)" stroke="#ec407a" stroke-width="1"/>
 &lt;text class="nt-device-detail" x="1190" y="473" text-anchor="middle" fill="#ec407a" style="font-weight:600;">❌ No cross-VLAN access&lt;/text>

 
 &lt;rect class="nt-zone" x="1020" y="565" width="360" height="200" fill="rgba(0,77,64,0.1)" stroke="#004d40"/>
 &lt;text class="nt-zone-label" x="1200" y="588" text-anchor="middle" fill="#26a69a">📱 VLAN 50 · IoT&lt;/text>
 &lt;text class="nt-device-detail" x="1200" y="602" text-anchor="middle">172.30.50.0/24&lt;/text>

 &lt;rect class="nt-device" x="1050" y="620" width="140" height="42" stroke="#26a69a"/>
 &lt;text class="nt-device-icon" x="1062" y="645">🌐&lt;/text>
 &lt;text class="nt-device-name" x="1082" y="637">DNS-50&lt;/text>
 &lt;text class="nt-device-detail" x="1082" y="650">Standalone Pi-hole&lt;/text>

 &lt;rect class="nt-device" x="1210" y="620" width="150" height="42" stroke="#26a69a"/>
 &lt;text class="nt-device-icon" x="1222" y="645">📱&lt;/text>
 &lt;text class="nt-device-name" x="1242" y="637">Smart Devices&lt;/text>
 &lt;text class="nt-device-detail" x="1242" y="650">IoT · Home Auto&lt;/text>

 
 &lt;rect x="1100" y="680" width="180" height="18" rx="9" fill="rgba(38,166,154,0.15)" stroke="#26a69a" stroke-width="1"/>
 &lt;text class="nt-device-detail" x="1190" y="693" text-anchor="middle" fill="#26a69a" style="font-weight:600;">🔒 Fully isolated network&lt;/text>

 
 &lt;rect class="nt-zone" x="1020" y="785" width="360" height="100" fill="rgba(255,193,7,0.06)" stroke="#f57f17"/>
 &lt;text class="nt-zone-label" x="1200" y="808" text-anchor="middle" fill="#fdd835">🔐 VLAN 254 · FW MGMT&lt;/text>
 &lt;text class="nt-device-detail" x="1200" y="822" text-anchor="middle">10.254.254.0/24&lt;/text>

 &lt;rect class="nt-device" x="1050" y="840" width="300" height="32" stroke="#f57f17"/>
 &lt;text class="nt-device-icon" x="1062" y="861">🔥&lt;/text>
 &lt;text class="nt-device-name" x="1082" y="860">PAN-OS Out-of-Band Management Interfaces&lt;/text>

 
 
 
 &lt;rect x="1020" y="910" width="360" height="120" rx="8" fill="rgba(255,255,255,0.03)" stroke="#30363d"/>
 &lt;text class="nt-device-detail" x="1200" y="928" text-anchor="middle" fill="#8b949e" style="font-weight:600;">LEGEND&lt;/text>

 
 &lt;line x1="1040" y1="945" x2="1090" y2="945" stroke="#8b949e" stroke-width="1.5"/>
 &lt;text class="nt-device-detail" x="1100" y="949">Physical Connection&lt;/text>

 
 &lt;line x1="1040" y1="965" x2="1090" y2="965" stroke="#8b949e" stroke-width="1.5" stroke-dasharray="6 3"/>
 &lt;text class="nt-device-detail" x="1100" y="969">Virtual / Tunnel&lt;/text>

 
 &lt;circle cx="1055" cy="985" r="8" fill="none" stroke="#4fc3f7" stroke-width="1.5"/>
 &lt;text class="nt-device-detail" x="1052" y="988" text-anchor="middle" fill="#4fc3f7" style="font-size:7px;font-weight:700;">VIP&lt;/text>
 &lt;text class="nt-device-detail" x="1100" y="989">HA Virtual IP (VRRP)&lt;/text>

 
 &lt;rect x="1230" y="938" width="12" height="12" rx="2" fill="rgba(30,95,58,0.3)" stroke="#66bb6a"/>
 &lt;text class="nt-device-detail" x="1248" y="949">Management&lt;/text>

 &lt;rect x="1230" y="958" width="12" height="12" rx="2" fill="rgba(95,74,30,0.3)" stroke="#ffa726"/>
 &lt;text class="nt-device-detail" x="1248" y="969">Servers&lt;/text>

 &lt;rect x="1230" y="978" width="12" height="12" rx="2" fill="rgba(74,30,95,0.3)" stroke="#ec407a"/>
 &lt;text class="nt-device-detail" x="1248" y="989">Isolated&lt;/text>

 &lt;rect x="1310" y="938" width="12" height="12" rx="2" fill="rgba(0,77,64,0.3)" stroke="#26a69a"/>
 &lt;text class="nt-device-detail" x="1328" y="949">IoT&lt;/text>

 &lt;rect x="1310" y="958" width="12" height="12" rx="2" fill="rgba(30,58,95,0.3)" stroke="#42a5f5"/>
 &lt;text class="nt-device-detail" x="1328" y="969">AI / Dev&lt;/text>

 &lt;rect x="1310" y="978" width="12" height="12" rx="2" fill="rgba(255,193,7,0.15)" stroke="#f57f17"/>
 &lt;text class="nt-device-detail" x="1328" y="989">FW Mgmt&lt;/text>

 
 
 
 &lt;rect x="30" y="855" width="340" height="175" rx="8" fill="rgba(255,255,255,0.02)" stroke="#30363d"/>
 &lt;text class="nt-device-detail" x="200" y="873" text-anchor="middle" fill="#8b949e" style="font-weight:600;">EXTERNAL ACCESS PATHS&lt;/text>

 
 &lt;text class="nt-device-detail" x="50" y="895" fill="#4fc3f7">☁️ Cloudflare Tunnel (Zero-Trust):&lt;/text>
 &lt;text class="nt-device-detail" x="60" y="910">Vaultwarden · WireGuard · TinyPilot&lt;/text>
 &lt;text class="nt-device-detail" x="60" y="923">Emby · OpenSpeed Test · KASM&lt;/text>

 
 &lt;text class="nt-device-detail" x="50" y="945" fill="#ffa726">🔀 Caddy HA (Internal TLS):&lt;/text>
 &lt;text class="nt-device-detail" x="60" y="960">*.loc.domain.com wildcard cert&lt;/text>
 &lt;text class="nt-device-detail" x="60" y="973">All internal services via DNS-01&lt;/text>

 
 &lt;text class="nt-device-detail" x="50" y="995" fill="#66bb6a">🔒 Direct (Management only):&lt;/text>
 &lt;text class="nt-device-detail" x="60" y="1010">Proxmox UI · NAS DSM · Pi-hole&lt;/text>

 &lt;/svg>
&lt;/div>


 
 &lt;script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js">&lt;/script>
 &lt;style>
 .network-topology-wrapper:hover .network-topology-expand-hint { opacity: 1 !important; }
 .mermaid-lightbox {
 position: fixed; top: 0; left: 0; width: 100vw; height: 100vh;
 background: rgba(0,0,0,0.85); z-index: 9999;
 display: flex; align-items: center; justify-content: center;
 opacity: 0; transition: opacity 0.2s;
 }
 .mermaid-lightbox.active { opacity: 1; }
 .mermaid-lightbox-inner {
 width: 90vw; height: 85vh; background: #0d1117;
 border-radius: 12px; position: relative; overflow: hidden;
 box-shadow: 0 20px 60px rgba(0,0,0,0.5);
 }
 .mermaid-lightbox-inner svg { width: 100% !important; height: 100% !important; max-width: none !important; }
 .mermaid-lightbox-controls {
 position: absolute; top: 12px; right: 12px; display: flex; gap: 6px; z-index: 10;
 }
 .mermaid-lightbox-controls button {
 background: rgba(0,0,0,0.6); color: #fff; border: none; border-radius: 8px;
 width: 36px; height: 36px; font-size: 18px; cursor: pointer;
 display: flex; align-items: center; justify-content: center;
 transition: background 0.15s;
 }
 .mermaid-lightbox-controls button:hover { background: rgba(0,0,0,0.8); }
 .mermaid-lightbox-hint {
 position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%);
 background: rgba(0,0,0,0.5); color: #fff; border-radius: 6px;
 padding: 6px 14px; font-size: 12px; pointer-events: none;
 }
 .mermaid-lightbox-svg {
 width: 100%; height: 100%;
 }
 &lt;/style>
 &lt;script>
 document.addEventListener('DOMContentLoaded', () => {
 document.querySelectorAll('.network-topology-wrapper').forEach(wrapper => {
 wrapper.addEventListener('click', () => {
 const svg = wrapper.querySelector('svg');
 if (!svg) return;

 const overlay = document.createElement('div');
 overlay.className = 'mermaid-lightbox';
 overlay.innerHTML = `
 &lt;div class="mermaid-lightbox-inner" style="background:#0d1117">
 &lt;div class="mermaid-lightbox-controls">
 &lt;button data-action="zoomin" title="Zoom in">+&lt;/button>
 &lt;button data-action="zoomout" title="Zoom out">&amp;minus;&lt;/button>
 &lt;button data-action="reset" title="Reset view">↺&lt;/button>
 &lt;button data-action="close" title="Close (Esc)">&amp;times;&lt;/button>
 &lt;/div>
 &lt;div class="mermaid-lightbox-svg" style="width:100%;height:100%;">&lt;/div>
 &lt;div class="mermaid-lightbox-hint">Scroll to zoom · Drag to pan · Esc to close&lt;/div>
 &lt;/div>
 `;

 const svgContainer = overlay.querySelector('.mermaid-lightbox-svg');
 const cloned = svg.cloneNode(true);
 cloned.style.maxWidth = 'none';
 svgContainer.appendChild(cloned);
 document.body.appendChild(overlay);
 requestAnimationFrame(() => overlay.classList.add('active'));

 const pz = svgPanZoom(cloned, {
 zoomEnabled: true, controlIconsEnabled: false,
 fit: true, center: true,
 minZoom: 0.2, maxZoom: 15,
 zoomScaleSensitivity: 0.3,
 mouseWheelZoomEnabled: true,
 dblClickZoomEnabled: true,
 });

 const close = () => {
 overlay.classList.remove('active');
 setTimeout(() => { pz.destroy(); overlay.remove(); }, 200);
 };

 overlay.querySelector('[data-action="close"]').addEventListener('click', close);
 overlay.querySelector('[data-action="zoomin"]').addEventListener('click', () => pz.zoomIn());
 overlay.querySelector('[data-action="zoomout"]').addEventListener('click', () => pz.zoomOut());
 overlay.querySelector('[data-action="reset"]').addEventListener('click', () => { pz.resetZoom(); pz.center(); });
 overlay.addEventListener('click', e => { if (e.target === overlay) close(); });
 document.addEventListener('keydown', function esc(e) {
 if (e.key === 'Escape') { close(); document.removeEventListener('keydown', esc); }
 });
 });
 });
 });
 &lt;/script>



&lt;h2 class="relative group">VLAN Design
 &lt;div id="vlan-design" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#vlan-design" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>VLAN&lt;/th>
 &lt;th>Subnet&lt;/th>
 &lt;th>Purpose&lt;/th>
 &lt;th>Key Services&lt;/th>
 &lt;th>Security Level&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>10&lt;/strong>&lt;/td>
 &lt;td>192.168.10.0/24&lt;/td>
 &lt;td>Management &amp;amp; Core&lt;/td>
 &lt;td>NAS, DNS HA, KVM devices&lt;/td>
 &lt;td>🔒 High&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>30&lt;/strong>&lt;/td>
 &lt;td>192.168.30.0/24&lt;/td>
 &lt;td>Server Network&lt;/td>
 &lt;td>Proxmox, Docker, Apps&lt;/td>
 &lt;td>⚙️ Medium&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>40&lt;/strong>&lt;/td>
 &lt;td>172.30.40.0/24&lt;/td>
 &lt;td>Isolated Services&lt;/td>
 &lt;td>Restricted access&lt;/td>
 &lt;td>🔸 Low&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>50&lt;/strong>&lt;/td>
 &lt;td>172.30.50.0/24&lt;/td>
 &lt;td>IoT Devices&lt;/td>
 &lt;td>Smart home&lt;/td>
 &lt;td>📱 Minimal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>254&lt;/strong>&lt;/td>
 &lt;td>10.254.254.0/24&lt;/td>
 &lt;td>Firewall Management&lt;/td>
 &lt;td>Out-of-band mgmt&lt;/td>
 &lt;td>🔐 Critical&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Design principle:&lt;/strong> Servers (VLAN 30) can reach management (VLAN 10), but management devices are protected from server-initiated connections. IoT devices are fully isolated—they cannot initiate connections to any other VLAN.&lt;/p></description></item></channel></rss>