<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Unifi on homelab</title>
    <link>https://homelab.nbkelley.com/tags/unifi/</link>
    <description>Recent content in Unifi on homelab</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 30 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://homelab.nbkelley.com/tags/unifi/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>UniFi Express VPN &amp; Network Management</title>
      <link>https://homelab.nbkelley.com/docs/networking/unifi-express-vpn/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/networking/unifi-express-vpn/</guid>
      <description>&lt;h1 id=&#34;unifi-express-vpn--network-management&#34;&gt;UniFi Express VPN &amp;amp; Network Management&lt;a class=&#34;anchor&#34; href=&#34;#unifi-express-vpn--network-management&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Methodology for configuring ProtonVPN WireGuard on UniFi Express.&lt;/li&gt;&#xA;&lt;li&gt;Kill switch implementation to prevent IP/DNS leaks when the VPN drops.&lt;/li&gt;&#xA;&lt;li&gt;Best practices for managing Netgear managed switches via dedicated subnets and secure ports.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;WireGuard Protocol&lt;/strong&gt;: Selected over OpenVPN for superior speed and efficiency on UniFi Express.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kill Switch Pattern&lt;/strong&gt;: Default-deny WAN traffic; only allow forwarding through the &lt;code&gt;wg0&lt;/code&gt; interface.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Netgear Management&lt;/strong&gt;: Restrict switch web GUI access to a dedicated management VLAN/subnet using HTTPS.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-configuration&#34;&gt;Current Configuration&lt;a class=&#34;anchor&#34; href=&#34;#current-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;VPN Client&lt;/strong&gt;: ProtonVPN (WireGuard)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;: &lt;code&gt;us-123.protonvpn.net:51820&lt;/code&gt; (example high-speed server)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ProtonVPN DNS&lt;/strong&gt;: &lt;code&gt;10.2.0.1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Allowed IPs&lt;/strong&gt;: &lt;code&gt;0.0.0.0/0&lt;/code&gt; (full tunnel)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Netgear Switch Management Ports&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HTTP: &lt;code&gt;80&lt;/code&gt; (insecure, avoid)&lt;/li&gt;&#xA;&lt;li&gt;HTTPS: &lt;code&gt;443&lt;/code&gt; (secure web GUI)&lt;/li&gt;&#xA;&lt;li&gt;SSH: &lt;code&gt;22&lt;/code&gt; (CLI access)&lt;/li&gt;&#xA;&lt;li&gt;SNMP: &lt;code&gt;161&lt;/code&gt; (monitoring)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;historical-notes&#34;&gt;Historical Notes&lt;a class=&#34;anchor&#34; href=&#34;#historical-notes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conversation dated 2025-04-14.&lt;/li&gt;&#xA;&lt;li&gt;Gateway device referred to as UniFi Express (infrastructure list notes &amp;ldquo;UCG Express &amp;lsquo;Olorín&amp;rsquo; at 192.168.1.1&amp;rdquo;).&lt;/li&gt;&#xA;&lt;li&gt;Netgear MS308E is the managed switch in the homelab.&lt;/li&gt;&#xA;&lt;li&gt;Kill switch and DNS leak prevention rely on &lt;code&gt;iptables&lt;/code&gt;/&lt;code&gt;nftables&lt;/code&gt; or UniFi OS firewall rules.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;open-questions&#34;&gt;Open Questions&lt;a class=&#34;anchor&#34; href=&#34;#open-questions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does UniFi Express support native WireGuard kill switch in the GUI, or is manual CLI firewall configuration required?&lt;/li&gt;&#xA;&lt;li&gt;Specific UniFi OS version and exact GUI paths for VPN/kill switch implementation.&lt;/li&gt;&#xA;&lt;li&gt;Whether split tunneling is needed for specific homelab services.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-pages&#34;&gt;Related Pages&lt;a class=&#34;anchor&#34; href=&#34;#related-pages&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/infrastructure/network/&#34;&gt;Network Infrastructure &amp;amp; VLANs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/networking/vlan_setup/&#34;&gt;VLAN Configuration: OPNsense &amp;amp; Netgear MS308E&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/security/cloudflare_integration/&#34;&gt;Cloudflare Integration: SSL &amp;amp; DNS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/services/uptime-kuma/&#34;&gt;Uptime Kuma - Configuration &amp;amp; Integrations&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>UniFi UX7 &amp; Netgear MS308E VLAN Setup</title>
      <link>https://homelab.nbkelley.com/docs/networking/ufi-netgear-vlan-setup/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/networking/ufi-netgear-vlan-setup/</guid>
      <description>&lt;h1 id=&#34;unifi-ux7--netgear-ms308e-vlan-setup&#34;&gt;UniFi UX7 &amp;amp; Netgear MS308E VLAN Setup&lt;a class=&#34;anchor&#34; href=&#34;#unifi-ux7--netgear-ms308e-vlan-setup&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Multi-switch VLAN topology using UniFi UCG Express (UX7) and Netgear MS308E switches.&lt;/li&gt;&#xA;&lt;li&gt;Netgear MS308E 802.1Q Advanced configuration pattern for trunks and access ports.&lt;/li&gt;&#xA;&lt;li&gt;Troubleshooting methodology for multi-switch chains (isolate to inter-switch trunks vs. device-specific vs. firewall).&lt;/li&gt;&#xA;&lt;li&gt;UX7 firewall rule correction for IoT isolation (Tharkûn VLAN 3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;VLAN 1 (Gandalf): Untagged on trunks, PVID 1. Used for servers and switch management.&lt;/li&gt;&#xA;&lt;li&gt;VLAN 2 (Mithrandir): Tagged on trunks, Untagged on access. PVID 2. Routes through UX7 VPN.&lt;/li&gt;&#xA;&lt;li&gt;VLAN 3 (Tharkûn): Tagged on trunks, Untagged on access. PVID 3. Isolated IoT network.&lt;/li&gt;&#xA;&lt;li&gt;Native VLAN set to 1 on trunks to ensure management traffic passes untagged and remains accessible.&lt;/li&gt;&#xA;&lt;li&gt;UX7 Firewall: Tharkûn (VLAN 3) placed in DMZ zone. Required explicit &amp;ldquo;Allow DMZ to Internet&amp;rdquo; rule to restore IoT connectivity.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-configuration&#34;&gt;Current Configuration&lt;a class=&#34;anchor&#34; href=&#34;#current-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;UX7 (Olorín)&lt;/strong&gt;: 192.168.1.1&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Port 1 (to Netgear Switch 1): Trunk, Native VLAN 1, Allowed VLANs 1, 2, 3.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Netgear MS308E (Switch 1)&lt;/strong&gt;: 192.168.1.239&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Port 1 (to UX7): VLAN 1 Untagged (PVID 1), VLAN 2 Tagged, VLAN 3 Tagged.&lt;/li&gt;&#xA;&lt;li&gt;Ports 2, 3 (to downstream switches): Same as Port 1.&lt;/li&gt;&#xA;&lt;li&gt;Access Ports (e.g., Port 8 to U7 AP): VLAN 3 Untagged, PVID 3.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Netgear MS308E (Switch 2)&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Trunk ports: VLAN 1 Untagged (PVID 1), VLAN 2 Tagged, VLAN 3 Tagged.&lt;/li&gt;&#xA;&lt;li&gt;Access Ports: VLAN 2 Untagged (PVID 2) for PCs, VLAN 3 Untagged (PVID 3) for IoT (e.g., Hue Hub).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;UX7 Firewall Rules (Tharkûn/DMZ)&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Allow DMZ to Internet&lt;/li&gt;&#xA;&lt;li&gt;Allow DMZ to Gateway&lt;/li&gt;&#xA;&lt;li&gt;Block DMZ to Internal&lt;/li&gt;&#xA;&lt;li&gt;Block DMZ to VPN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;historical-notes&#34;&gt;Historical Notes&lt;a class=&#34;anchor&#34; href=&#34;#historical-notes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Initial attempts to set trunk ports to &amp;ldquo;No Native VLAN&amp;rdquo; (all tagged) caused lockout because management traffic (VLAN 1) became untagged and was dropped. Reverted to Native VLAN = 1.&lt;/li&gt;&#xA;&lt;li&gt;VLAN 2 (Mithrandir) initially failed on downstream switches due to missing tagged configuration on inter-switch trunks.&lt;/li&gt;&#xA;&lt;li&gt;VLAN 3 (Tharkûn) failed due to missing firewall rule in UX7 Site Manager for the DMZ zone.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;open-questions&#34;&gt;Open Questions&lt;a class=&#34;anchor&#34; href=&#34;#open-questions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How to handle Rivendell (VLAN 4) when deployed?&lt;/li&gt;&#xA;&lt;li&gt;Will U7 APs require specific VLAN tagging configurations for Tharkûn WiFi?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-pages&#34;&gt;Related Pages&lt;a class=&#34;anchor&#34; href=&#34;#related-pages&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/networking/vlan_setup.md&lt;/code&gt; (Legacy OPNsense context)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/infrastructure/network.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wiki/networking/opnsense_dmz_iot_firewall.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://homelab.nbkelley.com/docs/services/uptime-kuma/&#34;&gt;Uptime Kuma - Configuration &amp;amp; Integrations&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI-Driven Monitoring Pipeline</title>
      <link>https://homelab.nbkelley.com/docs/monitoring/pipeline/</link>
      <pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/monitoring/pipeline/</guid>
      <description>&lt;h1 id=&#34;ai-driven-monitoring-pipeline&#34;&gt;AI-Driven Monitoring Pipeline&lt;a class=&#34;anchor&#34; href=&#34;#ai-driven-monitoring-pipeline&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The monitoring pipeline is fully operational and running hourly. It collects rich structured data from four sources (Prometheus — 7 metrics, Uptime Kuma, UniFi, Synology), runs 4 parallel Ollama summarization calls, synthesises a final status report, and writes everything to Postgres. Hourly snapshots of raw UniFi and Prometheus data are stored in dedicated tables for delta computation. End-to-end runtime is ~13 minutes using &lt;code&gt;gemma4:e4b&lt;/code&gt; CPU-only on the Pavilion — accepted as-is pending Mac Studio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Network Infrastructure &amp; VLANs</title>
      <link>https://homelab.nbkelley.com/docs/infrastructure/network/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/infrastructure/network/</guid>
      <description>&lt;h1 id=&#34;network-infrastructure--vlans&#34;&gt;Network Infrastructure &amp;amp; VLANs&lt;a class=&#34;anchor&#34; href=&#34;#network-infrastructure--vlans&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-was-established&#34;&gt;What Was Established&lt;a class=&#34;anchor&#34; href=&#34;#what-was-established&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The network uses a UniFi UCG Express with a multi-VLAN setup. A recent incident involving a VPN expiry caused a routing failure on specific VLANs due to policy-based routing (PBR) without a fallback mechanism.&lt;/p&gt;&#xA;&lt;h2 id=&#34;key-decisions&#34;&gt;Key Decisions&lt;a class=&#34;anchor&#34; href=&#34;#key-decisions&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;VLAN Segmentation&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gandalf&lt;/strong&gt;: Server network (Always-on, stable, no VPN).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mithrandir (VLAN 2)&lt;/strong&gt;: Client/AI network. Traffic is routed through ProtonVPN via WireGuard.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Harken (VLAN 3)&lt;/strong&gt;: General usage.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tharkûn (DMZ)&lt;/strong&gt;: Restricted zone (DMZ $\rightarrow$ Internal is Blocked).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Rivendell (VLAN 4)&lt;/strong&gt;: Unused.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;VPN Configuration&lt;/strong&gt;: ProtonVPN WireGuard Client 1 is used for Mithrand/VLAN 2. &lt;strong&gt;Critical&lt;/strong&gt;: Ensure &amp;ldquo;Block traffic if WireGuard is down&amp;rdquo; is enabled to prevent IP leaks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IP Management&lt;/strong&gt;: Use &lt;strong&gt;DHCP Reservations (Fixed IPs)&lt;/strong&gt; in the UniFi Controller rather than configuring static IPs on individual hosts to prevent port-forward breakage during DHCP lease renewals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-configuration&#34;&gt;Current Configuration&lt;a class=&#34;anchor&#34; href=&#34;#current-configuration&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Known Fixed IPs (DHCP Reservations)&lt;/strong&gt;:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
