Migrating to OPNsense on Zimaboard 2¶
I replaced a TP-Link Deco mesh system with OPNsense running on a Zimaboard 2. The Deco now runs purely as Wi-Fi access points — routing, DNS, DHCP, firewall, and VPN all moved to OPNsense. This guide walks through the full process, including the gotchas that most OPNsense guides skip.
Prerequisites¶
- Zimaboard 2 (or similar x86_64 SBC with dual NICs)
- USB stick (4 GB or larger)
- Monitor and keyboard for the initial install
- A spare computer for flashing the USB
- Balena Etcher installed
- Your current network documented (see Pre-cutover prep below)
Hardware: Zimaboard 2¶
The Zimaboard 2 is a single-board server with dual 2.5GbE NICs, an x86_64 Intel processor, and onboard eMMC storage. It's a solid choice for a home router:
- Dual 2.5GbE — one WAN, one LAN (connect to your switch or AP)
- x86_64 — full OPNsense compatibility, including Suricata IDS
- Passive cooling — no fan, no noise
- Low power — suitable for always-on use
Pre-Cutover Preparation¶
Before pulling the plug on your existing router, document your current setup. You'll need this to recreate it in OPNsense.
- WAN connection type (most home connections are DHCP from the ISP — no PPPoE needed)
- Your current LAN subnet (e.g.,
192.168.1.0/24) - DHCP range your router is using
- Any static/reserved IPs (hostname, IP, MAC address for each)
- Any port forwards you need to recreate
- Your current DNS config (what upstream DNS servers are set)
Tip
If you're migrating to Pi-hole + Unbound (see DNS Stack), note your Pi-hole's IP now — you'll point OPNsense's DHCP at it during setup.
Installation¶
1. Download OPNsense¶
Go to opnsense.org/download and download:
- Architecture: amd64
- Image type: vga (not serial)
- Format:
.img.bz2
2. Decompress and Flash¶
On macOS, double-clicking the .img.bz2 decompresses it automatically. Then flash to your USB stick with Balena Etcher.
Warning
Etcher will erase the USB stick. Make sure you select the correct drive.
3. Boot the Zimaboard from USB¶
Connect monitor, keyboard, and USB stick to the Zimaboard. Power it on and boot from USB (you may need to press F11 or Del during POST to select the boot device).
4. Run the Installer¶
At the login prompt:
When the installer starts:
- Accept the default keymap (or select yours)
- Choose Install (ZFS) — more resilient than UFS for flash storage
- Stripe layout (no RAID — single device)
- Select the internal eMMC as the install target — not your USB stick
- Set a root password when prompted
Keyboard layout during install
If you change the keymap during install, make sure you type your root password using that layout. Mismatches here cause login failures later and are hard to debug remotely.
5. Remove USB and Reboot¶
Once the install completes, remove the USB stick and let the Zimaboard reboot into OPNsense.
Initial Configuration¶
OPNsense defaults to 192.168.1.1 on the LAN interface. Connect a laptop or Raspberry Pi directly to the LAN port via Ethernet and browse to https://192.168.1.1.
Default credentials: root / the password you set during install.
Run the Setup Wizard¶
The wizard runs on first login. Work through each step:
General
- Hostname: whatever you want (e.g.,
router) - Domain:
localorlocaldomain - Primary DNS: your Pi-hole IP (e.g.,
192.168.1.x) — you'll update this after cutover - Uncheck Override DNS
WAN Interface
- Type: DHCP (for most home broadband connections)
- MTU: 1500
- Enable Block private networks and Block bogon networks
LAN Interface
- Change the IP to match your existing subnet (e.g.,
192.168.1.1/24) - Reconnect at the new IP after the wizard saves
Tip
If you're keeping your existing subnet (e.g., 192.168.1.0/24), your devices won't need to renew leases after cutover.
DHCP Configuration (Dnsmasq)¶
OPNsense v26 uses Dnsmasq by default
OPNsense 26.x switched to Dnsmasq as the default DHCP server, replacing Kea. Most older guides and forum posts reference Kea or ISC DHCP — ignore those settings. Look for Services → Dnsmasq DNS & DHCP.
Navigate to Services → Dnsmasq DNS & DHCP → General and configure:
- DHCP Range: Set a start and end IP that leaves room for your static reservations outside the pool. Example:
192.168.1.100to192.168.1.250 - DHCP Option 6 (DNS server): Point this at your Pi-hole IP. This tells every DHCP client to use Pi-hole for DNS.
- Dnsmasq DNS listen port: Leave at
53053— this avoids conflicting with Pi-hole on port 53 if they're on the same host. Since Pi-hole is on a separate machine, this doesn't matter, but leaving it non-standard avoids confusion. - Disable Unbound DNS: Go to Services → Unbound DNS and disable it. Pi-hole owns DNS in this setup; you don't want Unbound competing.
Host Overrides — DHCP Reservations + Local DNS in One¶
This is one of the most useful features of Dnsmasq that most guides underexplain. Under Services → Dnsmasq DNS & DHCP → Hosts, you can add entries that serve two purposes simultaneously:
- DHCP reservation — the device always gets the same IP via MAC address
- Local DNS record — the hostname resolves on your LAN without needing Pi-hole local DNS records
For each server or device that needs a stable IP:
| Field | Value |
|---|---|
| Host | pihole-host |
| Domain | local |
| IP address | 192.168.1.x |
| MAC address | aa:bb:cc:dd:ee:ff |
| Tick Local | ✅ |
With Local ticked, pihole-host.local resolves to that IP from any device on the network — no separate Pi-hole local DNS record needed for LAN hosts.
Tip
Set up all your reservations here before cutover so devices get the right IPs from the first DHCP lease.
The Physical Cutover¶
Once OPNsense is configured and you've verified it boots and accepts your login:
- Switch your Deco (or other mesh AP) to Access Point mode — in the Deco app: More → Advanced → Operating Mode → Access Point. This disables its DHCP server and routing.
- Unplug the fibre/coax cable from your old router's WAN port
- Plug it into the Zimaboard's WAN port
- Plug the Zimaboard's LAN port into your switch or directly into the main Deco/AP
- Wait ~60 seconds for the WAN DHCP lease to come up
- Test from a connected device — you should have internet within a minute
Verification¶
# Check you're getting DNS from Pi-hole
cat /etc/resolv.conf # should show your Pi-hole IP
# Test internet
ping -c 3 1.1.1.1
# Check DNS works
dig google.com @192.168.1.x # replace with Pi-hole IP
From the OPNsense dashboard: Lobby → Dashboard should show WAN with an IP from your ISP.
Common Gotchas¶
| Problem | Cause | Fix |
|---|---|---|
| Changes not taking effect | Forgot to click Apply | Every change in OPNsense requires the Apply button |
| No internet after cutover | ISP MAC binding (rare) | Clone your old router's MAC under Interfaces → WAN |
| Can't log in after install | Keyboard layout mismatch during password entry | Console reset via physical access |
| DHCP not working | Dnsmasq not enabled | Services → Dnsmasq DNS & DHCP → General → Enable |
| Devices not resolving local hostnames | Local tick not checked on host override | Edit each host override, tick Local, apply |
Related Pages¶
- Pi-hole + Unbound DNS Stack — configure DNS after OPNsense is running
- WireGuard VPN — add VPN to your OPNsense router
- Internal Hostnames — serving internal services with proper TLS
If there is an issue with this guide or you wish to suggest changes, please raise an issue on GitHub.