Skip to content
Go back

UniFi in a Home Lab: Worth the Tax?

By KingPin 15 min read
UniFi in a Home Lab: Worth the Tax?
Contents

You wanted a network. You got a lifestyle.

It starts with one bad WiFi AP. You read a few forum threads, and every answer says the same word: UniFi. Three weeks later you own a gateway, two APs, a PoE switch, and a strong opinion about the color of a topology map.

UniFi is good. It is also priced like it knows that. The question for a home lab is whether the premium buys you something an OPNsense router, a cheap managed switch, and standalone APs cannot.

Short answer: pay for the APs and the switch, skip the gateway. Run the controller yourself, and let OPNsense do the routing. One wrinkle as of October 2026: Ubiquiti froze the standalone controller at version 10.6, so “run it yourself” now has two flavors. The rest of this post shows the numbers, the trade-offs, both controller options, and a Compose file.

Full example: Clone the working files at github.com/KingPin/sumguy-examples/networking/unifi-home-lab-tax

What the “UniFi tax” actually is

The tax has five parts. Only the first one shows up on the receipt.

  1. Price per box. A UniFi AP or switch costs more than a comparable standalone device.
  2. A controller you must run. One UI manages everything, which means something has to host it. That is either a UniFi gateway, a dedicated appliance, or your own server.
  3. Single-vendor gravity. The good features appear when every device is UniFi. Mix in a third-party switch and the topology map, port profiles, and firmware pushes stop covering it.
  4. Firmware churn. Ubiquiti ships release candidates and an early access channel, and new hardware often launches with a rough controller. You decide how fast to follow.
  5. Less router. A UniFi gateway is a good appliance router. It covers the common cases and stops there.

The prices, as of October 2026

Ubiquiti’s US store shows a list price and a second price labeled “Surcharge incl.” Checkout charges the second one. The list price is what you remember from a review. The surcharge price is what leaves your card. Everything below is the checkout figure, from the product pages on store.ui.com on 2026-10-22.

DeviceListYou pay
UCG-Ultra (1 Gbps routing, 30+ UniFi devices / 300+ clients)$129$142
UCG-Max (2.5G, NVR storage option)$279$307
UDR7 (10G gateway, built-in WiFi 7, PoE switch)$279$307
UX7 (10G gateway with WiFi 7)$199$219
U7 Pro (WiFi 7, 6 GHz)$189$208
U7 Lite (WiFi 7, 2.5 GbE uplink)$99$109
U6+ (WiFi 6)$129$142
USW-Flex-Mini (5-port, no surcharge)$29$29
USW-Lite-8-PoE$109$120
USW-Lite-16-PoE$199$219

The older U6 Long-Range AP shows $179 on its store page and is currently unavailable. The Cloud Key Gen2 Plus ($199) and U6 Lite ($99) were sold out at fetch time.

Here is a small, realistic build: a gateway, two WiFi 7 APs, and an 8-port PoE switch.

Drop the gateway and you pay $338 for the APs and switch. The router becomes your problem, in a good way. Deciso, the company behind OPNsense, lists its DEC677 desktop appliance at EUR 598 on its shop (the listing does not say whether that includes VAT). A used mini PC with two NICs also works, and costs whatever your local used market says. I will not guess at a number for that.

So the router is where the DIY route is not cheaper. A UCG-Ultra at $142 is hard to beat with new hardware. The savings only show up if you already own a box, or if you want the features below.

What the DIY stack gives you

The DIY stack is OPNsense (or pfSense) on a router, a cheap managed switch, and APs running vendor firmware or OpenWrt. If you want the router comparison, pfSense vs OPNsense covers it.

What a home labber gets from OPNsense that a UniFi gateway does not match:

You also get a different failure mode. When OPNsense breaks at 2 AM, you own every layer. That is the real cost of the DIY route: your time.

What the polish buys you

This part is real.

One pane of glass. You create a VLAN, tag a port profile, and bind an SSID to it, all in one UI. On the DIY stack that is three devices, three web interfaces, and one typo that takes down the IoT network. If you have not set up VLANs before, VLAN basics for a home lab explains the model, and VLAN trunking gotchas lists what breaks.

Adoption. A new device appears in the controller, you click adopt, and it receives its config. No per-device static IP, no copying SSID settings by hand.

Roaming. The controller coordinates the APs as a group: same SSID, shared settings, minimum RSSI options, band steering. Standalone APs can do 802.11r/k/v too, but you configure each one and hope the settings match.

The topology view and client list. A live map of what is plugged into which port, with per-client signal and traffic. It sounds like a toy until you hunt for a loop.

The ecosystem. If you ever add cameras or door readers, Protect and Access live in the same family. That only matters if you want those products.

The middle path: UniFi APs and switch, OPNsense router

This is the layout I would push most readers toward.

  1. OPNsense routes, firewalls, and does DNS and VPN.
  2. A UniFi PoE switch connects the APs and the lab, with VLAN trunks to OPNsense.
  3. UniFi APs broadcast the SSIDs, mapped to VLANs.
  4. A self-hosted controller (UniFi OS Server or the Network Application container) manages the APs and the switch.

You pay UniFi prices for the parts where the polish is real (WiFi and switching) and skip the part where OPNsense is stronger. The gateway is the one UniFi device you do not need, because the controller runs on hardware you already own.

The only catch is the trunk. OPNsense gets the VLAN interfaces, and the switch port facing it must carry the VLANs tagged. On the OPNsense side, create the VLANs under Interfaces, Devices, VLAN, then assign each one and enable its interface and DHCP. On the UniFi side, create the matching networks with the router set to Third-party Gateway (VLAN IDs only, since there is no UniFi gateway to serve DHCP) and set the uplink port profile to allow them.

If your cameras and smart plugs need isolation without breaking casting, IoT VLANs without breaking Chromecast shows the rules to write on the router.

Self-hosting the controller

The controller does not need a Cloud Key. You have two self-hosted options, and Ubiquiti recently changed which one it backs.

In September 2026 Ubiquiti announced that UniFi Network 10.6 is the final release of the standalone Network Application. Network 11 and later ship only on UniFi OS Server and UniFi consoles. A 10.6 controller keeps managing your devices, but it gets no new features, and Ubiquiti has not said how long 10.6 receives fixes.

So the choice is:

The container route

The linuxserver.io image runs the Network Application, and it needs a MongoDB container beside it. The supported MongoDB range depends on the app version: per the linuxserver.io docs, 3.6 through 7.0 for the 8.1 line, with 8.0 added at 9.0. The current image at the time of writing is 10.6.106, so this file pins MongoDB 8.0.34. Per the same docs, MongoDB above 4.4 on x86_64 needs a CPU with AVX, which Celeron and Pentium chips from before Tiger Lake lack. On those, pin mongo 4.4 instead.

compose.yaml
services:
unifi-db:
image: docker.io/mongo:8.0.34
container_name: unifi-db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASS:?set in .env}
MONGO_USER: unifi
MONGO_PASS: ${MONGO_PASS:?set in .env}
MONGO_DBNAME: unifi
MONGO_AUTHSOURCE: admin
volumes:
- ./data/db:/data/db
- ./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro
restart: unless-stopped
unifi-network-application:
image: lscr.io/linuxserver/unifi-network-application:10.6.106
container_name: unifi-network-application
depends_on:
- unifi-db
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ:-Etc/UTC}
MONGO_USER: unifi
MONGO_PASS: ${MONGO_PASS:?set in .env}
MONGO_HOST: unifi-db
MONGO_PORT: 27017
MONGO_DBNAME: unifi
MONGO_AUTHSOURCE: admin
MEM_LIMIT: 1024
MEM_STARTUP: 1024
volumes:
- ./data/config:/config
ports:
- 8443:8443 # web UI (HTTPS)
- 8080:8080 # device inform / adoption
- 3478:3478/udp # STUN
- 10001:10001/udp # device discovery
- 1900:1900/udp # optional: L2 discovery
- 8843:8843 # optional: guest portal HTTPS
- 8880:8880 # optional: guest portal HTTP
- 6789:6789 # optional: mobile speed test
- 5514:5514/udp # optional: remote syslog
restart: unless-stopped

The Network Application cannot create its own database user, so MongoDB needs an init script. This one comes from the linuxserver.io docs. It runs once, when the data directory is empty.

init-mongo.sh
#!/bin/bash
if which mongosh > /dev/null 2>&1; then
mongo_init_bin='mongosh'
else
mongo_init_bin='mongo'
fi
"${mongo_init_bin}" <<EOS
use ${MONGO_AUTHSOURCE}
db.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}")
db.createUser({
user: "${MONGO_USER}",
pwd: "${MONGO_PASS}",
roles: [
"clusterMonitor",
{ db: "${MONGO_DBNAME}", role: "dbOwner" },
{ db: "${MONGO_DBNAME}_stat", role: "dbOwner" },
{ db: "${MONGO_DBNAME}_audit", role: "dbOwner" },
{ db: "${MONGO_DBNAME}_restore", role: "dbOwner" }
]
})
EOS

Copy the example .env, change both passwords, then start it. Stick to letters and digits in MONGO_PASS: the linuxserver.io docs want special characters URL-encoded for the app, while the init script hands the same string to MongoDB raw.

Terminal window
cp .env.example .env
$EDITOR .env
docker compose up -d
curl -sk https://localhost:8443/status

I ran this stack on a Docker host and the controller reported "up":true on version 10.6.106 after a few minutes. The first requests return “starting up” while the app initializes, so wait before you suspect a problem.

Two ports deserve a note. Port 8080 is the inform port, and every device must reach it. Port 10001/udp handles AP discovery, which only works when the container host shares a broadcast domain with the devices. If your controller lives on another VLAN, use the inform command below and skip discovery.

One setting is not optional. Inside Docker the controller only knows its container IP, which your APs cannot reach, so it hands them an inform address that goes nowhere. Before you adopt anything, enable Inform Host Override and set it to the Docker host’s IP or hostname. The linuxserver.io docs place it under UniFi Devices, Device Updates and Settings, Device SSH Settings, and warn that Ubiquiti moves it every few releases, so search the settings for “Inform” if it is not there.

Adopting a device

Open the AP’s page in your DHCP list to find its IP, then SSH in and point it at the controller:

Terminal window
ssh <device-user>@<device-ip>
set-inform http://<controller-ip>:8080/inform

A factory-reset UniFi device accepts ui for both username and password (ubnt / ubnt on older devices). A device that belonged to another controller uses that controller’s SSH credentials, so reset it first. Once the device shows up, click adopt. If it sits at “Adopting” and then drops offline, the Inform Host Override above is the usual culprit.

Back up data/config before upgrades, and pin image tags rather than following latest. The controller database is the one thing you cannot rebuild by clicking.

The UniFi OS Server route

UniFi OS Server is a self-hosted copy of the full UniFi OS, free and license-free per Ubiquiti, and it is where Network 11 lands. Ubiquiti’s Self-Hosting UniFi article lists the requirements:

On Debian or Ubuntu the install is a package step plus a downloaded installer. The download link comes from Ubiquiti’s download page:

Terminal window
sudo apt-get update && sudo apt-get install podman slirp4netns
curl -O <uos-server-download-link>
chmod +x <uos-server-installer>
sudo ./<uos-server-installer>
sudo systemctl enable uosserver

Two limits matter for a home lab. Ubiquiti’s FAQ says UniFi OS Server will not ship as a standalone Docker or Podman container, because it needs host services for discovery, adoption, and updates. Give it its own small VM rather than your container host. Also, a Cloud Gateway (UCG, UDM) cannot join a UniFi OS Server site, because the gateway runs its own controller. Pairing a UniFi router with a self-hosted controller means a UXG-series gateway. With OPNsense in front, none of that applies.

To migrate later, take a backup from the 10.6 container, stop it, install UniFi OS Server, and move the site over with Ubiquiti’s Site Export tool, per the same Ubiquiti article.

Who should pay the tax

Pay it if:

Skip it if:

The verdict. Buy UniFi APs and a UniFi switch, and put OPNsense in front. For the controller, a new build should start on UniFi OS Server in a small VM, since that is where Ubiquiti’s updates go. If you already run Docker and want the controller in your Compose stack, the 10.6 container is fine for APs and switches today; just plan the move before Ubiquiti stops patching it. If you would rather not run a second box at all, buy a UCG-Ultra and let it be router and controller in one. If you already own an OPNsense box, the gateway is the one purchase you can skip, and you save $142 on the entry model.

Common Questions

Do I need a Cloud Key to run UniFi?

No. A Cloud Key is a hardware controller, and free UniFi OS Server on a small VM replaces it, as does the Network Application in Docker (frozen at 10.6). A UniFi Cloud Gateway also hosts the controller. The Cloud Key Gen2 Plus listed at $199 and was sold out in Ubiquiti’s store in October 2026.

Can UniFi APs work without a UniFi gateway?

Yes. UniFi APs and switches adopt into a self-hosted controller and work behind any router. You lose gateway-specific features, like the firewall UI and the gateway’s traffic stats. DHCP, DNS, and routing come from your router, such as OPNsense, which is the setup this post recommends.

How do I move away from UniFi if I change my mind?

Reset each device to factory defaults, then adopt it into a new controller or flash alternate firmware where supported. Export the controller backup first so you keep your SSID and VLAN settings for reference. Switches and APs forget their config on reset, so plan a maintenance window for the whole network.

Is the surcharge on Ubiquiti’s store real?

Yes. In October 2026 the store showed a list price and a higher “Surcharge incl.” price on many products, and checkout charged the higher one. A UCG-Ultra listed at $129 cost $142. Compare prices using the surcharge figure, and recheck at checkout because the store changes.

Is the standalone UniFi Network Application discontinued?

Yes, for new features. Ubiquiti said in September 2026 that UniFi Network 10.6 is the last standalone release, and Network 11 ships only on UniFi OS Server and UniFi consoles. A 10.6 controller keeps managing devices, but Ubiquiti has not said how long 10.6 gets security fixes.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Previous Post
Read-Only Docker Containers: What Breaks
Next Post
Near-Zero-Downtime Postgres Major Upgrades

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts