<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Router-on-a-Stick on Nabeels blog</title>
    <link>/tags/router-on-a-stick/</link>
    <description>Nabeels blog (Router-on-a-Stick)</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
      
        <managingEditor>shaikhnabeel2706@gmail.com
          
            (Nabeel)
          
        </managingEditor>
      

      
    

    
    <lastBuildDate>Fri, 27 Mar 2026 00:00:00 +0000</lastBuildDate>
    
    <atom:link href="/tags/router-on-a-stick/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Virtualized OPNsense, Router-on-a-Stick, and Layer 2 Troubleshooting</title>
      <link>/posts/virtualized-opnsense-router-on-a-stick-and-layer-2-troubleshooting/</link>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <author>shaikhnabeel2706@gmail.com (Nabeel)</author>
      <guid>/posts/virtualized-opnsense-router-on-a-stick-and-layer-2-troubleshooting/</guid>
      <description>&lt;h3 id=&#34;section-1--the-itch&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#section-1--the-itch&#34;&gt;
        ##
    &lt;/a&gt;
    Section 1 — The Itch
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;For a solid year, I was on a nationwide ISP that handed me a router with exactly two settings accessible: change the LAN IP or disable DHCP. Truly generous of them. It was a locked box. I couldn&amp;rsquo;t even turn off its Wi-Fi to use my own. You get what you get. That was the year I decided local providers exist for a reason.&lt;/p&gt;
&lt;p&gt;I switched to a local one who just handed off a pure ethernet connection from their fiber ONT. I got to plug in my own router, a TP-Link, nothing fancy, but mine. It worked. Still, there was not much to customize. I had been running a homelab for a while by then and had my addressing laid out the way I like it. I used a &lt;code&gt;/16&lt;/code&gt; subnet carved up logically. I used &lt;code&gt;.10.x&lt;/code&gt; for physical machines, &lt;code&gt;.20.x&lt;/code&gt; for VMs, and so on. The router didn&amp;rsquo;t care about any of that. It just happily handed out addresses with no regard for my schemes. I opened Fing one day to do a network scan, and I don&amp;rsquo;t think it ever finished. It was pinging absolutely nothing for most of the address range and wasting time waiting for responses that would never reply. I am honestly not sure it has finished to this day.&lt;/p&gt;
&lt;p&gt;The obvious next move was OpenWrt. Custom firmware, full control, free. Except I checked the supported device list and my two routers weren&amp;rsquo;t on it. Not an edge case, not limited support. Just not there. That is the reality of buying consumer hardware in India; the OpenWrt coverage is patchy at best.&lt;/p&gt;
&lt;p&gt;So that was that. I started looking at managed switches.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Side note on that: this is actually my second switch. When I was first setting up the homelab, I knew I wanted VLANs. I did not, however, fully understand the difference between managed and unmanaged switches. I ended up with a TP-Link LiteWave LS108G, a cheap, no-frills switch that does exactly one thing: switching. No VLANs, no configuration, just packets going where packets go.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In January, I finally pulled the trigger on a TP-Link TL-SG108E. This is an 8-port managed switch with web-based VLAN configuration, a heavy metal shell, and dual link speed indicator lights. Those dual lights immediately told me I had been running one of my Proxmox nodes on a 10/100 cable. Small win. And that purchase is what kicked off everything that follows.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;section-2--the-plan&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#section-2--the-plan&#34;&gt;
        ##
    &lt;/a&gt;
    Section 2 — The Plan
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;So the search began. Dedicated router boxes like the cheap N150 units are not available in India. Enterprise gear is expensive, bulky, and overkill. The RPi5 came to mind briefly but it was not the right tool for this. The used office hardware market, the classic homelab goldmine, has gotten out of hand; an i3 SFF with 8GB RAM now goes for 8,000 INR minimum. New hardware in this economy? Please.&lt;/p&gt;
&lt;p&gt;What I did have was a ThinkCentre Mini PC with an i5 and 16GB RAM, already running Proxmox. I have been using Proxmox for years on my other nodes (hence PVE1 and PVE2). It is my default OS for anything that needs to run VMs. Virtualizing a router on it was a natural fit, and it was more than capable for the job.&lt;/p&gt;
&lt;p&gt;The only real constraint was having one physical NIC. The proper way to virtualize a router is to pass through a dedicated NIC, ideally a dual or quad-port card, entirely to the firewall VM. This leaves the host its own separate interface. If you only have two ports, you are already stretching it: one goes to WAN, and the LAN NIC ends up shared between the host and the VM. With one NIC, that whole premise collapses, which is exactly where Router-on-a-Stick comes in.&lt;/p&gt;
&lt;p&gt;Router-on-a-Stick came up while I was researching. It is the idea that a single physical interface can carry multiple isolated networks simultaneously using 802.1Q VLAN tagging. Packets are stamped with a VLAN ID that tells every device on the wire which network they belong to, and the managed switch handles the segregation at Layer 2. One wire, many networks, cleanly separated. For my 300 Mbps symmetrical connection, there is no bottleneck concern at all.&lt;/p&gt;
&lt;p&gt;The flow ends up looking like a chain: one physical NIC splits into a host management interface and a trunk to the OPNsense VM, which then presents two virtual interfaces of its own: one for WAN and one for LAN.&lt;/p&gt;
&lt;p&gt;My original idea was actually a dedicated WAN NIC via an M.2 A+E key adapter. Those slots on Mini PCs are usually used for Wi-Fi cards, but you can drop in a 2.5G ethernet adapter and get a proper second NIC. Unsurprisingly, they are almost impossible to source in India. I found exactly two sites carrying them. That is still the plan eventually, but the current setup works flawlessly in the meantime.&lt;/p&gt;
&lt;p&gt;OPNsense was the natural choice for the firewall. It is open source, actively maintained, and features a UI that actually exposes the controls you want without requiring a doctorate to navigate.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;section-3--the-build&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#section-3--the-build&#34;&gt;
        ##
    &lt;/a&gt;
    Section 3 — The Build
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;I had set up VLANs before in a previous project, but nothing at this level of complexity. A managed switch, a single-NIC router-on-a-stick topology, and ISP quirks thrown in meant this was a different beast entirely. I knew I needed to plan the schema carefully before touching a single config page.&lt;/p&gt;
&lt;p&gt;I used a &lt;code&gt;/16&lt;/code&gt; subnet, and that gives you 65,536 IP addresses in a single broadcast domain. Whenever a device needs to find another, like a simple ARP request asking &amp;ldquo;who has &lt;code&gt;10.0.0.5&lt;/code&gt;?&amp;rdquo;, it yells that question to every single device on the wire. With a &lt;code&gt;/16&lt;/code&gt; and no VLANs, there are no walls. Every physical machine, VM, and smart bulb hears the background noise.&lt;/p&gt;
&lt;p&gt;I had an AI assistant open during the planning phase, mostly as a sounding board to sanity-check the schema before I touched a single configuration page. We landed on a clean, segmented layout:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VLAN 10 (NET_INFRA):&lt;/strong&gt; Bare metal and hypervisor management.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VLAN 20 (NET_VMS):&lt;/strong&gt; Standard server and container workloads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VLAN 25 (NET_DESKTOP):&lt;/strong&gt; Secured, trusted workstations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VLAN 30 (NET_WIFI):&lt;/strong&gt; Since my repurposed TP-Link router does not support VLAN tagging for individual SSIDs, the entire Wi-Fi access point gets dumped into this isolated network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VLAN 98 (NET_BLACKHOLE):&lt;/strong&gt; The zero-trust sinkhole for any unused physical ports on the switch. It doesn&amp;rsquo;t actually exist in OPNsense — no DHCP, no gateway. If a rogue device gets plugged into a port with this VLAN ID, the link lights turn on, but nothing happens. It&amp;rsquo;s like plugging into an ethernet wall jack that was never wired up. Cut off at Layer 2 with zero network access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VLAN 99 (NET_WAN):&lt;/strong&gt; The isolated transport layer for raw ISP fiber traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Up on the Proxmox host, I set the virtual bridge (&lt;code&gt;vmbr0&lt;/code&gt;) to be VLAN-aware. This allows the hypervisor to read the 802.1Q tags and forward frames to the correct virtual machines. But it is not just a software toggle; you have to account for physical constraints.&lt;/p&gt;
&lt;p&gt;Standard Ethernet frames carry an MTU of 1500 bytes for the payload, plus 18 bytes of Layer 2 header and trailer, totaling 1518 bytes. A VLAN (802.1Q) tag adds 4 bytes to the Ethernet frame, making the total frame size 1522 bytes for a 1500-byte payload. MTU settings usually refer to the Layer 3 payload, but interfaces enforce Layer 2 frame limits. If the interface doesn&amp;rsquo;t have proper &amp;ldquo;VLAN-size&amp;rdquo; support and enforces a strict 1518-byte limit, the hardware just drops the frame as oversized.&lt;/p&gt;
&lt;p&gt;For the WAN connection, instead of dealing with VLAN configuration inside the OPNsense UI, I tagged VLAN 99 directly on the virtual NIC inside Proxmox. This effectively creates an invisible, hardware-isolated tunnel straight from the physical switch port to the virtual firewall.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;section-4--the-bugs&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#section-4--the-bugs&#34;&gt;
        ##
    &lt;/a&gt;
    Section 4 — The Bugs
&lt;/div&gt;
&lt;/h3&gt;
&lt;h4 id=&#34;the-sequencing-lockout-and-the-mobile-console&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-sequencing-lockout-and-the-mobile-console&#34;&gt;
        ###
    &lt;/a&gt;
    The Sequencing Lockout and The Mobile Console
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Before I even hit the gateway issues, I managed to completely lock myself out of my own infrastructure. I made a classic sequencing error: I configured the VLANs on the physical switch before I had set up the corresponding VLAN interfaces and DHCP servers in OPNsense.&lt;/p&gt;
&lt;p&gt;The moment I hit &amp;ldquo;Apply&amp;rdquo; on the switch, my desktop lost its IP. No DHCP. No route to Proxmox. No route to the switch. And because I had already aggressively sinkholed all the empty physical ports into VLAN 98, I couldn&amp;rsquo;t even plug a laptop directly into the switch to bypass it. I had engineered a perfect, impenetrable fortress around the new VLAN layout, and I was stuck inside it with a broken path from the desktop — not locked out of a working network, but unable to reach the gear I needed to fix from the machine I normally use.&lt;/p&gt;
&lt;p&gt;At this point the uplink was still going through my old Wi-Fi router, not straight into the ONT. That is why the phone still had internet over Wi-Fi, and why I could still reach the Proxmox console at all; the house link was intact, only the desktop&amp;rsquo;s path through the new switch topology was dead.&lt;/p&gt;
&lt;p&gt;But I remembered a trick from a past project. If you have console access to the firewall, you can temporarily disable the packet filter entirely, which allows you to access the web GUI via the external IP.&lt;/p&gt;
&lt;p&gt;At the time, my phone was connected to my old Wi-Fi router. What followed was one of the most annoying troubleshooting sessions of my life. I had to log into the Proxmox web interface on my phone&amp;rsquo;s browser, open the clunky HTML5 VNC console for the OPNsense VM, navigate the shell menu on a touch screen, and disable the firewall.&lt;/p&gt;
&lt;p&gt;I got in. But every time you apply a configuration change in the OPNsense web GUI, it automatically restarts the firewall service and re-applies the block rules. This meant I had to repeat the mobile VNC shell dance to kill the firewall after every single change. I had to configure all 6 VLANs, the DHCP server for VLAN 25, and all the associated firewall rules entirely from my phone. I even edited the switch config on the phone as well. It was an excruciating, tiny screen nightmare, but it worked. It saved me from having to factory reset the switch and start from scratch.&lt;/p&gt;
&lt;h4 id=&#34;the-mac-address-conflict&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-mac-address-conflict&#34;&gt;
        ###
    &lt;/a&gt;
    The MAC Address Conflict
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Spoofing the MAC address of the ISP-provided router is one of the most common techniques to bypass ISP hardware whitelists, so I went with it.&lt;/p&gt;
&lt;p&gt;At this stage, my old TP-Link Archer C6 was still connected directly to the ONT and handling the active PPPoE session. My plan was to set up OPNsense with the cloned MAC, test it by pulling a local DHCP IP from the Wi-Fi router, and then physically swap the cables.&lt;/p&gt;
&lt;p&gt;I flipped the router over and read the MAC off the sticker, plugged it into the OPNsense WAN interface, and fired it up. The interface couldn&amp;rsquo;t pull an IP.&lt;/p&gt;
&lt;p&gt;Here is what happened: the MAC address printed on the sticker was the LAN MAC of the router, the address ending in &lt;code&gt;:10&lt;/code&gt;. The WAN MAC, ending in &lt;code&gt;:11&lt;/code&gt;, I found later by logging into the Wi-Fi router&amp;rsquo;s admin page — not from the sticker. Because OPNsense was plugged into that exact router to test DHCP, I had engineered a Layer 2 conflict. Two distinct devices were claiming the exact same hardware address on the same network. The switch&amp;rsquo;s MAC address table was thrashing, and OPNsense was left starving for an IP.&lt;/p&gt;
&lt;p&gt;The fix was straightforward once I spotted it: the WAN MAC is simply the LAN MAC incremented by one, ending in &lt;code&gt;:11&lt;/code&gt;. I updated the spoofed address, and OPNsense immediately pulled a local IP from the router&amp;rsquo;s DHCP. Test passed. I switched the WAN interface over to PPPoE, unplugged from the Wi-Fi router, and patched the switch directly into the wall jack leading to the ONT.&lt;/p&gt;
&lt;h4 id=&#34;the-unplugged-ont&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-unplugged-ont&#34;&gt;
        ###
    &lt;/a&gt;
    The Unplugged ONT
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Throughout this troubleshooting loop, a standard debug step suggested by Gemini was to power cycle the fiber ONT after every major configuration change to flush the ISP&amp;rsquo;s stale session. Because my homelab and the ONT are in two different rooms separated by a wall, this meant getting up, walking over, switching it off, waiting, switching it back on, and walking back to the terminal. I had done this dance several times already.&lt;/p&gt;
&lt;p&gt;On what was supposed to be the final attempt, I walked over, switched the ONT off, and just walked back to my desk. I completely forgot to turn it back on.&lt;/p&gt;
&lt;p&gt;Ten minutes went by. The logs were showing connection timeouts. I admitted temporary defeat, grabbed my old Wi-Fi router, and plugged it into the homelab side wall jack just to get the house back online. I opened the router&amp;rsquo;s dashboard. It read: WAN Unplugged.&lt;/p&gt;
&lt;p&gt;I walked back into the other room. The ONT was just sitting there, completely powered off. I flipped the switch, walked back, swapped the cable back to the managed switch, and it tried to establish a PPPoE session. More on that next.&lt;/p&gt;
&lt;h4 id=&#34;the-mtu-trap&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-mtu-trap&#34;&gt;
        ###
    &lt;/a&gt;
    The MTU Trap
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Once the PPPoE connection was finally dialing out, I hit a wall of &lt;code&gt;MESSAGE TOO LONG&lt;/code&gt; errors in the system logs. Internet traffic was completely stalling.&lt;/p&gt;
&lt;p&gt;This goes back to the MTU math. PPPoE adds another 8 bytes of overhead on top of the 4-byte VLAN tag we already had. Worth noting: how these stack depends on where the VLAN tagging is applied, whether at the host, the switch, or the guest. In my setup, both were in play, and the combined overhead was enough to push frames past what the virtual bridge would pass. I fixed this by clamping the OPNsense WAN MTU down to 1484. The textbook PPPoE value is 1492, but 1484 was the number that actually cleared the errors in my environment. More conservative than strictly necessary, but it fit the actual path and the logs stopped complaining.&lt;/p&gt;
&lt;h4 id=&#34;the-gateway-blackhole&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-gateway-blackhole&#34;&gt;
        ###
    &lt;/a&gt;
    The Gateway Blackhole
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Getting an IP was only half the battle. OPNsense immediately marked the WAN gateway as &amp;ldquo;Defunct&amp;rdquo; with 100% packet loss, dropping my default route. I had an IP, but no internet.&lt;/p&gt;
&lt;p&gt;This turned out to be an ISP quirk. OPNsense uses a service called &lt;code&gt;dpinger&lt;/code&gt; to monitor gateway health via ICMP echo requests. My ISP silently drops all ICMP ping requests at their edge, so OPNsense assumed the connection was dead. The fix was a single checkbox: &lt;code&gt;System -&amp;gt; Gateways -&amp;gt; Configuration&lt;/code&gt; then &amp;ldquo;Disable Gateway Monitoring.&amp;rdquo; This forces the routing table to stay active regardless of ping status.&lt;/p&gt;
&lt;h4 id=&#34;the-vlan-1-trap-and-the-management-lockout&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#the-vlan-1-trap-and-the-management-lockout&#34;&gt;
        ###
    &lt;/a&gt;
    The VLAN 1 Trap and The Management Lockout
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;With internet finally flowing, I went to log into my switch&amp;rsquo;s web GUI from my desktop on VLAN 25. The page timed out.&lt;/p&gt;
&lt;p&gt;There were two problems. First, OPNsense&amp;rsquo;s default LAN interface was still on its factory &lt;code&gt;192.168.1.1/24&lt;/code&gt; assignment. Second, even with a permissive firewall rule, OPNsense had no route to the switch&amp;rsquo;s &lt;code&gt;172.16.0.x&lt;/code&gt; network. A firewall rule permits traffic; it doesn&amp;rsquo;t conjure routes out of thin air.&lt;/p&gt;
&lt;p&gt;The instinct here, and a trap a lot of people fall into, is to create a VLAN interface with ID 1 in OPNsense to bridge the gap. The problem is that VLAN 1 is typically the native or untagged VLAN on most switches; it expects untagged frames. If you explicitly create a &lt;code&gt;vlan01&lt;/code&gt; interface, the firewall inserts a &lt;code&gt;Tag=1&lt;/code&gt; header. The switch receives a tagged frame on a network it expects untagged, gets confused, and silently drops the packet. The exact behavior is switch-dependent, but the native versus tagged mismatch will bite you one way or another.&lt;/p&gt;
&lt;p&gt;The fix was a Parent Interface Bridge. OPNsense&amp;rsquo;s default LAN interface was already there from the factory image; I had not created a new one. I simply changed its IP address from the default &lt;code&gt;192.168.1.1/24&lt;/code&gt; to &lt;code&gt;172.16.0.1/24&lt;/code&gt;. In Proxmox, the raw virtual NIC acts as the parent to all tagged VLAN sub-interfaces. Any traffic sent out of this parent interface is inherently untagged. With that address on the existing LAN interface, OPNsense could natively route traffic as untagged frames directly to the switch.&lt;/p&gt;
&lt;h4 id=&#34;dont-just-allow-all&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#dont-just-allow-all&#34;&gt;
        ###
    &lt;/a&gt;
    Don&amp;rsquo;t Just Allow All
&lt;/div&gt;
&lt;/h4&gt;
&lt;p&gt;Allowing routing between VLAN 25 and the native management network required a firewall rule. The lazy approach is an &amp;ldquo;Allow All&amp;rdquo; rule, but if a device on VLAN 25 got compromised, that&amp;rsquo;s a wide open door into the infrastructure layer.&lt;/p&gt;
&lt;p&gt;Instead I got surgical about it. I created a Host Alias in OPNsense named &lt;code&gt;SW_CORE_MGMT&lt;/code&gt;, hardcoded strictly to the switch&amp;rsquo;s IP (&lt;code&gt;172.16.0.4&lt;/code&gt;). Stateful firewalls apply rules on the ingress interface, so the rule sits on VLAN 25 where the traffic originates:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PASS | Protocol: TCP | Source: VLAN 25 net | Destination: SW_CORE_MGMT | Port: HTTP (80)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My desktop could reach the switch GUI. Everything else on the infrastructure layer was mathematically unreachable.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;section-5--the-result&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#section-5--the-result&#34;&gt;
        ##
    &lt;/a&gt;
    Section 5 — The Result
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;So here we are. A few days into running a custom OPNsense router, and I can report that the migration was surprisingly non-disastrous. The internet works. The family has not disowned me. Mostly.&lt;/p&gt;
&lt;p&gt;In day-to-day usage, nothing feels different, which is exactly the point. The packets move, and nobody notices the plumbing. But the small wins add up. Fing actually finishes a network scan now. My VMs no longer clutter the device list alongside my phone and my family&amp;rsquo;s laptops. I can finally see exactly what is connected to the Wi-Fi AP, cleanly separated from the infrastructure layer. The network just quietly does what I always wanted it to do.&lt;/p&gt;
&lt;p&gt;This project also shook the dust off some VLAN knowledge I had not touched in a few years. It came back faster than expected, and filling in the gaps was genuinely satisfying.&lt;/p&gt;
&lt;p&gt;If I am being honest about why I enjoyed this so much: it pulls you completely out of your head. After months of grinding through pure code, pipelines, and heavy deployments, picking up a networking challenge felt like switching to a different muscle group entirely. I thrive on problems that are convoluted enough to require actual thinking, and this had just enough of that. The planning phase especially, sitting down and architecting the VLAN schema before touching a single config page, was the kind of focused work that is hard to find elsewhere.&lt;/p&gt;
&lt;p&gt;And then there are the dashboards. Any engineer knows the feeling: a screen full of live graphs, counters, and connection states, with every knob visible and tweakable. I could watch the OPNsense dashboard for an embarrassing amount of time. It is the kind of visibility that makes you realize how blind you were flying before. I can see traffic patterns, apply QoS, and most importantly, keep my test workloads completely isolated. The house&amp;rsquo;s internet is no longer at the mercy of whatever ISO I am pulling into a VM at 11 PM.&lt;/p&gt;
&lt;p&gt;Speaking of the house&amp;rsquo;s internet, I did briefly cut it during the migration. Right after a long day of work. They were not thrilled. I survived.&lt;/p&gt;
&lt;p&gt;The other rabbit hole I didn&amp;rsquo;t anticipate was the OPNsense plugin ecosystem. I opened the community packages list expecting a handful of basic utilities and found myself staring at a wall of genuinely powerful tools. Tailscale integration, performance monitoring, automated config backups straight to a Git repository; that last one alone has me unreasonably excited. I hadn&amp;rsquo;t planned on running much beyond the base firewall, but future me is going to be very busy.&lt;/p&gt;
&lt;p&gt;One last thing worth saying: I had an AI assistant open for a good chunk of this build. It parsed logs, sanity-checked configs, and acted as a sounding board. It helped. But an LLM is only as useful as the person wielding it. You don&amp;rsquo;t need to be a senior network architect, but a fair working knowledge of virtualisation, Linux, and basic routing goes a long way before you attempt something like this.&lt;/p&gt;
&lt;p&gt;I started with partial knowledge myself, and the gaps filled in as I went. But the project taught me more than I expected precisely because I wasn&amp;rsquo;t just blindly copying commands and clicking through guides. When you do that and hit a wall, and you will hit a wall, you have absolutely nothing to fall back on. Knowing where you went wrong and why is worth more than whatever you end up building. The infrastructure will change. The understanding stays.&lt;/p&gt;
&lt;p&gt;To any homelabber reading this: build it. Don&amp;rsquo;t do it just to put it on your resume. Do it because you can spend hours pulling one thread, watching how changing a single VLAN tag breaks something three layers down, and then fixing it. That loop is deeply satisfying.&lt;/p&gt;
&lt;p&gt;There is more coming. I have a few projects sitting in the bag that tie back into this infrastructure, and this network rebuild was partly laying the groundwork for them. More on that later.&lt;/p&gt;
&lt;p&gt;And that M.2 A+E 2.5G adapter is still on the shopping list. At 2,199 INR, one day.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
