<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vlan on homelab</title>
    <link>https://homelab.nbkelley.com/tags/vlan/</link>
    <description>Recent content in Vlan 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/vlan/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>OPNsense DMZ Firewall Rules for IoT</title>
      <link>https://homelab.nbkelley.com/docs/networking/opnsense_dmz_iot_firewall/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/networking/opnsense_dmz_iot_firewall/</guid>
      <description>&lt;h1 id=&#34;opnsense-dmz-firewall-rules-for-iot&#34;&gt;OPNsense DMZ Firewall Rules for IoT&lt;a class=&#34;anchor&#34; href=&#34;#opnsense-dmz-firewall-rules-for-iot&#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;A structured firewall rule set for isolating IoT devices in a DMZ zone. The rules enforce a &amp;ldquo;high-to-low trust&amp;rdquo; flow, ensuring IoT devices can reach the internet for cloud services while preventing them from initiating connections to the trusted LAN. This pattern is critical for preventing lateral movement from compromised IoT devices.&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;Explicit Allow / Implicit Deny&lt;/strong&gt;: Only allow necessary outbound traffic (HTTP/HTTPS, DNS, NTP) from DMZ to WAN.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Strict Containment&lt;/strong&gt;: Explicitly block all DMZ-initiated traffic to the LAN zone.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Controlled LAN Access&lt;/strong&gt;: Default deny for LAN-to-DMZ, with specific allow rules only for administration or required services.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;WAN Isolation&lt;/strong&gt;: Block all unsolicited inbound traffic from WAN to DMZ.&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;em&gt;Note: The homelab currently uses VLANs (Gandalf 192.168.1.x, Mithrandir 192.168.2.x, Tharkûn 192.168.3.x, Rivendell 192.168.4.x) managed by a UniFi Express gateway (&amp;ldquo;Olorín&amp;rdquo;, 192.168.1.1). These OPNsense zone-based rules should be adapted to the homelab&amp;rsquo;s VLAN structure or applied to a dedicated IoT VLAN (e.g., 192.168.50.x).&lt;/em&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>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>
    <item>
      <title>VLAN Configuration: OPNsense &amp; Netgear MS308E</title>
      <link>https://homelab.nbkelley.com/docs/networking/vlan_setup/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://homelab.nbkelley.com/docs/networking/vlan_setup/</guid>
      <description>&lt;h1 id=&#34;vlan-configuration-opnsense--netgear-ms308e&#34;&gt;VLAN Configuration: OPNsense &amp;amp; Netgear MS308E&lt;a class=&#34;anchor&#34; href=&#34;#vlan-configuration-opnsense--netgear-ms308e&#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;Configuration pattern for implementing tagged (trunk) and untagged (access) VLANs using OPNsense as the router and a Netgear MS308E managed switch.&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 Naming/ID&lt;/strong&gt;: Example VLAN &amp;ldquo;Incánus&amp;rdquo; assigned ID &lt;code&gt;20&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Trunking Strategy&lt;/strong&gt;: The port connecting OPNsense to the Netgear switch must be configured as a &lt;strong&gt;Tagged&lt;/strong&gt; port for all active VLANs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Access Port Strategy&lt;/strong&gt;: Ports for end-devices must be &lt;strong&gt;Untagged&lt;/strong&gt; for the specific VLAN, with the &lt;strong&gt;PVID&lt;/strong&gt; (Port VLAN ID) set to match that VLAN.&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;h3 id=&#34;opnsense-setup&#34;&gt;OPNsense Setup&lt;a class=&#34;anchor&#34; href=&#34;#opnsense-setup&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Create VLAN&lt;/strong&gt;: &lt;code&gt;Interfaces → Other Types → VLAN&lt;/code&gt; (Assign Parent Interface and Tag ID).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Assign Interface&lt;/strong&gt;: &lt;code&gt;Interfaces → Assignments&lt;/code&gt; (Add the new VLAN interface).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Configure IP&lt;/strong&gt;: Set a static IPv4 address (e.g., &lt;code&gt;192.168.20.1/24&lt;/code&gt; for VLAN 20).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DHCP&lt;/strong&gt;: Enable DHCPv4 under &lt;code&gt;Services → DHCPv4 → [VLAN Interface]&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;netgear-ms308e-setup&#34;&gt;Netgear MS308E Setup&lt;a class=&#34;anchor&#34; href=&#34;#netgear-ms308e-setup&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;VLAN Membership&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Trunk Port (to OPNsense)&lt;/strong&gt;: Set as &lt;strong&gt;Tagged&lt;/strong&gt; for all VLANs (e.g., VLAN 20, 30).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Access Port (to Device)&lt;/strong&gt;: Set as &lt;strong&gt;Untagged&lt;/strong&gt; for the target VLAN.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PVID Configuration&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For Access Ports, the &lt;strong&gt;PVID&lt;/strong&gt; must be updated to match the VLAN ID (e.g., Port 1: PVID 20).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&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;p&gt;Configuration established during the rollout of the &amp;ldquo;Incánus&amp;rdquo; network segment.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
