Skip to main content
RunBook Academy

OPNsenseXLI · Upgrades and Plugin ManagementMajor version upgrades

Major version upgrades — the 25.x to 26.x leap and what it carries

Advanced⏱ ~18 minconfigctlbeadmpkgpfctlxmllint

What you'll learn

  • Identify what changes between major OPNsense releases (kernel, PHP, plugins, defaults)
  • Plan the long-form migration with rollback checkpoints and staged rollout
  • Execute the major upgrade with backup, BE confirmation, and post-upgrade verification
  • Recognise the regression patterns that surface weeks after a major upgrade

Prerequisites

Verified against OPNsense 25.x · FreeBSD 14.x · PF (FreeBSD packet filter) FreeBSD 14.x · Unbound 1.20+ · Kea DHCP OPNsense 25.x plugin · WireGuard in-kernel + OPNsense plugin · strongSwan (IPsec plugin) OPNsense 25.x plugin · OpenVPN 2.6.x · Suricata 7.x · 2026-08-14

Not yet marked complete on this device.

A major OPNsense release is a different beast from a patch. The kernel changes, the PHP version changes, the plugin API shifts, the defaults can move, and the migration is rarely one-click. The operator who treats a major upgrade as a routine patch turns a quarterly maintenance task into a multi-day migration.

This lesson covers what changes between major releases, the long-form migration plan, the rollback strategy when the major upgrade fails, and the post-upgrade verification that catches the regressions that surface days or weeks later.

What changes between major releases

A major OPNsense release (e.g. 25.x26.x) carries four classes of change. Each class has a different risk profile and a different test requirement.

ClassExampleRisk profile
FreeBSD base bump14.x → 15.xKernel change, driver updates, possibly removed drivers, possible ABI breaks
PHP runtime upgradePHP 8.3 → 8.4Plugin compatibility breaks, API changes, deprecated function removals
Plugin API breakageRemoved endpoints, renamed parameters, restructured responsesAPI consumers break; dashboard widgets may fail to load
Default changesNew default firewall rule, new default logging, new default NTP sourceBehaviour changes silently if the operator does not read the notes

The FreeBSD bump is the highest-risk change. A new kernel can drop support for a NIC, change the IRQ handling, or alter the network stack in ways that surface as throughput regressions or interface flapping. The disciplined operator reads the FreeBSD release notes alongside the OPNsense notes for any major OPNsense release that bumps the FreeBSD base.

The PHP upgrade is the second-highest-risk. OPNsense plugins are PHP. A removed function or a stricter type check can break a plugin’s logic in ways that are not visible until the firewall is in production. The disciplined operator checks every installed plugin’s compatibility with the target PHP version before upgrading.

The long-form migration plan

A major upgrade is not a 30-minute window. It is a multi-week migration with explicit phases:

PhaseDurationGoal
1. Read and assess1-2 weeksRelease notes read, plugin compatibility checked, breaking changes documented
2. Lab upgrade1 weekFull upgrade in lab, every feature tested, regressions documented
3. Pre-prod upgrade1 weekUpgrade on non-critical firewall, smoke test against production traffic patterns
4. HA standby upgrade1 weekUpgrade the standby node, failover drill, monitor for regressions
5. Production upgradeScheduled windowPrimary upgrade during announced window with full operator coverage
6. Post-upgrade monitoring4 weeksDaily health checks, regression sweep, rollback readiness maintained

The total elapsed time is 6-8 weeks. The discipline is that the production upgrade does not happen until the same release has been running on every other appliance for at least one week without issue.

DestructiveMajor upgrade — CLI
$ opnsense-update -t 26.1 && opnsense-update -c && /usr/local/sbin/opnsense-bootstrap.sh
Updating to OPNsense 26.1 ...
Downloading packages... done
Verifying signatures... done
Applying upgrade... done
Reboot required.

The actual GUI-driven flow uses System → Firmware → Updates → Upgrade.

Illustrative output

Rollback checkpoints

A major upgrade can fail at any of three points:

  1. Pre-reboot failure. The upgrade packages download or verify, but the install fails (e.g. incompatible plugin, full disk). Rollback: remove the offending plugin or free disk space, re-run the upgrade.
  2. Post-reboot failure. The firewall reboots but does not reach a usable state (e.g. interface down, GUI unreachable, ruleset failed to load). Rollback: boot menu → Boot previous. Returns to the previous BE in seconds.
  3. Late regression. The firewall is up, traffic flows, but a feature regressed (e.g. monitoring target unreachable, IPsec tunnel re-keying fails, IDS rule no longer fires). Rollback: investigate, fix forward if possible; if not, boot menu → Boot previous.

The rollback at checkpoint 2 is the most reliable. The boot menu returns to the previous BE with the previous firmware and the previous configuration. The current BE is preserved; the operator can return to it later if the issue is resolved.

The rollback at checkpoint 3 is the hardest. The firewall is in production; rolling back means another reboot window; the regression may be intermittent and hard to attribute. The disciplined pattern is to keep the previous BE available for at least 30 days after a major upgrade, so the rollback is always an option.

Post-upgrade verification — the four-week sweep

A major upgrade is not “successful” when the firewall comes back up. It is successful when the four-week sweep finds no regressions. The sweep:

WeekCheck
1Daily: interface errors, routing table, state-table utilisation, log spam, GUI reachable
2Every other day: IPsec tunnel re-keying, WireGuard handshake, IDS rules firing, monitoring targets responding
3Weekly: backup verify, plugin update check, certificate expiry, NTP drift
4Final: full DR runbook review, runbook updates, lessons-learned document

A regression that surfaces in week 2 or week 3 is the reason the sweep exists. The operator who declares success after week 1 and walks away misses the late regressions.

The migration lessons from past major upgrades

Past major OPNsense upgrades have taught the operator community several lessons:

  1. The first patch release is safer than the first minor. 26.1.1 is more stable than 26.1.0. If the business allows, wait for the first patch before upgrading production.
  2. Plugins lag by weeks. A major release ships with some plugins incompatible. The plugin authors catch up. Upgrading the day after the release means running on incompatible plugins.
  3. The default changes are silent. A new default rule, a new default NTP source, a new default log retention — these do not announce themselves. The post-upgrade sweep is what catches them.
  4. The rollback is finite. The previous BE is eventually pruned for disk space. The window for rollback is 30 days; after that, the operator must re-install.

Summary

  • A major release carries FreeBSD, PHP, plugin API, and default changes.
  • The migration plan is 6-8 weeks long, not 30 minutes.
  • Read both the OPNsense and FreeBSD release notes.
  • The boot environment is the rollback target. Keep it for 30 days.
  • The four-week post-upgrade sweep catches the interactions that surface late.
  • Wait for the first patch release if the business allows.

Knowledge check · 4 questions

  1. Q1. A major OPNsense release (25.x to 26.x) bumps the FreeBSD base from 14.x to 15.x. Which class of change is the highest risk for a production firewall?

  2. Q2. A major upgrade is successful when the firewall reboots and the GUI is reachable. The four-week post-upgrade sweep is unnecessary because the immediate post-upgrade checklist is sufficient.

  3. Q3. Which of the following are part of the long-form migration plan for a major upgrade? Select all that apply.

  4. Q4. A major upgrade completed two weeks ago. The previous boot environment is still available. A regression surfaces in an IPsec re-key scenario. What is the appropriate response?

Passing score: 75%. Answers are checked in this browser.